WireGuard VPN
В связи с прошедшими событиями - блокировка Телеграм и за компанию кучу сайтов и хостингов, я не смог попасть к своим очень важным сервисам, развернутым в гуглооблаке. Пользуюсь OpenVPN уже давно, использую и для связки офисов, и секретного интернета, и обхода блокировок. Захотелось приключений и чего то нового. Начал мониторить, искать альтернативы. Нашел в аналитике WireGuard - оказывается в четыре раза производительней и в два раза проще в настройке. Ну тут конечно я поспешил с выводами - очень мало толковых мануалов на русском языке, а с буржуйским дружу плохо, но все же победил настройку этого ВПН, чем и хочу поделиться.
Рекомендую арендовать виртуальную машину, VPS, дедик с белым IP адресом (я пользуюсь - EuroHoster, можно оплачивать криптой и хороший пинг до РФ). Далее все настройки и операции будут приведены для операционной системы Ubuntu server 16.04, но они подходят для всех дебиан дистрибутивов.
После развертывания ОС на сервере, начинаем установку ВПН
Добавляем репозиторий с программой и установим ее
$ sudo add-apt-repository ppa:wireguard/wireguard
$ sudo apt-get update
$ sudo apt-get install wireguard
Далее сгенерируем публичный и приватный ключи
$ wg genkey | tee privatekey | wg pubkey > publickey
Включаем IP форвардинг, и запускаем интерфейс ВПН. Wireguard создает сетевой интерфейс, который поддается любой маршрутизации средствами ОС
$ sudo nano /etc/sysctl
ищем строку “net.ipv4.ip_forward = 0” и заменяем 0 на 1применяем настройки
$ sudo sysctl -p
инициализируем интерфейс ВПН (имя по умолчанию у него wg0)
$ sudo ip link add dev wg0 type wireguard
создаем конфиг серверной части WireGuard
$ sudo nano /etc/wireguard/wg0.conf
# Здесь идет описание самого интерфейса
[Interface]
# выбираем адрес и подсеть будущих подключений,
#первый адрес естественно серверу
Address = 10.10.10.1/24
# маршрутизация, для того, чтоб интернет трафик шел через наш интерфейс
# где eth0 интерфейс куда приходит интернет на сервере
# (может называться по разному)
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j
# порт UDP на котором будет работать ВПН
ListenPort = 51820
# приватный ключ, который мы сгенерировали ранее в файлик privatkey
PrivateKey = [SERVER PRIVATE KEY]
# далее идут описания клиентов.
[Peer]
# берем публичный ключ от клиента и присваиваем ему IP адрес
PublicKey = [CLIENT PUBLIC KEY]
AllowedIPs = 10.10.10.2/32
[Peer]
PublicKey = [CLIENT PUBLIC KEY]
AllowedIPs = 10.10.10.3/32
...
Далее можно запустить сервер и добавить его в автозапуск
$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
После каждого добавления новых клиентов, рекомендуется перегрузить сервис wireguard
$ sudo systemctl restart wg-quick@wg0
На каждом клиентском компьютере нужно установить Wireguard и сгенерировать пару ключей
Ubuntu
Установка аналогично серверной части
$ wg genkey | tee privatekey | wg pubkey > publickey
инициализируем интерфейс ВПН (имя по умолчанию у него wg0)
$ sudo ip link add dev wg0 type wireguard
создаем конфиг клиентской части WireGuard
$ sudo nano /etc/wireguard/wg0.conf
[Interface]
# IP адрес клиента, можно следующий по порядку
Address = 10.10.10.2/32
# приватный ключ из файла privatkey
PrivateKey = [CLIENT PRIVATE KEY]
# свой любимый DNS сервер
DNS = 1.1.1.1
# описание подключения к серверу
[Peer]
# публичный ключ сервера - файлик publickey на сервере
PublicKey = [SERVER PUBLICKEY]
#разрешеные адреса - нам нужны все, чтобы не иметь ограничений в интернете
AllowedIPs = 0.0.0.0/0
# IP адрес сервера или домена и порт подключения
Endpoint = [SERVER ENDPOINT]:51820
# параметр нужен для пользования ВПН за NAT
PersistentKeepalive = 25
стартуем
$ sudo systemctl enable wg-quick@wg0
проверим наш IP
$ curl zx2c4.com/ip
Windows
Здесь мне писать немного сложнее, потому что этой операционной системой я не пользуюсь, но вроде не должно возникнуть проблем.Скачиваем клиент под виндовс tunsafe. Достаточно несложный интерфейс - жмем Options => Generate Key Pair => Randomize. В появившемся окне копируем два ключа, один, Private key, пойдет в конфиг (по структуре он точно такой же как и выше для Ubuntu), а второй нужно будет прописать в разделе [Peer] на нашем сервере.
Итак жмем - Edit Config и редактируем в соответствии с нашими настройками:
[Interface]
# копируем из окошка с одноименным названием
PrivateKey = [CLIENT PRIVATE KEY]
# любимый ДНС сервер
DNS = 1.1.1.1
# The addresses to bind to. Either IPv4 or IPv6.
# /31 and /32 are not supported.
# в виндовсе возникнет некоторый нюанс - драйвер не поддерживает
# подсети /31, /32 # смело пилим /24 и все заработает
Address = 10.10.10.2/24
# описание подключения к серверу
[Peer]
# публичный ключ сервера - файлик publickey на сервере
PublicKey = [SERVER PUBLICKEY]
# разрешенные адреса - нам нужны все, чтобы не иметь ограничений в интернете
AllowedIPs = 0.0.0.0/0
# IP адрес сервера или домена и порт подключения
Endpoint = [SERVER ENDPOINT]:51820
# параметр нужен для пользования ВПН за NAT
PersistentKeepalive = 25
Проверить в Windows можно зайдя на сайт например - 2ip.ru, где и будет виден новый IP адрес.
Android
Совсем недавно был выпущен полноценный клиент, и не надо мучатся с прошивками и прочими сложными штуками Wireguard Google Play.
Прочитав предыдущие абзацы, в приложении на андроид, все покажется уже знакомым. Те же секции конфига Interface, Peer.
Ну по пунктам:
Жмем кнопку “+” и выпадающем меню “Create from scratch”
В секции Interface жмем Generate и получаем нашу пару ключей.
Name - любое имя название подключения
Privat key - свежесгенерированный приватный ключ
Public key - копируем и используем в секции Peer на сервере.
Adddresses - 10.10.10.3/32 такое же значение укажите в конфиге сервера
DNS servers - 1.1.1.1 традиционно
Далее кнопка ADD PEERВ этой секции тоже все просто
Public key - публичный ключ сервера
Allowed IPs - 0.0.0.0/0
Endpoint - адрес или домен сервера с портом (xx.xx.xx.xx:xx)
Persistent keepalive - 25
Жмем “сохранить” вверху интерфейса и тестируем подключение.
Рекомендую всем, действительно быстрый ВПН не нагружающий железки, особенно подходит для телефона.
Прошу не пинать за отсутствие графики и картинок, мне кажется полезность информации важнее красоты поста.