Децентрализованная/P2P виртуальная частная сеть (VPN)

Я использую OpenVPN для управления сетью между несколькими компьютерами, но для этого нужен центральный сервер, и все данные должны проходить через него. Кроме того, изменение центрального сервера потенциально означает обновление всей сети.

Я ищу децентрализованную (P2P) VPN-сеть с открытым исходным кодом, для которой не требуется центральный сервер. Требования:

  • Нет центрального сервера (все пиры равны).
  • Безопасность - все данные должны быть зашифрованы. Одноранговые узлы, которым разрешено подключение, должны управляться путем предоставления им подписанного сертификата, который могут проверить другие.
  • У некоторых одноранговых узлов нет общедоступного IP-адреса (и это может динамически меняться, поскольку некоторые из них могут быть мобильными); программное обеспечение должно иметь возможность определять это и позволять одноранговым узлам пересылать трафик по мере необходимости.
  • Должна быть предусмотрена возможность предоставления одноранговым узлам фиксированных IP-адресов во внутренней сети.
  • Программное обеспечение необходимо активно поддерживать (для устранения проблем безопасности).
  • Низкое влияние памяти и ЦП, если это возможно.
  • Я не ищу Social VPN , в частности, я не хочу, чтобы система зависела от какой-либо социальной сети.
  • Поддержка Linux и Windows.
  • Система должна работать как системная служба, не требуя графического интерфейса для администрирования.
  • Необязательная поддержка IPv6 была бы полезной (некоторые одноранговые узлы могут иметь общедоступный адрес IPv6, но не адрес IPv4).
  • Опционально также внутренний DNS, чтобы ко всем компьютерам можно было обращаться по локальным именам.

Ответы (1)

Тор

Сначала я думал, что решение для вас — Tor , но это открытая сеть: любой может присоединиться, поэтому ваше требование «безопасности» не работает.

Тинк

Поэтому я бы посоветовал взглянуть на tinc . Это p2p VPN, в которой одноранговые узлы аутентифицируются с помощью открытых ключей и поддерживают некоторую трансверсальность NAT, хотя это может не так хорошо справляться с хостами, меняющими адреса, потому что они жестко запрограммированы в конфигурации. Он также имеет полную поддержку IPv6. Краткий праймер:

apt-get install tinc
mkdir -p /etc/tinc/net0/hosts
cat >> /etc/tinc/net0/tinc.conf <<EOF
Name = host
Mode = switch
Address = host.example.com
EOF
tinc -n net0 generate-keys
cat >> /etc/tinc/net0/tinc-up <<EOF
ifconfig $INTERFACE 172.16.242.43 netmask 255.255.255.255 up
EOF
chmod +x /etc/tinc/net0/tinc-up
tincd -d4 -D -n net0

Сделайте это на каждом хосте, изменяя tinc.confи tinc-upпри необходимости. Каталог hostsсодержит копии каждого хоста tinc.conf, и совместное использование этой конфигурации выходит за рамки допустимого (например, я использовал git).

Также обратите внимание, что у Tinc были серьезные проблемы с безопасностью, и мне не ясно, надежна ли система безопасности.

Wireguard

Если бы я начал с нуля сейчас, я бы посмотрел на Wireguard , который имеет лучшую поддержку роуминга и надежную криптографию. Их быстрый старт превосходен и в основном сводится к:

apt install wireguard-dkms wireguard-tools
ip link add dev wg0 type wireguard
ip address add dev wg0 10.0.0.1/8
umask 077
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
wg set wg0 listen-port 51820 private-key /etc/wireguard/private.key peer $(cat /etc/wireguard/peers/peer0.pub) allowed-ips 10.0.0.2/32 endpoint 192.0.2.1:51820
ip link set up dev wg0

Это предполагает, что у другого уже есть открытый ключ, сгенерированный и сохраненный в /etc/wireguard/peers/peer0.pub. Этот одноранговый узел должен быть доступен 192.0.2.1и иметь конфигурацию, аналогичную 10.0.0.2назначенной на wg0интерфейсе.

Веселиться!