Это не заняло много времени, хотя каждый из этих узлов и добавлялся в сеть по-одному. А как быть, если к виртуальной сети 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, обновления и перезагрузки системы:
я проверил, видит ли система 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 🙂 И мне уже можно настраивать его и сетевой мост.
Чем собственно я и занялся следуя нижеуказанному алгоритму:
Выполнил команду отключения управление IP-адресами и маршрутами ZeroTier:
sudo zerotier-cli set <networkID> allowManaged=0
Далее на своём сетевом контроллере:
В Networks кликнул на detail, нашёл и перешёл по ссылке v4AssignMode и отключил автоназначение IP-адресов, сняв отметку с чек-бокса Auto-assign from IP Assignment Pool
После этого авторизовал подключаемый узел, задав название и отметив чек-боксы Authorized и Active Bridge. IP-адрес не назначал.
Потом вернулся к настройке сетевого моста на узле, для чего открыл для редактирования через терминал файл конфигурации сетевых интерфейсов:
Где 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 дня!