Изоляция от внешнего мира продолжается. Состоялся релиз pnet!
Так уж вышло, что в наше неспокойное время лучше иметь под боком всякие запасные варианты… О них мы сегодня и поговорим.
— Жизненная ситуация - просыпаешься утром, открываешь окно и прыгаешь с 6-го этажа….
— Ну нет же! Это другой сценарий в твоей 1931 жизни! А сейчас у нас 85109! Хватит ностольгиировать о неслучившемся!
— Лааадно… Значит так… Жизненная ситуация, просыпаешься в обед, открываешь холодильник, а у тебя WI-FI сломался!
— Тааак.. Продолжай…
— Ну и короче… Открываешь ты холодильник, а там ICE ёбет TURN, а он так: stun~ stun~ stun~
Так начинается типичный разговор между bork и sch…
Как все начиналось
В начале апреля этого года мы задумались о создании своей децентрализованной виртуальной сети, которая бы объединила всю инфраструктуру POTATOM’а. Использовать обычный WireGuard было не совсем круто - один центральный сервер отваливается и вся инфраструктура падает, к тому же, блокировки РКН в сторону VPN протоколов нас настораживали. Разумеется, можно использовать AmneziaWG, но с ним проблема централизации остается актуальной, что нас не устраивало.
Мы начали искать готовые решения, которые могли бы нам помочь в этом… Найти их не так уж сложно, есть всякие TailScale, ZeroTier, NetBird и прочие. Но в них по прежнему используется система единого централизованного узла, через который происходит подключение ко всей сети. Опять же, в случае блокировки IP этого узла вся сеть становится недоступна. Продолжив поиски, мы нашли ультимативное решение - EasyTier. Это инструмент с открытым исходным кодом для создания децентрализованных виртуальных Mesh сетей и проброса портов.
Как работает EasyTier
В отличие от классических VPN, где весь трафик идет через один главный сервер, EasyTier работает по принципу P2P (Peer-to-Peer). При запуске узлы сети обращаются к публичным серверам сообщества или к собственному серверу только для того, чтобы узнать о существовании друг друга. Устройства пытаются установить прямое зашифрованное соединение друг с другом, пробивая брандмауэры и NAT провайдеров. Если пробитие удалось (есть пробитие), трафик идет напрямую от компьютера к компьютеру с минимальной задержкой. Если же прямая связь невозможна, трафик пойдет в обход через один из доступных публичных узлов сети в зашифрованном виде.
В сети EasyTier нет жесткого разделения на сервер и клиент - любой узел может выступать в роли ретранслятора, то есть ретранслировать трафик для других участников сети. Весь сетевой трафик защищен сквозным шифрованием (E2EE) на базе протоколов WireGuard или с использованием шифрования AES-GCM. Даже если данные идут через чужой узел, перехватить или расшифровать их невозможно.
По своей логике EasyTier похож на Tailscale или ZeroTier, но имеет важное преимущество - он полностью независим, написан на языке Rust и не требует обязательной привязки к коммерческому облаку или центральной панели управления.
Но в чем подвох?
Да собственно ни в чем, за исключением того, что это не анонимная сеть, но в нашем случае это и не надо. Проблемы EasyTier начинаются, когда хочется перестать жмакать тупые команды в терминале и перейти на красивый GUI. Поскольку Изька разработана китайцами, для нашего русского человека их понятия не по понятию. Веб-морда и приложение на китайском или ломаном английском, из-за чего простому обывателю пользоваться им практически невозможно. Не думаю, что каждый человек захотевший поиграть в Minecraft по сети знает китайский и сетевые технологии.
Собственно, это и послужило началу разработки pnet!
Pnet - p2p Network Manager
pnet - это обёртка над EasyTier на Go с веб-интерфейсом. Полностью портативная: все файлы лежат рядом с исполняемым файлом, при первом запуске EasyTier скачивается автоматически.
Сейчас я вкратце опишу возможности и конфигурацию:
Возможности
- Серверы (bootstrap) — список bootstrap-пиров для подключения к mesh-сети
- Порт bootstrap-пира — локальный listener-порт (по умолчанию
11010); полезно, если pnet сам выступает bootstrap-пиром - Сети — настройка VPN-сетей (имя, пароль, IP; пустой IP = DHCP)
- Имя узла (hostname) — отображаемое имя узла внутри сети; пусто = системный hostname
- Запуск / Остановить — управление EasyTier-процессами
- Пиры — просмотр подключенных пиров
- Автозапуск вкл / выкл — автозапуск сетей (systemd / планировщик Windows)
- Сохранить — сохранение конфига в
config.yml
Конфиг (config.yml)
Создаётся автоматически при первом запуске, если его нет:
# пример конфига
# listen_port — порт bootstrap-пира (по умолчанию 11010)
listen_port: 11010
bootstrap:
- udp://45.112.194.131:11010
- udp://92.63.103.86:11010
- udp://104.239.87.24:11010
networks:
- name: party
secret: ''
ip: null
Параметры:
| Поле | Назначение |
|---|---|
listen_port |
Локальный listener-порт EasyTier (по умолчанию 11010; для каждой следующей сети +1) |
bootstrap |
Список bootstrap-пиров вида udp://IP:PORT |
networks[].name |
Имя сети |
networks[].secret |
Пароль сети |
networks[].ip |
IP внутри сети; пусто/null — DHCP |
networks[].hostname |
Имя узла в сети; пусто — системный hostname |
CLI
pnet # веб-интерфейс (по умолчанию)
pnet run # запустить все сети (скачивает EasyTier при первом запуске)
pnet stop # остановить все сети
pnet peers # показать подключенных пиров
pnet autostart # включить автозапуск
pnet no-autostart # выключить автозапуск
Как это использовать?
Для запуска и работы с pnet вам потребуется читать инструкцию и смотреть глазами в монитор.
Быстрый старт
- Скачать архив с исполняемыми файлами из официального GitHub репозитория
- Распаковать архив в отдельную папку и запустить
pnet(илиpnet.exeна Windows). - Откроется браузер с веб-интерфейсом (
127.0.0.1:<случайный порт>). - Проверить сервера (bootstrap) и сети, при необходимости отредактировать.
- Чтобы добавить сеть, нужно указать ее имя и пароль и нажать кнопку “Добавить”. При желании можно указать конкретный IP-адрес из диапазона локальных IP-адресов и имя хоста (hostname).
- Нажать Запуск — EasyTier скачается при первом запуске, сеть поднимется.
Чтобы оказаться в одной сети с двух устройств, нужно, чтобы на обоих устройствах была добавлена одна и та же сеть: имя и пароль сети должны совпадать!
По умолчанию в pnet уже добавлена общедоступная сеть party. Она без пароля, а значит использовать ее может каждый, но для своих локальных шалостей рекомендую все же создавать свои собственные сети. НО! Если так хотите, можете размещать в сети party свои сайты и прочие сетевые ресурсы.
Дополнительный функционал pnet
В pnet вы можете настроить автозапуск сетей при включении компьютера. Также есть возможность использовать pnet из терминала - CLI команды были описаны выше (pnet help)!
Вопрос этот должен быть разрешен во что бы то ни стало. А зимой мне, кстати, делать будет нечего. - Марк Твен.