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 MASQUERADE
Address
: Здесь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-tools
Ubuntu/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/32
PublicKey
: сгенерированный/etc/wireguard/laptop_publickey
AllowedIPs
: 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 = 20
PrivateKey
: сгенерированный/etc/wireguard/laptop_privatekey
Address
: IP адрес который будет у нас на wireguard интерфейсе. Соответственно такой же как мы указали в файлеwg0.conf
для нового пира.PublicKey
: публичный ключ сервера/etc/wireguard/public.key
Endpoint
: 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), и выбираем наш интерфейс.