В процессе первых пяти шагов, описанных в статье Powered by ZeroTier. Практическое руководство по строительству виртуальных сетей. Часть 1 мы объединили виртуальной сетью три географически удалённых друг от друга узла. Один из которых расположен в физической сети, два других — в двух разнесённых ДЦ.  


Это не заняло много времени, хотя каждый из этих узлов и добавлялся в сеть по-одному. А как быть, если к виртуальной сети ZeroTier нужно подключить не один, а все находящиеся в физической сети узлы? Такая задача встала однажды передо мной, когда я озадачился вопросом организации доступа из виртуальной сети к сетевым принтеру и маршрутизатору. 

Попробовал использовать описанный выше способ — получилось не быстро и не везде просто. Например, сетевой принтер — просто так не подключишь. Mikrotik —  ZeroTier не поддерживает. Что делать? Много погуглив и проанализировав матчасть, я пришёл к выводу, что нужно организовывать сетевой мост.

Сетевой мост (также бридж с англ. bridge) — сетевое устройство второго уровня модели OSI, предназначенное для объединения сегментов (подсети) компьютерной сети в единую сеть.

Историей о том, как я это сделал, я и хочу поделиться в этой статье.. 

Что нам стоит, мост построить...


Для начала мне, как администратору, стоило определиться — какой узел в сети будет выступать в качестве бриджа. Изучив варианты, я понял, что им может быть любое компьютерное устройство, у которого существует возможность организации моста между сетевыми интерфейсами. Им может стать как маршрутизатор — устройство под управлением OpenWRT или оборудование серии RUT компании Teltonika, так и обычный сервер или компьютер. 

Вначале, я конечно рассматривал возможность использования маршрутизатора с OpenWRT на борту. Но учитывая тот факт, что существующий Mikrotik меня полностью устраивает, хотя и не поддерживает интеграцию с ZeroTier, а извращаться и «плясать с бубном» уж очень не хочется, я, в качестве сетевого моста решил использовать компьютер. А именно, постоянно подключённый к физической сети Raspberry Pi 3 Model B под управлением последней версии Raspbian — ОС на базе Debian Buster.

Для возможности организации бриджа, на устройстве должен быть доступен один неиспользуемый другими сервисами сетевой интерфейс. В моём случае основной Ethernet был уже задействован, поэтому я организовал второй. Использовав для этой задачи USB-Ethernet адаптер на базе чипсета RTL8152 от Realtek.

После присоединения адаптера к свободному порту USB, обновления и перезагрузки системы:

sudo apt update && sudo apt upgrade -y
sudo reboot

я проверил, видит ли система USB Ethernet адаптер:

sudo lsusb

Проанализировав полученные данные

Bus 001 Device 004: ID 0bda:8152 Realtek Semiconductor Corp. RTL8152 Fast Ethernet Adapter
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

я с удовлетворением отметил, что Device 004 как раз мой адаптер.

Далее уточнил, какой сетевой интерфейс присвоен этому адаптеру:

dmesg | grep 8152

[    2.400424] usb 1-1.3: New USB device found, idVendor=0bda, idProduct=8152, bcdDevice=20.00
[    6.363837] usbcore: registered new interface driver r8152
[    6.669986] r8152 1-1.3:1.0 eth1: v1.09.9
[    8.808282] r8152 1-1.3:1.0 eth1: carrier on

Оказалось eth1 :) И мне уже можно настраивать его и сетевой мост. 

Чем собственно я и занялся следуя нижеуказанному алгоритму:

  • Установил пакеты управления сетевым мостом:

    sudo apt-get install bridge-utils
  • Установил ZeroTier ONE:
     
    curl -s https://install.zerotier.com | sudo bash
  • Подключил его к существующей сети ZeroTier:

    sudo zerotier-cli join <Network ID>
  • Выполнил команду отключения управление IP-адресами и маршрутами ZeroTier:

    sudo zerotier-cli set <networkID> allowManaged=0

Далее на своём сетевом контроллере:

В Networks кликнул на detail, нашёл и перешёл по ссылке v4AssignMode и отключил автоназначение IP-адресов, сняв отметку с чек-бокса Auto-assign from IP Assignment Pool


После этого авторизовал подключаемый узел, задав название и отметив чек-боксы Authorized и Active Bridge. IP-адрес не назначал.


Потом вернулся к настройке сетевого моста на узле, для чего открыл для редактирования через  терминал файл конфигурации сетевых интерфейсов:

sudo nano /etc/network/interfaces

Куда добавил следующие строки

auto eth1
allow-hotplug eth1
iface eth1 inet manual

auto br0
allow-hotplug br0
iface br0 inet static
        address 192.168.0.10
        netmask 255.255.255.0
        gateway 192.168.0.1
        network 192.168.0.0
        broadcast 192.168.0.255
        dns-nameservers 127.0.0.1
        bridge_ports eth1 ztXXXXXXXX
        bridge_fd 0
        bridge_maxage 0

Где eth1 — подключённый USB Ethernet адаптер, которому IP-адрес не назначал.
br0 — создаваемый сетевой мост со назначенным постоянным IP-адресом из диапазона адресов моей физической сети.
ztXXXXXXXX — имя виртуального интерфейса ZeroTier, который узнал по команде:

sudo ifconfig

После ввода информации сохранил файл конфигурации и перегрузил сетевые сервисы командой:

sudo /etc/init.d/networking restart

Для проверки работоспособности моста, выполнил команду:

sudo brctl show   

По полученным данным — бридж поднялся.

bridge name	bridge id		STP enabled	interfaces
br0		8000.00e04c360769	no		eth1
							ztXXXXXXXX

Далее перешёл на сетевой контроллер для задания маршрута.

Для чего в списке узлов сети перешёл по ссылке IP assignment сетевого моста. Далее в открывшемся окне кликнул Managed routes. Перешёл на новую страницу, где в качестве Target указал 0.0.0.0/0, а в качестве Gateway — IP-адрес сетевого моста из диапазона адресов сети организации, заданный ранее. В моём случае 192.168.0.10


Подтвердил введенные данные и стал проверять сетевую связность узлов, пропинговать с узла физической сети узел в виртуальной сети и наоборот.

Вот собственно и всё!


У меня, правда, в отличие от прототипа, с которого были сделаны скриншоты, IP-адреса узлов виртуальной сети из того же диапазона что и IP-адреса узлов в физической. При мостовом соединении сетей эту модель возможна, главное чтобы они не пересекались с адресами раздаваемыми DHCP-сервером.

Про настройку сетевого моста на стороне узла под управлением MS Windows и других дистрибутивов Linux отдельно рассказывать в этой статье не буду — в интернете полно материалов по этой теме. Что же касается настройки на стороне сетевого контроллера — она идентична вышеописанной.

Хочу лишь отметить, что Raspberry PI — бюджетный и удобный инструмент при объединении сетей с ZeroTier, причём, не только как стационарное решение. Например, аутсорсеры могут использовать преднастроенный сетевой мост на основе Raspberry PI для быстрого объединения физической сети обслуживаемого клиента с виртуальными на базе ZeroTier.

На этом позволю эту часть повествования завершить. Жду вопросов, откликов и комментариев — ибо именно на их основе буду строить содержание следующей статьи. А пока предлагаю вам попробовать организовать собственную виртуальную сеть с помощью приватного сетевого контроллера с GUI на основе VDS из маркетплейса на сайте RUVDS. Тем более, что для всех новых клиентов действует бесплатный тестовый период — 3 дня!

-> Введение. Теоретическая часть. Интеллектуальный Ethernet-коммутатор для планеты Земля
-> Практическое руководство по строительству виртуальных сетей. Часть 1
-> Практическое руководство по строительству виртуальных сетей. Часть 2