Comments 48
Спасибо! (Жалко нет кармы проголосовать, но человеческое Спасибо и так вроде ещё ценится :) )
Будут соединяться несколько удалённых серверов и несколько удалённых рабочих машин в одну сеть.
Про n2n можете что-нибудь сказать?
Может быть, кто-то сможет подсказать также волшебное решение (среди вышеперечисленных или другое), которое хорошо работает по каналу с 3-5% packet loss, и быстро пересоединяется в случае дисконнекта одной из нод?
OpenSource. Linux. По идее, должен собираться под другие юниксы, но я сам не пробовал
Очень простой в настройке, сервер-ноды нет, тунеллирует L2 разными способами (raw IP, UDP, TCP, HTTPS-proxy-connect, ICMP, DNS), пробивает NAT.
Хотелось бы иметь что-нибудь вроде hamachi, чтобы оно само конфигурировалось и определяло оптимальный маршрут до конечной ноды.
- FreeLAN — (Open Source, Windows, Linux, Mac OS, C++)
Поддерживает IPv6, авторизация по X.509 сертификатам, пробивает NAT (всё-равно нужна хоть одна нода с внешним IP или проброшенным портом, как и для PeerVPN, GPVE и дальше в моём списке)
HTTPS сайт использует недоверенный сертификат - fastd — (Open Source, Linux, OpenWRT, C++)
Крайне легковесный (100кб), та же история с NAT, интересные Benchmarks
HTTPS сайт использует недоверенный сертификат Cjdns — это зашифрованная IPv6 сеть, в которой используются публичные ключи шифрования для присвоения публичного адреса и распределённой таблицы маршрутизации (DHT). Это позволяет создавать сети с очень простой настройкой, которые будут защищены от потенциальных проблем ныне существующих IPv4 и IPv6 сетей.
Интервью с автором на Хабре
Вот никак не найду подходящий вариант для случая, когда у меня виртуальная машина, которую я мог бы раздать условно кому угодно и при их загрузке они бы просто подключались к моему кластеру по VPN, забирали задачи из очереди и выполняли свою работу. Для этого мне нужно чтобы назначение IP происходило как-то более-менее централизованно или просто гарантированно без коллизий. Или это я себе OpenVPN придумал? :)
А есть что-то ещё кроме офсайта хорошего про эту miredo? А то у меня от их Miredo/Teredo и просмотренных за сегодня всех найденных альтернатив голова кругом.
(Open Source, tested on x86, amd64, ARMv5, ARMv7, MIPS, and PowerPC (continually tested on Linux, FreeBSD, OS X, and Illumos systems))
Вот никак не найду подходящий вариант для случая, когда у меня виртуальная машина, которую я мог бы раздать условно кому угодно и при их загрузке они бы просто подключались к моему кластеру по VPN, забирали задачи из очереди и выполняли свою работу.
На чем в итоге остановились?
Какие ещё появились альтернативы для соединения двух или более узлов через интернет, гд все они спрятаны за NAT и Firewall, без неободимости пробрасывать порт и без наличия внешнего IP?
Я так понимаю пока что остаются только SocialVPN/GroupVPN и Wippien.
На данный момент последний билд находится по ссылке https://gitlab.com/denis4net/toxvpn/builds/1166411/artifacts/file/toxvpn, если мне не доверяете, то можете собрать сами. Makefile
и .gitlab-ci
вам в помощь.
$ wget https://gitlab.com/denis4net/toxvpn/builds/1166411/artifacts/file/toxvpn
Извините, установка доволи не user-friendly, пока нету инсталлера. Все инструкции в make install
:
$ export OUTFILE=toxvpn
$ export PREFIX=/usr
$ install -m 0755 $(OUTFILE) $(PREFIX)/bin/$(OUTFILE)
$ mkdir -p $(PREFIX)/lib/systemd/system/
$ setcap cap_net_admin+ep $(PREFIX)/bin/$(OUTFILE) # позволяет запускать toxvpn без админских прав
$ mkdir -p /var/run/toxvpn # здесь будет хранится IP адресов клиентов (memory mapped file)
Если не хочется разбираться, то:
$ chmod a+x ./toxvpn
$ sudo ./toxvpn -h
usage: ./toxvpn options
-h show help
-s <secret> use passed hex secret
-p <proxy> use socks|http://hostname:port> proxy server
-n <subnetwork/prefix length>
-c <address>:<secret> connect to server using tox address
-f <file> load/save settings from/to file
Запускаете "сервер". На самом деле, это что-то вроде "master-authenticator".
Starting toxvpn 0.0.988608 593a5165de7dbcef9b0d9f7cdecc03b28fecd3b3
Hostname: denis-book
Your address 6WJw9C7rdY5cC3NbEVtWRpr4ZQHHKPAF91Ud17x4hk3vYbuZp6Rc:52CiKXtQ4jJhB2y94q63kfXZwNd1BWmQKKN1m2c2j7W4
Listening on 33445/udp 0/tcp
[25] Added address 10.239.205.236 on "tun0"
[25] created interface "tun0" 10.239.205.236/24
[25] Connecting to "185.25.116.107:33445" DHT node
[25] Connecting to "198.46.138.44:33445" DHT node
[25] connected to DHT via UDP
^T[25] Received Tox friend request from 6B593C02E5C99192 with attached secret "3BBD925FC39BC17D1246A95465C2F7A5ABF6027CB7A7B7C44FA81DE8B2DE602D"
[25] Approved friend 0 with PK 9291C9E5023C596BBD0A2EB10840CBF5FC8A22018D6A69FB93DE73360FB17566
[25] Connected friend 0 via UDP
[25] Received membership response - toxvpn_id: A982A6C5, friendnumber: 0, flags: 1
[25] broadcast new members table. Reason: new member was added
Копируете адрес Your address
= 6WJw9C7rdY5cC3NbEVtWRpr4ZQHHKPAF91Ud17x4hk3vYbuZp6Rc:52CiKXtQ4jJhB2y94q63kfXZwNd1BWmQKKN1m2c2j7W4
И запускаете последующих клиентов
[worker@denis-book out]$ sudo ./toxvpn -c 6WJw9C7rdY5cC3NbEVtWRpr4ZQHHKPAF91Ud17x4hk3vYbuZp6Rc:52CiKXtQ4jJhB2y94q63kfXZwNd1BWmQKKN1m2c2j7W4
Starting toxvpn 0.0.988608 593a5165de7dbcef9b0d9f7cdecc03b28fecd3b3
Hostname: denis-book
Your address NgYTLGXGyihxyUqcRrtvrRvTuqKsQCpHLDZmZbVxtnV1kabPHa4z:52CiKXtQ4jJhB2y94q63kfXZwNd1BWmQKKN1m2c2j7W4
Listening on 33446/udp 0/tcp
[92] Added node 6WJw9C7rdY5cC3NbEVtWRpr4ZQHHKPAF91Ud17x4hk3vYbuZp6Rc
[92] Connecting to "198.98.51.198:443" DHT node
[92] Connecting to "198.98.51.198:443" DHT node
[92] connected to DHT via UDP
[92] Connected friend 0 via UDP
[92] created interface "" 10.239.205.229/24
[92] Received request - toxvpn_id: A982A6C5, friendnumber: 0, flags: 0
[92] Added address 10.239.205.229 on "tun1"
[92] sending a toxvpn invitation response to 0
[0x1f77848] added vpn member 10.239.205.236:0 to table
[0x1f77848] added vpn member 10.239.205.229:-2 to table
[92] broadcast new members table. Reason: new members table was received
Если у вас есть права доступа для записи в /var/run/toxvpn
или запустили от root, то в /var/run/toxvpn
появятся memory mapped file с таблицой ip адресов клиентов:
$ sudo cat /var/run/toxvpn-members.16072
vpn A982A6C5 2
10.239.205.236 25375AEC67FFC7077BD5D4D5295FA72E9B01A349FB0CF7C22DF4302D185EE476 denis-book
10.239.205.229 9291C9E5023C596BBD0A2EB10840CBF5FC8A22018D6A69FB93DE73360FB17566 denis-book
Ну и
$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
...
11: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1300 qdisc pfifo_fast state UNKNOWN group default qlen 500
inet 10.239.205.236/24 scope global tun0
valid_lft forever preferred_lft forever
12: tun1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1300 qdisc pfifo_fast state UNKNOWN group default qlen 500
inet 10.239.205.229/24 scope global tun1
valid_lft forever preferred_lft forever
Маленький ликбез. Адрес узла состоит из двух частей:
- base58 его публичного ключа
- base58 shared secret, который используется всеми узлами.
Буду благодарен за любой фидбэк, pullrequestы и ревью безопасности архитектуры.
Используется libtoxcore:
— DHT (похожа на ту, что используется в Bittorrent протоколе) и их bootstrap узлы.
— Nat traversal.
— Криптография (libsodium).
Для создания tunX тунеля используется `/dev/tun` интерфейс.
Адрес пира назначается таким образом (есть механизм разруливания коллизий):
ip_addr = tox_pub_key | netaddr;
Пиры соединяются p2p, boostrap-node («server») используется только для того, чтобы «новый» клиент мог войти в сеть, получить адреса других узлов и их public keys. Хотя это вероятно не лучшая задумка, это пока PoC.
После установки соединения через tox транспорт, проверяется shared secret, который должен быть одинаков у участников сети. Shared secret можно указать, использую аргумент `-s`, иначе он будет сгенерирован случайным образом (часть в адресе после `:` ).
Если у вас остались вопросы — задавайте!
P.S. Извините, промахнулся.
Список Full-Mesh VPN решений