WireGuard — это бесплатный, современный и быстрый VPN с открытым исходным кодом и современной криптографией, поддерживающий соединения IPv4 и IPv6. Он проще, быстрее, чем IPSec и OpenVPN.
Для сравнения, OpenVPN и IPSec, использует TLS и сертификаты для аутентификации и установления зашифрованных туннелей между системами. Различные версии TLS включают поддержку сотен различных криптографических наборов и алгоритмов, и хотя это обеспечивает большую гибкость, это также делает настройку VPN, использующей TLS, более сложной и подверженной ошибкам.
Шифрование WireGuard основано на открытых и закрытых ключах, позволяющих узлам устанавливать зашифрованный туннель между собой.
Также WireGuard работает на уровне ядра ОС Linux, в отличии от OpenVPN, что позволяет ему пропускать трафик через тунель без практических потерь в скорости.
Установка
Установка WireGuard на Linux Ubuntu 20.04 (Работает и на 18/20/22)
Подготовка системы:
sudo apt update && apt upgrade
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sudo sysctl -p
Установка:
sudo apt install wireguard
Генерация ключей для сервера: публичный и приватный:
sudo wg genkey | sudo tee /etc/wireguard/privatekey | sudo wg pubkey | sudo tee /etc/wireguard/publickey
Конфигурация:
sudo vim /etc/wireguard/wg0.conf
[Interface]
Address = 192.168.168.1/24
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 MASQUERADE
ListenPort = 51820
PrivateKey = <SERVER-PRIV-KEY>
где <SERVER-PRIV-KEY>
— результат генерации приватного ключа сервера: /etc/wireguard/privatekey
Запуск сервиса
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
systemctl status wg-quick@wg0
sudo wg show wg0
Подготовка клиента
Генерация ключей для клиента: публичный и приватный:
sudo wg genkey | sudo tee /etc/wireguard/cl1_privatekey | sudo wg pubkey | sudo tee /etc/wireguard/cl1_publickey
где cl1 — название клиента.
Обновим на сервере файл wg0.conf, добавим клиента:
sudo vim /etc/wireguard/wg0.conf
...
[Peer]
PublicKey = <СLIENT-PUBLIC-KEY>
AllowedIPs = 192.168.168.4/32
Необходимо перезапустить WireGuard
sudo systemctl restart wg-quick@wg0
systemctl status wg-quick@wg0
Настройки на стороне Клиента
vim cl1.conf
[Interface]
PrivateKey = <PEER_PRIVATE_KEY>
Address = 192.168.168.4/32
[Peer]
PublicKey = <SERVER-PUBKEY>
Endpoint = <SERVER-IP>:51820
AllowedIPs = 192.168.168.0/24
PersistentKeepalive = 20
где:
- <PEER_2_PRIVATE_KEY> - приватный ключ клиента
- <SERVER-PUBKEY> - публичный ключ сервера
- <SERVER-IP> - IP адрес сервера
После подключения, можно проверить соединения на сервере:
wg show wg0
Перенаправляем весь трафик через WireGuard
vim cl1.conf
[Interface]
PrivateKey = <PEER_PRIVATE_KEY>
Address = 192.168.168.4/32
DNS = 8.8.8.8
[Peer]
PublicKey = <SERVER-PUBKEY>
Endpoint = <SERVER-IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
Для мобильных клиентов
Приложение для iOS или Android доступно в сторах. Для ввода конфигов удобно использовать QR код. Для этого необходимо превратить конфиг клиента в QR.
sudo apt install qrencode
qrencode -t ansiutf8 < mob_cl2.conf
Появившийся QR код сканируем через установленный на смартфоне WireGuard.