WireGuard
Обновлено 31 января 2020
WireGuard - это чрезвычайно простой, но быстрый VPN, в котором используются самые современные алгоритмы шифрования. Он нацелен на то, чтобы быть быстрее, проще, функциональней и производительней, чем IPsec и OpenVPN. WireGuard спроектирован как универсальный VPN для работы как на встроенных интерфейсах, так и на суперкомпьютерах, подходящих для множества различных задач. Первоначально выпущенный для ядра Linux, теперь WireGuard кроссплатформенный и поддерживаеться на следующих устройствах: Windows, macOS, BSD, iOS, Android.
WireGuard разрабатывался с учётом того, что его будет просто установить и настроить. Его можно легко реализовать в несколько строк кода и легко проверять на наличие уязвимостей в безопасности. По сравнению с такими гигантами, как Swan/IPsec и OpenVPN/OpenSSL, в которых анализ кода является непосильной задачей даже для больших групп экспертов по безопасности, WireGuard возможно разобрать самостоятельно. WireGuard использует самые прогрессивные протоколы шифрования, такие как Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF. Сочетание чрезвычайно высокоскоростных алгоритмов шифрования и того факта, что WireGuard являеться частью ядра Linux, означает, что безопасная сеть может быть очень производительной. С подробной информацией о работе протокола можно ознакомиться в документации PDF.
Настройка сервера
Установка
Для установки модулей и утилит WireGuard выполните:
emerge -a net-vpn/wireguard-tools net-vpn/wireguard-modules
Генерация ключей сервера
Перейдите в директорию настроек WireGuard:
cd /etc/wireguard
Выполните генерацию закрытого и открытого ключей:
wg genkey | tee privkey | wg pubkey > publickey
Выведите публичный и приватный ключи:
==> publickey <== ACMHojZjwV616cIsToFrQowXMJRxwEThFoEsvJnL/QM= ==> privkey <== UBrksRvBtaRz0X33E7fvNd43eXC/SpwNsA8wKATVA3w=
Конфигурация туннеля
Отредактируйте конфигурационный файл на сервере, указав в нём:
- IP адрес сетевого интерфейса сервера;
- порт, по которому будет происходить подключение;
- приватный ключ, сгенерированный на стороне сервера (его содержимое).
Например, у сервера IP адрес 192.168.50.1, порт подключения 51820. Тогда конфиг будет выглядеть следующим образом:
/etc/wireguard/wg0.conf
[Interface] # Адрес сетевого интерфейса WireGuard Address = 192.168.50.1/24 # Порт по которому сервер ожидает подключение ListenPort = 51820 # Приватный ключ сервера PrivateKey = UBrksRvBtaRz0X33E7fvNd43eXC/SpwNsA8wKATVA3w=
Важно
Если на сервере установлен файервол, настройте разрешения для подключений по указанному порту.
Настройте права доступа к конфигурационному файлу и ключам:
chmod 600 wg0.conf privkey publickey
Настройка маршрутизации
Настройте пересылку трафика между интерфейсами сервера добавив следующие строки:
/etc/sysctl.conf
net.ipv4.ip_forward=1 net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1
Для принятия изменений выполните:
sysctl -p /etc/sysctl.conf
Настройка маршрутизации при помощи Iptables
Сервер должен быть настроен на обработку этого трафика - например, путем отправки в Интернет через NAT. Чтобы направить трафик клиента в Интернет через NAT, выполните:
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o eth0 -j MASQUERADE
Вместо eth0 укажите локальный сетевой интерфейс сервера.
Сохраните правила маршрутизации и добавьте их в автозапуск:
/etc/init.d/iptables save
rc-update add iptables
Настройка маршрутизации при помощи Shorewall
При использовании Shorewall выполните настройку согласно руководству.
Запуск сервера
Добавьте службу WireGuard в автозагрузку:
rc-update add wireguard
Запустите серевер WireGuard:
/etc/init.d/wireguard start
Добавление клиента в настройки сервера
Добавьте в настройки WireGuard информацию о клиенте, указав его IP WireGuard-интерфейса и публичный ключ клиента:
/etc/wireguard/wg0.conf
[Peer] # Публичный ключ клиента PublicKey = rT9yZRcg2pscyGkder/xTGds5/sy+mX0+Z/yq2RM4HU= AllowedIPs = 192.168.50.2
Перезапустите службу WireGuard на сервере:
/etc/init.d/wireguard restart
Настройка клиента
Установка
Для установки модулей и утилит WireGuard выполните:
emerge net-vpn/wireguard-tools net-vpn/wireguard-modules
Генерация ключей
Перейдите в директорию настроек WireGuard:
cd /etc/wireguard
Выполните генерацию закрытого и открытого ключей:
wg genkey | tee privkey | wg pubkey > publickey
Выведите публичный и приватный ключи:
==> publickey <== rT9yZRcg2pscyGkder/xTGds5/sy+mX0+Z/yq2RM4HU= ==> privkey <== gFDdeXHCIFEY5t4Tn3ETiZba/ElCxEIj1W8wX/YFVE4=
Конфигурация туннеля
Отредактируйте конфигурационный файл на клиенте, указав в нём
- IP адрес сетевого интерфейса клиента;
- порт, по которому будет происходить подключение;
- приватный ключ, сгенерированный на стороне клиента (его содержимое).
Например, у клиента IP адрес 192.168.50.2, порт подключения 51820. Тогда конфиг будет выглядеть следующим образом:
/etc/wireguard/wg0.conf
[Interface] Address = 192.168.50.2/24 # Закрытый ключ клиента PrivateKey = gFDdeXHCIFEY5t4Tn3ETiZba/ElCxEIj1W8wX/YFVE4= DNS = 8.8.8.8 [Peer] # Открытый ключ сервера PublicKey = ACMHojZjwV616cIsToFrQowXMJRxwEThFoEsvJnL/QM= AllowedIPs = 0.0.0.0/0 # Внешний ip адрес сервера и порт для подключения Endpoint = wg.example.org:51820 PersistentKeepalive = 20
Для исключения частных сетей из маршрутизации через туннель, утановите в AllowedIPs вместо 0.0.0.0/0 следующие значения:
0.0.0.0/5, 8.0.0.0/7, 11.0.0.0/8, 12.0.0.0/6, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/3, 160.0.0.0/5, 168.0.0.0/6, 172.0.0.0/12, 172.32.0.0/11, 172.64.0.0/10, 172.128.0.0/9, 173.0.0.0/8, 174.0.0.0/7, 176.0.0.0/4, 192.0.0.0/9, 192.128.0.0/11, 192.160.0.0/13, 192.169.0.0/16, 192.170.0.0/15, 192.172.0.0/14, 192.176.0.0/12, 192.192.0.0/10, 193.0.0.0/8, 194.0.0.0/7, 196.0.0.0/6, 200.0.0.0/5, 208.0.0.0/4, 8.8.8.8/32
Настройте права доступа к конфигурационному файлу и ключам:
chmod 600 wg0.conf privkey publickey
Запуск туннеля до сервера
Добавьте службу WireGuard в автозагрузку:
rc-update add wireguard
Запустите службу WireGuard:
/etc/init.d/wireguard start
Проверить подключение на стороне клиента можно командой route
, либо посмотрев внешний IP адрес с компьютера клиента:
dig +short myip.opendns.com @resolver1.opendns.com
Посмотреть информацию о подключении можно командой:
interface: wg0 public key: 6BfFNvPQbHKKDENJMRGXu0vVYaOsfEBxFpweNGLvU3Q= private key: (hidden) listening port: 45741 fwmark: 0xca6c peer: EDECjzNvTRsuuxiPD8VTS7N8cmcJ1fUIaANUdrOnbXM= endpoint: 1.2.3.4:51820 allowed ips: 0.0.0.0/0 latest handshake: 1 minute, 40 seconds ago transfer: 2.37 MiB received, 833.84 KiB sent persistent keepalive: every 20 seconds
Настройка Android
Конфигурация туннеля
Установите библиотеку для кодирования данных в QR-код:
emerge -a media-gfx/qrencode
После этого на основе конфигурационного файла клиента сформируйте QR код
█████████████████████████████████████████████████████████████████████████████████ █████████████████████████████████████████████████████████████████████████████████ ████ ▄▄▄▄▄ █ ▀▀ █▄█▄ ▀▀█▄▄ ▀▄▀ ▄ ▀█▀▀▄ █ ▀▄▀▀ █▀▄▄▄▀▄▀▄ ▀▀ █▄█ ▄▄▄▄▄ ████ ████ █ █ █ █▄▀▄█ █ ▀█▀█▀▄█▀▄▀█ █▄▄█▀▀▄▄▄█ ▀▀ ▄▀▀█▄ ▀█ ▀▀▀ █ ▄█ ▀▀██ █ █ ████ ████ █▄▄▄█ █▀▀▄▄▀▄█ ▀▄ █▀▄ ▄▄▄ █ ██▀█ █ ▄█ ▀ ▄▄▄ ▀▀ ▄█ █▀█▀ ▀▀▄▄█ █▄▄▄█ ████ ████▄▄▄▄▄▄▄█▄█ ▀ ▀ █▄█▄▀▄▀ █ █▄█ █ █▄▀▄█ ▀▄█ █▄█ █▄█ █▄▀ █▄▀▄█▄▀ █ ▀ █▄▄▄▄▄▄▄████ ████ ▄▀█▄▄▄█▀▀▄▄ █▀▀▀▄ ▄ █▄▄ ▄ ▄ █ ▀██▄▀██▀█▀ ▀▄ ▄▄▄ ▀▀▀█▀▀▀ ▀▄██▀ █▀█ ▀▄ ▄████ ████▀▀▀█▀▄▄ ▀▄▀█▀▀▄█▀█▀▄▄ ▄ ▀▀██▀ ▄▄▄▀█▀█▄▀ ▀▀▀█▀█▄██▀▀█ █▀██▄ ▄▄▄▄ ▀▀▄██ ▀████ ████▄▄ ▄ ▀▄█ ▀ █ █▀▀▄ ▄▄▀██ ▄▄ ▀▀█ █ █▄▀▀ ▀█ █▀ ▀█▀ █▀▀▄▀▄█ █▀▀▀█▄██▀▀▀ █▀ ██████ █████▄█ █▀▄ ▄▄▄▄███▀▄██ █ ▀▄█▄█▀▀█▀▀▄█▄ ███▀ ▄▀ ▄▄█▄▀ ▄█▄█▄▀ ▀ ▄█▄ ▀▀ ▀▀████ █████ ▄▀▄█████▀ ▄▄ ▀ ▀ ███ ▄██▀ █▄█▄▀▀▀ █▀█ █▀▀█ ▀█▀▀█▀█▀▀█▀█ ▄▄▀█▄██ ▄▀████ ████ █▄▄▀█▄█ ▀▄▀█▀█▀█ █ ▀ █ ▄ ██ ▀▀█▄▄ ▀█ ▀██▀ ▀ ▀█▄ █▄▄█ ▀▀▀█ █ ██ █▀█████ ████▄ ▄▀█▄▄▄█ ▀ ▀ ▀ ▄▄ ██▄▄▀ ▄▀█▀█ █▀ █▄█▄█▀ ▄██▀▀█ ▀▄▀ ▀▄█▀▀█▀▀ ▄█▄▄ ▄██▄▀████ █████▀▄ █▀▄ ▄▀▄██ ▀▀▀▀ █▀▀ ██ ▄▄▄▀▄▀ ▄▄█▀▄▀ ▀█▀ █▀▀ ███ ██ █▀ ▄▄▀█ ▄▄▀▄█▄█▀████ ████▄▄ ▄ ▄▄▄ █ ██▀ ▄▄█▄ ▀▀▀ ▄▄▄ ██▄ ▀██▄ ▀███▀▄ ▄▄▄ ▀ ██ ▄ ▄▀ █ ▄▄▄ ▀ ▀█████ ████▀██▀ █▄█ ▄ ▀ █▄▄██ ▀ █▄█ ▀▄▄█ █▀▄▀█▄ █▄█ ▀▀ ▄▀▀ ▀█▀ ▄ ▀ █▄█ ▄▀█▀████ ████ ▀▀ ▄▄ ▄▀██▀▄▀▀▄▄ ▄▀█▄▄ ▄▄█▀ ▄█ █ █▀▄▀▀ ▄█▄▄ ▀█▀█▄█▀ ▀▄ ▄ ▄▄▄████ ████▄▀▀ ▀▄▄▀ ▀██ █▄█▄ ██▀▄▄▄▀ ▀ ▀█ ▀█▀█▄▄ █▀███▄█▀ ▄▄█▄▄▄▄ █▀▀▀▀ █▄███▀██▄▄█████ ████▄█▀▀▀█▄█ ▀ ▀▀▀██▄▄██▄▀▄▄█ ██ ▄█ █ ▀█▀▄█ ▄▀▄█▄▀▀▀▀ ▀ ▀ ▄ █▀ ▄██▀ █▀████ ████▄▀▀█▄▀▄█ ▄█▄▀▀█▀▀ █▄▄█▄▄ ▀▀▄ ▀▄▀▄█▄██ ▀▄▀▀ ▄ █▀▀ ▀█▀ ▀▄▄▀▀▀████▄▀██▄▀█▄█▀████ █████ █▄▄ ▄ █▄█ █ ▄▄▀█▀ █▄▀▄ ▄▄▀█▄ ▄█▀█ ████▀ ▄██ ▄█▀██▀▀██▀ █▄ ▀██▄█▀▀▄▀▀████ ████ ▄▀█▀▀▄█▀█▄▄▀▄▀█▀▄ ▀▄▀ ▀ █▀█▄ ██▀▀█▀▄▄██ █▄▄▀▄█▀▀ ███ ▀▄█▄ █▀▀▀▄▄ ██████ ████▄██▄▄▄▄ █ █ ▄▄▀▄▀▄█ ▀▄█▀▄ █▀█▄▀▄█▄███▀▄▄ ▀ ▄██▀▀█▀██▄ █▄▀█ ▀▄ ▄██▄▄ █ ████ ████▀▀▀█▄ ▄█ ▄█▀▀▄▀█▄▄▀▄▄▀ █ ▀▄ █▄▄▄▄▀▄▀█▄ ▄▀ ██ ▄▄██ █▄ ███▀ ▄▄ ▄▄ ▄ ▀████ ████ ▀ ▀ ▄▄▄ ▀▀▄█ ▄▀ ▄▄▄▀▀▀█ ▄▄▄ █▀▀▄█▄█▄ ▀▀██▀▀ ▄▄▄ ▄▄▀▄█▄▄█▄ █▄ ▄▄▄ █ ██████ ████ ▀▄ █▄█ ▄██▄▄ ▀ ▀ ▄▄ █▄█ ▀ ▀▀█▀▄ ▄█▀▀ ▀ █▄█ █▄▀ ▄█▄▀▄ ▄▀▀▄█ █▄█ ▄▀█████ ████▀▄▄ ▄▄▄▄▀▀█▄▄▀▄▄█ ███▄ ▄ █▀ ██▄█▄▀▀▀██▀█ ▄▄█▀█▀▀ ▀▄█▀▄▄ █▄ ▄ █ ▄█████ ████▄▄█ ▄ ▄█ █▀▄█▀▄█ █ ▀▀▄▀ ▀█▀ ██▀▀ █ ▄█▀█▄ ▀█▀▄█▄▀████ ▀█▀▄▄██▄▀▄▄▄▄█████ █████▀ █▄▀▄ ▀▄ ▄ ██ ▄▄███▄█▀▄ ▀█▀▄██▄▀█ ▀▀█▄▄▀▀▀ ▀▀▀▄ █▄█▀█ ▄▀ ▀▀█ ▀ █▀ ▀████ █████ ▀ ██▄█ █▄▄▀█▀▀█▀█▀▄▀▀ ▄▀█▄▄ ▀▄█▄ ▄██ █▄ ▀▄ ███▀█▀▀▀██▄▀ ▄██▀ ▀▀▀█ ▀ █████ ████▀ █▄▀ ▄ ▄█ █ █ ▄ ▀▄▄▀█ ▀▀ ▄█▄█▄ ▀█▀█▀▄ ██▀▀▀ █▀█▄ ▄ ███▀▄█▄█▄ ▀ █▀ ████ ████▀▀▄▄█▄▄▄ █ ▄ ▀▄▀▄▄▀ ▀▀ ▄█▄▄▀▀ ▄█▄ ▄█ █▀▄▄▄▄█▄ ▄▀▄▄ ▄▄█ █▀▄ █▄ ▄▄█ █ ████ ████ ▀▄ ▄▄█▄▄█ █▀▀█▀ ▄ ▄▄▄▄▀█ ███▀█▄▄▀ █▀ ██ ▀ ▀█▄▀▄ ▀ █ ▄▀▄ ▄▀ ▄ ████ ████▄▄█ ▀▄▄ ▄ █▄▄██████▀█ ▀█▄▀ ▄█ █▀ ▀ ████▄▄█ █ █▄▄█ ▄▄ ██ ██▀▄▄ █▀█▀▀▄▀ ████ ████▄███▄█▄█▀▄▀ █▄▀▀ █ ████▄ ▄▄▄ ██ ▄██▀ █▀██▄ ▄▄▄ ▀▀█▄▀▀██▀▀▄ ▄█▄ ▄▄▄ ▀▀▄ ████ ████ ▄▄▄▄▄ █▀▄█▀▄█ ▀ ▄▄▄██ █▄█ ▀▄▀▄█ █ ▀▀▄▀█ ▀ █▄█ ▀█▀▄ ████ ██▄▄█ █▄█ ▄▀ ████ ████ █ █ █▄▀▀▀ ██▀█▀ ▄▄▀▄ ▄▄ ▄ ▄▄ █▄ ▄█▀▀▀▄ ▄ ▄▄▄██▄█▀ ▄▀ ▄ █▀▄ ▄▀██▀████ ████ █▄▄▄█ █▀██▀▀██ ▀█ ▀█▀ ▀ █▄ ██▀█▄ ▀▄▄▀▄▄▀ █ ▀ ▄ ▄██▄▄ ██▄▄▀█▄▄▀ ▀▀▀▄▀██ █████ ████▄▄▄▄▄▄▄█▄▄▄▄████▄▄▄█▄▄█▄████▄█▄█▄▄██▄██▄▄▄▄▄▄█▄█▄▄▄███████▄█▄▄▄▄███▄▄▄▄▄▄████ █████████████████████████████████████████████████████████████████████████████████ █████████████████████████████████████████████████████████████████████████████████
Установите официальное приложение WireGuard для Android или iPhone.
Запустите приложение и выберите создание туннеля с помощью QR кода.
Проверка подключения
Для проверки подключения после запуска туннеля вам понадобится терминал. Для примера вы можете установить Terminal Emulator.