WireGuard. Установка и настройка
Table of contents

WireGuard – VPN протокол с открытым исходным кодом, обеспечивающий высокую скорость при минимальной нагрузке.
В современном мире VPN нужен практически всем. Ведь не только для доступа к заблокированным ресурсам можно получить доступ, но и для объединения разных устройств подключенных к интернету и расположенных географически в разных местах.
Особенности WireGuard
- Простой в использовании.
- Использует современную криптографию: Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF
- Компактный читаемый код, проще исследовать на уязвимости.
- Высокая производительность.
- Четкая и проработанная спецификация.
- Максимальное преимущество в производительности (по сравнению с OpenVPN и IPSec) будет заметно на Linux системах, так как там WireGuard реализован в виде модуля ядра. Поддерживаются macOS, Android, iOS, FreeBSD, OpenBSD, Windows.

Установка
Установка wireguard будет производится на VPS с ОС Debian 11.
Для начала подключаемся к нашему серверу по ssh.
Ставим последние обновления.
apt update
apt upgradeТеперь можно устанавливать WireGuard
apt install wireguardДля Debian 10 необходимо будет добавить backport репозиторий.
echo "deb http://deb.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.listИ после установки скорее всего потребуется перезагрузка для Debian 10
На одноранговом узле, который будет действовать как «сервер», необходимо включить пересылку IPv4 с помощью sysctl
sysctl -w net.ipv4.ip_forward=1Чтобы сделать изменение постоянным нужно добавить net.ipv4.ip_forward = 1 в файл /etc/sysctl.d/99-sysctl.conf.
Настройка firewall
Нужно открыть порт 51820/UDP
Настройка WireGuard на сервере
Генерируем публичный и приватный ключ сервера.
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickeyСоздаём конфиг файл.
vim /etc/wireguard/wg0.confИ добавим в него следующее:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADEAddress: Здесь10.0.0.1- это частный IP-адрес VPN-сервера.ListenPort: сервер WireGuard VPN будет прослушивать UDP-порт 51820, который используется по умолчанию.PrivateKey: закрытый ключ VPN-сервера, который можно найти в файле/etc/wireguard/private.keyна сервере.PostUp/PostDown: нужны для включения и отключения форвардинга трафика. А также если сервер имеет публичный IP адрес и не находится за NAT. Вместоeth0подставить свой интерфейс с доступом в интернет.
Запуск сервиса wireguard
Теперь пробуем поднять наш wireguard интерфейс. Запускаем службу и сразу смотрим статус или всё запустилось.
systemctl start wg-quick@wg0
systemctl status wg-quick@wg0Если запустилось нормально, можем ставить в автозагрузку:
systemctl enable wg-quick@wg0Также можно посмотреть статус именно нашего интерфейса wg0 и подключенных к нему пиров.
wg show wg0Настройка клиента linux
Устанавливаем wireguard пакет
Archlinux
pacman -S wireguard-toolsUbuntu/Debian
apt install wireguardНа сервере генерируем ключи для клиента:
wg genkey | tee /etc/wireguard/laptop_privatekey | wg pubkey | tee /etc/wireguard/laptop_publickeyИ теперь обновим на сервере файл wg0.conf
vim /etc/wireguard/wg0.confИ добавим туда новый раздел с новым клиентом
...
[Peer]
# laptop
PublicKey = <СLIENT_PUBLIC_KEY>
AllowedIPs = 10.0.0.2/32PublicKey: сгенерированный/etc/wireguard/laptop_publickeyAllowedIPs: IP адрес для нашего клиента
Перезапускаем сервис после добавления нового клиента
systemctl restart wg-quick@wg0На клиенте создаем конфигурационный файл в папке /etc/wireguard/, называем его как-нибудь laptop.conf:
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.0.0.2/32
DNS = 10.0.0.1
[Peer]
PublicKey = <SERVER_PUBKEY>
Endpoint = <SERVER_IP>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 20PrivateKey: сгенерированный/etc/wireguard/laptop_privatekeyAddress: IP адрес который будет у нас на wireguard интерфейсе. Соответственно такой же как мы указали в файлеwg0.confдля нового пира.PublicKey: публичный ключ сервера/etc/wireguard/public.keyEndpoint: IP адрес и порт сервера.AllowedIPs: При использовании0.0.0.0/0, ::/0будет пересылать весь трафик IPv4(0.0.0.0/0)и IPv6(::/0)через VPN.PersistentKeepalive: каждые20секунд пир будет связываться с сервером.
Запускаем сервис и сразу смотрим статус на клиенте:
systemctl start wg-quick@laptop
systemctl start wg-quick@laptopТакже созданный файл для клиента можна импортировать через GUI Network менеджера.
Настройка клиента Android
Устанавливаем из андроид маркета офф. приложение wireguard
На сервере делаем ключи для клиента:
wg genkey | tee /etc/wireguard/android_privatekey | wg pubkey | tee /etc/wireguard/android_publickeyДобавляем на сервере в файл wg0.conf новый пир:
...
[Peer]
# Android phone
PublicKey = <СLIENT_PUBLIC_KEY>
AllowedIPs = 10.0.0.3/32Перезапускаем сервис на сервере:
systemctl restart wg-quick@wg0Создаем конфиг файл для телефона. Подставив ключи и IP адреса.
[Interface]
PrivateKey = <CLIENT_PRIVATE_KEY>
Address = 10.0.0.3/32
DNS = 10.0.0.1
[Peer]
PublicKey = <SERVER_PUBKEY>
Endpoint = <SERVER_IP>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 20Нужно перенести этот конфиг на смартфон, но значительно удобнее использовать QR код.
Для этого нужно установить qrencode
apt install qrencodeДальше указываем конфиг файл и генерируем QR код.
qrencode -t ansiutf8 < android.confПосле этого в консоли мы увидим QR код и нам остается только отсканировать его через WireGuard на мобильном приложении.

Настройка клиента Mikrotik
Для роутеров Mikrotik поддержка wireguard есть только в 7 версии routerOS, а она пока что в стадии development(не для продакшена).
Поставил версию 7.1rc4 на MikroTik hAP lite (RB941-2nD), пока работает стабильно.
На момент написания поста доступна версия 7.1rc4
Добавляем wireguard интерфейс.

Добавляем пир. Указав созданный интерфейс, публичный ключ нашего сервера, IP адрес сервера, порт, разрешенные сети(0.0.0.0/0 для всего трафика или только для доступа к нашей сети 10.0.0.0/24) и KeepAlive.

И обязательно добавляем ip адрес на наш wireguard интерфейс.
IP > Addresses
Нажимаем ‘+’, вписываем наш ip, который мы выбрали для клиента(например 10.0.0.3/24), и выбираем наш интерфейс.
