Список Full-Mesh VPN решений

    Введение


    Многие интересуются Full-Mesh (или P2P) VPN, хотят использовать их для игр с друзьями, для связи удаленных офисов, серверов, да для чего угодно. Обычные VPN, вроде OpenVPN или PPTP, пропускают весь трафик через центральный сервер, а Full-Mesh соединяются непосредственно с нодами, зачастую пробивая NAT.

    Со своими серверами (преимущественно для игр):

    Tunngle
    Basic и Premium. Только Windows.

    VPN для игр, аналог Hamachi. Zero-config через сервер программы. Чат с возможностью передачи файлов, голосовой чат на основе Ventrillo и Mumble. Имеется мини-файрволл.
    В бесплатной версии можно создавать комнату до 32 человек, которая удаляется
    после 3 дней неактивности. Нельзя настравать мини-файрволл, он блокирует порты
    1-1024 и все протоколы, кроме tcp, udp и icmp. Пробивает NAT.
    Premium дает возможность создавать комнаты до 255 человек, скрывать комнаты из
    каталога, изменять ник, использовать QoS, настраивать мини-файрволл,
    использовать ник вместо ip (dns).

    Social VPN
    Open Source. Windows и Linux. C#.

    Zero-config с XMPP в качестве бекенда, интеграция с Gtalk. Пробивает NAT, соединяется напрямую, или использует свои сервера, если это невозможно. Есть DNS.

    Remobo
    Free. Windows, Linux и MacOS.

    Аналог Hamachi, zero-config через сервер программы. Имеется встроенный чат. Возможно использовать другие компьютеры в качестве прокси. Пробивает NAT.
    Есть PRO-версия, которая отличается наличием демона с CLI.

    Без своих серверов:

    NeoRouter
    Free. Windows, Linux, MacOS, FreeBSD, Android.

    Есть portable-версия и веб-клиент. Поддержка IPv6, пробивает NAT.

    GBridge
    Бесплатно. Только Windows.

    Zero-config через Gtalk и Gmail. VPN, VNC, Шаринг, синхронизация и бекап файлов.
    Генерация превью к картинкам, создание каталогов, стриминг аудио и видео (используется web-интерфейс).
    Пробивает NAT, сервер-нода отсутствует.

    P2PVPN
    Open Source. Windows и Linux. Java.

    VPN и чат между пирами. Используется BitTorrent (а конкретно трекер OpenBitTorrent) для поиска пиров вашей сети. NAT не пробивает, требует открытого порта хотя бы у одного участника сети, сервер-нода отсутствует.
    Проект немного заглох, последяя версия вышла в 2010.

    Wippien
    Open Source. Windows и Linux.

    Использует XMPP в качестве бекенда, интеграция с Gtalk. Пробивает NAT.

    Для серверного использования:

    tinc
    Open Source. Windows, Linux, *BSD, MacOS, Solaris, iPhone.

    Старый проект, легкое конфигурирование, сервер-ноды нет. Поддержка IPv6, пробивает NAT.

    PeerVPN
    Open Source, Linux и FreeBSD. Неофициальные порты для MacOS и Windows.

    Поддержка IPv6, пробивает NAT.
    Поделиться публикацией
    Комментарии 46
      0
      Спасибо! Раньше использовали Hamachi для игры в Age of Wonders 2, но что-то потом он стал сильно тормозить и ограничивать число людей в созданной сети.
        +1
        Висит уже месяц проблемка соединить несколько удалённых машин за своими NAT и тут вы со своим обзором. Как раз вовремя.

        Спасибо! (Жалко нет кармы проголосовать, но человеческое Спасибо и так вроде ещё ценится :) )
          +1
          Если для серверов, то выбирайте tinc.
            0
            Почему именно его? Чем хорош?
            Будут соединяться несколько удалённых серверов и несколько удалённых рабочих машин в одну сеть.
              0
              Активно развивается, стабильный, проверенный, open source, на сях.
                0
                Спасибо.
              0
              Посмотрел в дистрибутиве. нашел только tinc и n2n.
              Про n2n можете что-нибудь сказать?
                0
                Бета, есть известные ошибки в безопасности, не рекомендуется для использования.
                0
                оно продолжит работать если сервер упадет?
                  0
                  Сервера нет. Все ноды — клиенты. Одна выпала — ну и что, все остальные работают.
                    0
                    Да, уже понял как оно работает. А есть реальные use-cases и отзывы, как оно по стабильности и latency?
                      0
                      Отзывов не видел. Попробуйте сами.
              0
              Спасибо! Тоже очень нужно.

              Может быть, кто-то сможет подсказать также волшебное решение (среди вышеперечисленных или другое), которое хорошо работает по каналу с 3-5% packet loss, и быстро пересоединяется в случае дисконнекта одной из нод?
                0
                Если для сервера, то tinc. Ему пофигу дисконнекты, если использовать udp. Ну и от одной упавшей ноды ничего не поменяется.
                  0
                  Попробую, спасибо. У меня задача — репликация относительно быстро меняющейся базы по ужасному каналу, который даже до мегабита не дотягивает, между несколькими машинами с динамическими IP, в общем, судя по всему, как раз для tinc. :)
                    0
                    Это наверно habrahabr.ru/post/147747/ надо почитать — ставятся два устройства (или две виртуалки) и добавляют избыточность в трафик, чтобы компенсировать потери и всякие беды с пакетами.
                      0
                      Спасибо, у меня вторая сторона не мне принадлежит (Хецнер).
                0
                Есть еще Garena, аналог Tunngle, вроде гарена даже раньше появилась.
                  0
                  Мне интересно, есть ли что-нибудь такое, вроде teamviewer или mikogo, но не для удаленного рабочего стола, а для консоли. Чтобы я мог, например, подключиться с телефона или другого компьютера к моему компьютеру под linux, независимо от NAT.
                    0
                    Если я правильно понял вашу задачу, то вам подойдет любое из перечисленных решений + SSH (подключиться к консоли) + byobu (там может в одной консоли одновременно работать любое количество пользователей, кроме того, можно создавать неограниченное количество новых консолей).
                      0
                      vpn+ssh?
                        0
                        Без VPN. Нашел, кстати, pagekite.net/ — крайне интересная штука. А так, уже решил проблему, подняв miredo.
                      +2
                      Еще есть Campagnol — P2P VPN с использованием UDP Hole Punching и поддержкой шифрования. Linux, *BSD, Windows (Cygwin). GPLv3.
                        0
                        К сожалению, похоже, что он уже заброшен с 2013-10-12.
                          0
                          Да, возможно, много времени уже с тех пор прошло :)
                        0
                        А почему Hamachi нет в списке? Есть бесплатная версия. У меня кучка серверов на Linux, виндовые десктопы. Пару долларов в год можно потратить. Зато удобно и просто.
                          +5
                          GNU Virtual Private Ethernet
                          OpenSource. Linux. По идее, должен собираться под другие юниксы, но я сам не пробовал

                          Очень простой в настройке, сервер-ноды нет, тунеллирует L2 разными способами (raw IP, UDP, TCP, HTTPS-proxy-connect, ICMP, DNS), пробивает NAT.
                            +2
                            Вашу маму! Вот это да! Спасибо большое!
                              0
                              Я правильно понял, что он не является пиринговым в полной мере? Исходя из их описания, каждую ноду надо конфигурировать вручную и указывать ее реальный ip.

                              Хотелось бы иметь что-нибудь вроде hamachi, чтобы оно само конфигурировалось и определяло оптимальный маршрут до конечной ноды.
                                0
                                Нет, нода может и без реального ипшника быть доступна (требуется лишь чтобы часть нод имели «белый» IP адрес). Для этого он может роутить пакеты транзитом через узлы (src ip и dst ip в пакетах специально идут нешифрованные) и пробивать NAT.

                                Конфигурируется всё вручную.
                              0
                              А через прокси кто-нибудь из них может работать?
                              +1
                              Вот ещё нашёл:
                              • 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 придумал? :)
                                +1
                                А зачем вам вообще VPN для такого случая? Или кластер тоже за NAT? Может, miredo подойдет?
                                  0
                                  Да, кластер тоже за NAT.

                                  А есть что-то ещё кроме офсайта хорошего про эту miredo? А то у меня от их Miredo/Teredo и просмотренных за сегодня всех найденных альтернатив голова кругом.
                                    0
                                    Miredo — реализация протокола Teredo для туннелирования IPv6. По сути, это не VPN, это просто даст вам белый IPv6-адрес и доступ в IPv6-сеть через какой-то туннелирующий сервер (renlab, microsoft или какой-то другой).
                                  0
                                  К Cjdns:

                                  (Open Source, tested on x86, amd64, ARMv5, ARMv7, MIPS, and PowerPC (continually tested on Linux, FreeBSD, OS X, and Illumos systems))
                                    0
                                    Вот никак не найду подходящий вариант для случая, когда у меня виртуальная машина, которую я мог бы раздать условно кому угодно и при их загрузке они бы просто подключались к моему кластеру по VPN, забирали задачи из очереди и выполняли свою работу.

                                    На чем в итоге остановились?
                                      0

                                      Ничего 100% подходящего не нашлось, так что взял просто самое стабильное решение с пробрасыванием порта — OpenVPN.

                                    0
                                    Здравствуйте.
                                    Какие ещё появились альтернативы для соединения двух или более узлов через интернет, гд все они спрятаны за NAT и Firewall, без неободимости пробрасывать порт и без наличия внешнего IP?
                                    Я так понимаю пока что остаются только SocialVPN/GroupVPN и Wippien.
                                      +1
                                      Минутка рекламы :). Год назад в рамках димломного проекта разработал подобное решение на основе libtoxcore. Решение изначально разрабатывалось полностью на C, но потом начал переводить на C++. Поэтому не серчайте касательно качества кода. Билды забрать можно здесь. Был бы благодарен, если бы кто-то помог портировать на Windows. Я видел, что есть devtun driver для windows, который по теории должен помочь в этом.
                                        +1
                                        О, круто. Напишите подробно, как это работает.
                                          +1

                                          На данный момент последний билд находится по ссылке 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ы и ревью безопасности архитектуры.

                                            0
                                            Вопрос был о том, как оно устроено, а не так, как его собрать и использовать. Tox используется только для поиска пиров, пробива NAT и согласования ключей?
                                    +1
                                    Да, вы правы.
                                    Используется 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. Извините, промахнулся.

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое