![](https://habrastorage.org/getpro/habr/post_images/e2b/e2b/590/e2be2b590cd55147d1f0934837649596.jpg)
Продолжая рассказ о ZeroTier, от теории, изложенной в статье «Интеллектуальный Ethernet-коммутатор для планеты Земля», перехожу к практике, в которой:
- Создадим и настроим частный сетевой контроллер
- Создадим виртуальную сеть
- Настроим и подключим к ней узлы
- Проверим сетевую связность между ними
- Закроем доступ к GUI сетевого контроллера извне
Сетевой контроллер
Как уже было сказано ранее, для создания виртуальных сетей, управления ими, а также подключения узлов, пользователю необходим сетевой контроллер, графический интерфейс (GUI) для которого существует в двух ипостасях:
Варианты ZeroTier GUI
- Один от разработчика ZeroTier, доступного в виде публичного облачного решения, предоставляемого по модели SaaS, с четырьмя планами подписки, в том числе бесплатным, но ограниченным по количеству управляемых устройств и уровню поддержки
- Второй — от независимого разработчика, несколько упрощённого по функционалу, но доступного в качестве приватного open source решения, для использования on-premise или на облачных ресурсах.
В своей практике я пользовался обеими и в результате всё-таки остановился на второй. Причиной чему послужило предостережения разработчика.
«Сетевые контроллеры служат центрами сертификации для виртуальных сетей ZeroTier. Файлы содержащие секретные ключи контроллера должны тщательно охраняться и надежно архивироваться. Их компрометация позволяет неавторизованным злоумышленникам создавать мошеннические конфигурации сетей., а потеря — приводит к потере способности контролировать и управлять сетью, фактически делая её непригодной для использования»
→ Ссылка на документацию
А также, признаки собственной ИБ-параноидальности :)
- Даже если придёт Чебурнет — у меня должен оставаться доступ к своему сетевому контроллеру;
- Сетевым контроллером должен пользоваться только я. При необходимости, предоставляя доступ своим доверенным лицам;
- Должна быть возможность ограничения доступа к сетевому контроллеру извне.
Отдельно останавливаться на том, как развернуть сетевой контроллер и GUI для него на on-premise физических или виртуальных ресурсах, в этой статье я не вижу особого смысла. И тому тоже есть 3 причины:
- букв получится больше чем планировал
- об этом уже рассказано на GitHub разработчика GUI
- тема статьи о другом
Поэтому, выбрав путь меньшего сопротивления, буду использовать в данном повествовании сетевой контроллер с GUI на основе VDS, созданного из шаблона, любезно разработанного моими коллегами из RuVDS.
Первоначальная настройка
После создания сервера из указанного шаблона, доступ к Web-GUI контроллера пользователь получает через браузер, обратившись по адресу httрs://<IP-адрес сервера>:3443
![](https://habrastorage.org/getpro/habr/post_images/4ec/8a4/67b/4ec8a467b916f93c299a68bb06bd93db.png)
По умолчанию сервер уже содержит предварительно созданный самоподписанный TLS/SSL сертификат. Для меня этого достаточно, так как я закрываю доступ к нему извне. Для тех же, кто желает использовать другие типы сертификатов, есть инструкция по установке на GitHab разработчика GUI.
При первом входе пользователя в систему Login с установленными по умолчанию логину и паролю — admin и password:
![](https://habrastorage.org/getpro/habr/post_images/a3d/97c/f67/a3d97cf6742ff9eaaa15d5c247a3d52a.png)
Она предлагает изменить пароль по умолчанию на пользовательский
![](https://habrastorage.org/getpro/habr/post_images/3da/bb7/f33/3dabb7f33fe49d116341828ec2c2a187.png)
Я поступаю чуть иначе — не меняю пароль у существующего пользователя, а создаю нового — Create User.
Задаю имя нового пользователя — Username:
Задаю новый пароль — Enter new password:
Подтверждаю новый пароль — Re-enter password:
Вводимые символы чувствительны к регистру — будьте внимательны!
Чек-бокс подтверждения смены пароля при следующем входе — Change password on next login: не отмечаю.
Для подтверждения введенных данных жму Set password:
![](https://habrastorage.org/getpro/habr/post_images/19e/f01/170/19ef01170ab9cc34701e948c1105eacf.gif)
Потом: перелогиниваюсь — Logout / Login, уже под учётными данными нового пользователя:
![](https://habrastorage.org/getpro/habr/post_images/74d/80d/423/74d80d423278988490f04fbe4cfa961b.png)
Далее перехожу во вкладку пользователи — Users и удаляю пользователя admin, кликнув на иконку корзины, которая находится слева от его имени.
![](https://habrastorage.org/getpro/habr/post_images/844/f01/3f2/844f013f290d297801284e8c1a4f1ce4.gif)
В дальнейшем изменить пароль пользователя, можно кликнув либо на его имя, либо на set password.
Создание виртуальной сети
Для создания виртуальной сети пользователю необходимо перейти во вкладку Add network. Из пункта User это можно осуществить через страницу Home — главную страницу Web-GUI, на которой отображён ZeroTier-адрес данного сетевого контроллера и присутствует ссылка на страницу списка сетей, через него созданных.
![](https://habrastorage.org/getpro/habr/post_images/3da/45b/422/3da45b4220689dbb3d8950891d16a39f.png)
На странице Add network пользователь назначает имя вновь создаваемой им сети.
![](https://habrastorage.org/getpro/habr/post_images/fc1/abc/4f0/fc1abc4f0ba6889b338c1d69df3495a2.png)
При применении вводимых данных — Create Network пользователь попадает на страницу со списком сетей, на которой указаны:
Network name — имя сети в виде ссылки, при переходе по которой можно его изменить
Network ID — идентификатор сети
detail — ссылка на страницу с детальными параметрами сети
easy setup — ссылка на страницу для простой настройки
members — ссылка на страницу управления узлами
![](https://habrastorage.org/getpro/habr/post_images/e88/56e/3ce/e8856e3ce4255cf0cb24a6c8c6952c16.png)
Для дальнейшей настройки переходим по ссылке easy setup. На открывшейся странице пользователь задаёт диапазон IPv4 — адресов для создаваемой сети. Сделать это можно автоматически, нажатием кнопки Generate network address или вручную, введя в соответствующее поле сетевую маску сети CIDR.
![](https://habrastorage.org/getpro/habr/post_images/eb2/656/aea/eb2656aeaecf9c8f57771ddd3a594859.gif)
При подтверждении успешного ввода данных необходимо вернуться на страницу со списком сетей с помощью кнопки Back. На этом основную настройку сети можно считать завершённой.
Подключение узлов сети
- Для начала на узел, который пользователь желает подключить к сети, необходимо установить сервис ZeroTier One.
Что такое ZeroTier One?ZeroTier One — работающий на ноутбуках, настольных компьютерах, серверах, виртуальных машинах и контейнерах сервис, который обеспечивает подключения к виртуальной сети через виртуальный сетевой порт, подобно VPN-клиенту.
После установки и запуска службы к виртуальным сетям можно подключиться, используя их 16-значные адреса. Каждая сеть выглядит как виртуальный сетевой порт в системе, который ведет себя так же, как обычный порт Ethernet.
Ссылки на дистрибутивы, а также команды установки можно найти на странице производителя.
Управлять установленным сервисом можно через терминал командной строки (CLI) с правами админа/рута. В Windows/MacOS ещё с помощью графического интерфейса. В Android/iOS только с помощью GUI. - Проверка успешности установки сервиса:
CLI:
zerotier-cli status
Результат:
200 info ebf416fac1 1.4.6 ONLINE
GUI:
Сам факт его работы приложения и наличие в нём строчки с Node ID с адресом узла. - Подключение узла к сети:
CLI:
zerotier-cli join <Network ID>
Результат:
200 join OK
GUI:
Windows: кликом правой кнопкой мыши на иконке ZeroTier One в системном трее и выбора пункта — Join Network.
MacOS: Запустить приложение ZeroTier One в bar menu, если ещё не запущен. Клик на значке ⏁ и выбор Join Network.
Android/iOS: + (изображение плюса) в приложении
В появившемся поле введите указанный в GUI сетевого контроллера Network ID, и жмёте Join / Add Network. - Назначение узлу IP-адреса
Теперь возвращаемся к сетевому контроллеру и на странице со списком сетей перейти по ссылке members. Если на экране вы увидели картинку аналогичной этой — значит ваш сетевой контроллер получил запрос на подтверждение подключения к сети от подключаемого узла.
На этой странице оставляем пока всё как есть и по ссылке IP assignment переходим на страницу назначения узлу IP-адреса:
После назначения адреса, по кнопке Back возвращаемся на страницу списка подключенных узлов и задаём название — Member name и отмечаем чек-бокс для авторизации узла в сети — Authorized. Кстати, этот чек-бокс очень удобная вещь для отключения/подключения от сети узла в дальнейшем.
Сохраняем изменения с помощью кнопки Refresh. - Проверка статуса подключения узла к сети:
Для проверки статуса подключения на самом узле выполняем:
CLI:
zerotier-cli listnetworks
Результат:
200 listnetworks <nwid> <name> <mac> <status> <type> <dev> <ZT assigned ips>
200 listnetworks 2da06088d9f863be My_1st_VLAN be:88:0c:cf:72:a1 OK PRIVATE ethernet_32774 10.10.10.2/24
GUI:
Статус сети должен быть OK
Для подключения остальных узлов повторяем операции 1-5 для каждого из них.
Проверка сетевой связности узлов
Я делаю это с помощью выполнения команды ping <IP-адрес другого узла сети> на подключённом к сети устройства, которым в данный момент управляю.
![](https://habrastorage.org/getpro/habr/post_images/1ca/d10/3f5/1cad103f51b4ad883e2c64746e719226.png)
На скриншоте Web-GUI контроллера можно увидеть три подключенных к сети узла:
- ZTNCUI — 10.10.10.1 — мой сетевой контроллер с GUI — VDS в одном из ДЦ RuVDS. Для обычной работы нет необходимости добавлять его в сеть, но я сделал это, так как хочу закрыть доступ к веб-интерфейсу извне. Об этом чуть позже.
- MyComp — 10.10.10.2 — мой рабочий компьютер — физический ПК
- Backup — 10.10.10.3 — VDS в другом ДЦ.
Поэтому со своего рабочего компьютера я проверяю доступность других узлов командами:
ping 10.10.10.1
Pinging 10.10.10.1 with 32 bytes of data:
Reply from 10.10.10.1: bytes=32 time=14ms TTL=64
Reply from 10.10.10.1: bytes=32 time=4ms TTL=64
Reply from 10.10.10.1: bytes=32 time=7ms TTL=64
Reply from 10.10.10.1: bytes=32 time=2ms TTL=64
Ping statistics for 10.10.10.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 2ms, Maximum = 14ms, Average = 6ms
ping 10.10.10.3
Pinging 10.10.10.3 with 32 bytes of data:
Reply from 10.10.10.3: bytes=32 time=15ms TTL=64
Reply from 10.10.10.3: bytes=32 time=4ms TTL=64
Reply from 10.10.10.3: bytes=32 time=8ms TTL=64
Reply from 10.10.10.3: bytes=32 time=4ms TTL=64
Ping statistics for 10.10.10.3:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 4ms, Maximum = 15ms, Average = 7ms
Пользователь вправе использовать другие инструменты проверки доступности узлов в сети, как встроенные в ОС, так и такие как NMAP, Advanced IP Scanner и т.д.
Прячем доступ к GUI сетевого контроллера извне.
Вообще, уменьшить вероятность несанкционированного доступа к VDS, на котором находится мой сетевой контроллер, я могу средствами файрвола в личном кабинете RuVDS. Эта тема скорее для отдельной статьи. Поэтому, тут я покажу как обеспечить доступ к GUI контроллера только из сети, которую создал в этой статье.
Для этого необходимо подключившись по SSH к VDS на котором находится контроллер, открыть файл конфигурации с помощью команды:
nano /opt/key-networks/ztncui/.env
В открывшемся файле, после строки «HTTPS_PORT=3443», содержащей адрес порта, по которому открывается GUI, нужно добавить дополнительную строку с адресом, по которому GUI будет открываться — в моём случае это HTTPS_HOST=10.10.10.1.
Далее сохраню файл
Сtrl+C
Y
Enter
и выполняю команду:
systemctl restart ztncui
И всё, теперь GUI моего сетевого контроллера доступен только для узлов сети 10.10.10.0/24.
Вместо заключения
На этом первую часть практического руководства по созданию виртуальных сетей на основе ZeroTier хочу закончить. Жду ваших комментариев.
А пока, чтобы скоротать время до момента публикации следующей части, в которой я расскажу, как объединить виртуальную сеть с физической, как организовать «road warrior» режим и кое-что ещё, предлагаю вам попробовать организовать собственную виртуальную сеть с помощью приватного сетевого контроллера с GUI на основе VDS из маркетплейса на сайте RUVDS. Тем более, что для всех новых клиентов действует бесплатный тестовый период — 3 дня!
P.S. Да! Чуть не забыл! Удалить узел из сети можно командой в CLI этого узла.
zerotier-cli leave <Network ID>
200 leave OK
или командой Delete в GUI клиента на узле.
-> Введение. Теоретическая часть. Интеллектуальный Ethernet-коммутатор для планеты Земля
-> Практическое руководство по строительству виртуальных сетей. Часть 1
-> Практическое руководство по строительству виртуальных сетей. Часть 2
![](https://habrastorage.org/files/1ba/550/d25/1ba550d25e8846ce8805de564da6aa63.png)