Пользователь
46,8
рейтинг
24 августа 2012 в 11:06

Администрирование → Список 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.
@ValdikSS
карма
631,0
рейтинг 46,8
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (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. Извините, промахнулся.

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