WireGuard#

Сервер#

Генерируем пару ключей для сервера:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

/etc/wireguard/wg0.conf:

[Interface]
PrivateKey = приватный ключ сервера
Address = 10.0.0.1/24  # IP сервера в приватной сети
ListenPort = 51820
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

Включаем форвардинг IPv4:

echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p

В файрволе должен быть открыт соответствующий ListenPort порт UPD.

Сервис:

systemctl enable --now wg-quick@wg0.service

Генерируем ключи для клиента:

wg genkey | tee /etc/wireguard/client_privatekey | wg pubkey | tee /etc/wireguard/client_publickey

Дописываем в /etc/wireguard/wg0.conf:

[Peer]
PublicKey = публичный ключ клиента
AllowedIPs = 10.0.0.2/32  # IP клиента в приватной сети

Перезапустить сервис:

systemctl restart wg-quick@wg0.service

Сервер с одним клиентом готов. Дополнительные клиенты добавляются аналогично, для них следует задавать различные IP-адреса в приватной сети.

Ещё есть способ настройки с использованием PreSharedKey, но быстро в документации описания не нашёл. В частности PreSharedKey используется в конфигах, которые генерит веб-интерфейс wg-easy.

Клиент#

Этот конфиг надо скормить клиентскому приложению.

[Interface]
PrivateKey = приватный ключ клиента
Address = 10.0.0.2/32  # IP клиента в приватной сети
DNS = 8.8.8.8  # DNS резолвер

[Peer]
PublicKey = публичный ключ сервера
Endpoint = IP_сервера:порт
AllowedIPs = 0.0.0.0/0
PersistentKeepAlive = 20

Для подключения на Linux достаточно поставить пакеты Wireguard и выполнить:

wg-quick up ./путь до конфига  # для подключения
wg-quick down ./путь до конфига  # для отключения