Обзор ZeroTier One: работа с программно-конфигурируемой сетью и создание VPN
Становится нормой участие разработчиков из разных географических мест в одной команде. Только такой подход требует отдельных решений, например, когда необходимо объединить разрозненные места в единый пул. Это осуществляют при помощи специального сервиса, создающего SDN, Software-Defined Networking (сетевую систему с динамическим наполнением). В этом материале мы рассмотрим решение ZeroTier One.
Система будет воспринимать компьютеры, объединенные в них, так, будто техника размещена рядом в кабинете. Платформа ZeroTier основана на пиринговой технологии, позволяющей при организации защищенных каналов обходиться без центрального сервера и маршрутизатора, данные передаются напрямую с сервера на сервер. Этим взаимодействие кардинально отличается от VPN-технологии.
О том, как использовать ZeroTier и настроить с его помощью VPN, поговорим далее.
Подготовка к настройке
Нам понадобится сервер с предустановленной операционной системой Ubuntu любого свежего релиза. Например, можно арендовать удаленный хост у облачного провайдера Timeweb Cloud. Предварительно на нем создадим аккаунт с привилегиями sudo. Этого будет достаточно, права root не потребуются. Вторым шагом нужно зарегистрировать учетку в ZeroTier One на официальном сайте разработчика – https://my.zerotier.com/. На период изучения достаточно пробной версии.
Также подготовим локальную машину, которая выступит клиентом при организации сети ZeroTier. Чтобы упростить задачу изучения технологии, пусть и на ней будет инсталлирована ОС Ubuntu. В реальной практике можно устанавливать любую операционную систему, указанную на сайте – macOS, Windows, Android, iOS, NAS, FreeBSD. Перед установкой лучше уточнить, какие релизы точно поддерживаются.
Этап 1. Сформируем сегмент сети ZeroTier One
Само решение выступает «центральной точкой». На ней пользователь вносит и удаляет аккаунты, указывает способ переадресации, идентификаторы сети, отправляемые пользователям при их создании. Зайдите в учетку ZeroTier и кликните пункт Networks (наверху экрана). Следом нажмите Create, в результате система выдать наименование созданной сети. Если кликнуть по ней, увидите текущую конфигурацию. На этом шаге желательно сразу зафиксировать Network ID.
Изменить сетевой имя можно слева на экране. Там же доступна запись описания. Корректировки сохраняются автоматически. Мы же продолжим и выберем адресное пространство IPv4, внутри которого будет функционировать VPN в ZeroTier. Это доступно через пункт IPv4 Auto-Assign, который размещен справа. Какие именно IP вы укажете, неважно. Главное – поставить галочку на поле Auto-assign from Range.
Также стоит подтвердить, что параметру Access Control было указано Certificate (Private Network). Настройка необходима, чтобы к нашей сети могли обращаться только «одобренные» рабочие места, а не все, кто узнал идентификатор сети. Перечисленное является фундаментом для создания собственной VPN. Теперь перейдем к настройкам сервера и клиента будущей сети SDN.
Этап 2. Инсталлируем ZeroTier One
Разработчик предлагает скрипт, который поможет установить клиента на сервер и локально. Такой подход избавляет от необходимости сверять релизы в репозитории с официальным сайтом. Скрипт разделен на четыре части:
curl -s 'https://pgp.mit.edu/pks/lookup?op=get&search=0x1657198823E52A61'
– импортируем публичный ключ ZeroTier;gpg –import
– добавляем его в локальный комплект полномочий, только после завершения этой процедуры возможен импорт GPG;if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z"
– происходит отображение этой информации при успешной валидации скрипта;sudo bash; fi
– запускает инсталляцию.
В целом, команда выглядит так:
curl -s 'https://pgp.mit.edu/pks/lookup?op=get&search=0x1657198823E52A61' | gpg --import && if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi
Результат выполнения:
*** Waiting for identity generation...
*** Success! You are ZeroTier address [916af8664d]
Запишите адрес сервера VPN ZeroTier (в квадратных скобках) и сетевое имя. Они нам понадобятся чуть позже. Следом повторите те же действия на локальном рабочем месте.
Этап 3. Подключимся к сервису ZeroTier
Теперь укажем клиентской машине, что необходимо запрашивать доступ через сервис ZeroTier:
sudo zerotier-cli join NetworkID
При работоспособной системе ответ будет таким:
200 join OK
Если система выдает ошибку, проверьте идентификатор. При успешной проверке зайдите в панель ZeroTier и в пункте Members найдите записи, отмеченные как Online (по ранее зафиксированным адресам). В столбце Auth установите галочки, они разрешат коннект с сетью. После этого система начнет выделять IP из указанного диапазона. На формирование пула понадобится некоторое время, после можно внести Short Name и Description каждому участнику.
Этап 4. Проверим подключение
Остается проверить взаимодействие двух компьютеров. Ведь даже положительный ответ от сервера ZeroTier не гарантирует возможность обмена данными между хостами. Выполним команду:
ip addr sh zt0 | grep 'inet'
Ответ будет выглядеть так:
inet 207.1.225.0/24 brd 207.1.225.225 scope global zt0
inet6 fc62:b4a3:3157:6939:9d32::1/40 scope global
inet6 fe80::27e4:4eff:fe35:2518/64 scope link
Теперь проверим коннект командой ping:
ping your_server_ip
Выполним пинг на обоих хостах, чтобы убедиться в их взаимной доступности:
ping your_client_ip
Ответ при успехе обычно выглядит так:
PING 207.1.225.0 (207.1.225.0) 56(84) bytes of data.
64 bytes from 207.1.225.0: icmp_seq=1 ttl=64 time=0.044 ms
64 bytes from 207.1.225.0: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 207.1.225.0: icmp_seq=3 ttl=64 time=0.033 ms
Количество компьютеров, подключаемых в единую конфигурацию, не ограничено. Главное, чтобы они были всегда включены, когда этого требует совместная работа.
Этап 5. Активируем функции VPN
Если желательно скрывать факт коммуникации, понадобится внести некоторые изменения в настройки удаленного хоста и клиента. Нужно активировать функцию NAT на сервере ZeroTier за счет включения функции передачи IP. Выполним команду:
sudo sysctl net.ipv4.ip_forward
Она позволит просмотреть текущую конфигурацию. Вывод будет, например, таким:
net.ipv4.ip_forward = 0
Нам нужно значение 1, поэтому изменим файл /etc/sysctl.conf
:
sudo nano /etc/sysctl.conf
Вставим в него строку:
net.ipv4.ip_forward = 1
Закройте файл с сохранением изменений и активируйте новую конфигурацию ядра:
sudo sysctl –p
Теперь повторим проверку текущих данных:
sudo sysctl net.ipv4.ip_forward
В этом случае вывод будет другим:
net.ipv4.ip_forward = 1
Можно добавлять в брандмауэр правила маршрутизации нового трафика. Сначала выясним, какие имена были присвоены интерфейсу ZeroTier. Обычно их называют zt0
и et0
, но лучше убедиться в этом при помощи команды ip link show
.
ip link show
Имена отразятся рядом с их уникальными номерами:
lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 72:2d:7e:6f:5e:08 brd ff:ff:ff:ff:ff:ff
zt0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2800 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/ether be:82:8f:f3:b4:cd brd ff:ff:ff:ff:ff:ff
В нашем примере стандартные. Если у вас они отличаются, во всех нижеследующих командах надо их заменить на свои. Теперь активируем преобразование сетевых адресов и IP-маскарадинг:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Разрешим перенаправлять трафик и фиксировать активные коннекты:
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
И включим перенаправление трафика с zt0
на eht0
.
sudo iptables -A FORWARD -i zt0 -o eth0 -j ACCEPT
Можно задать и обратное правило, но обычно речь идет о вызове сервера клиентом, а не наоборот. Зато важно учитывать, что IPTables по умолчанию не запоминает правила, и после перезапуска системы придется задавать их заново. Или нужно сохранить их парой команд:
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
Желательно сразу перезапустить сервер, чтобы убедиться в корректности сохранения правил. Это лучше сделать командой:
sudo iptables-save
Ответ, схожий с этим, означает, что процедура проведена корректно:
# Generated by iptables-save v1.8.8 on Tue May 27 11:33:03 2022
. . .
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
. . .
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i zt0 -o eth0 -j ACCEPT
COMMIT
. . .
Создание VPN с помощью ZeroTier завершено, и можно свободно обмениваться трафиком с узлами в интернете, не включенными во внутреннюю сеть. Но для этого еще нужно включить возможность управления маршрутом глобального типа. Наверху страницы платформы добавьте собственный маршрут. В меню Advanced (Managed Routes) нажмите +Add Routes и вставьте значение 0.0.0.0/0
.
После сохранения изменений кликните на «+», и вы увидите только что созданное правило, под старыми, в том числе имеющимися с момента инсталляции. Его легко отличить благодаря иконке оранжевого глобуса, по которому и отделяют глобальные маршруты от остальных. Сеть готова к эксплуатации, можно переходить к изучению возможностей VPN ZeroTier. Осталось лишь конфигурировать рабочие места клиентов и запустить любой рабочий проект.
Этап 6. Перенастроим клиента Linux
Сразу напомним, что применять в составе сети можно компьютеры с разными операционными системами. Мы же здесь приводим примеры только на Linux Ubuntu. Поэтому перейдем к практике и скорректируем файл /etc/sysctl.conf
. Это необходимо для изменения представления ядра о пути, через который предстоит вернуть трафик по запросу клиента. Иначе операционка отклонит его, т.к. примет за ошибочный.
Откройте файл на редактирование:
sudo nano /etc/sysctl.conf
Внесите в него строчку:
net.ipv4.conf.all.rp_filter=2
Закройте файл с сохранением изменений и введите команду:
sudo sysctl –p
Очередным шагом вручную измените стандартный маршрут.
sudo zerotier-cli set NetworkID allowDefault=1
Если понадобилось отключить функцию VPN, достаточно внести прежнее значение:
sudo zerotier-cli set NetworkID allowDefault=0
Учитывайте, что при каждом новом старте службы ZeroTier на локальном рабочем месте значение этого параметра всегда равно 0. Поэтому необходимо вручную повторно активировать систему, чтобы продолжать ее использование в качестве VPN-канала. Сама служба автоматически запускается как на удаленном хосте, так и на локальном рабочем месте. По желанию можно отключить ее:
sudo systemctl disable zerotier-one
Выводы
Вот мы и рассмотрели, как совершить первые действия в настройке программно-конфигурируемых сетей с помощью ZeroTier One. Приведенный в качестве образца инструмент позволяет работать как в автономной сетевой конфигурации, так и с внешними службами по защищенному каналу VPN. Его настройка может отличаться от других привычных приложений, но все равно не составляет никакого труда.
По приведенной в статье схеме можно создавать любое количество узлов SDN. Например, отдельно для разработчиков, тестировщиков, других отделов. Если есть желание протестировать систему в разных конфигурациях, к вашим услугам облачные серверы Timeweb Cloud. Например, часто сеть из 2-х точек объединяют с диском, созданным для совместного доступа к файлам. Или подключают ее к действующему NAS-серверу.
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.