Список 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
            Посмотрел в дистрибутиве. нашел только 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. Извините, промахнулся.

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