Установка и настройка сервера Wireguard.

Обновляем сервер:

apt update && apt upgrade -y

Ставим wireguard:

apt install -y wireguard

Генерируем ключи ключи сервера:

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

Проставляем права на приватный ключ:

chmod 600 /etc/wireguard/privatekey

Проверяем, как называется сетевой интерфейс:

ip a

Создаем файл конфигурации:

nano /etc/wireguard/wg0.conf
[Interface]
PrivateKey = <privatekey>
Address = 10.0.0.1/24
ListenPort = 51830
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

В строках PostUp и PostDown указываем вместо eth0 действующий сетевой интерфейс если он отличается.

Вставляем вместо <privatekey> содержимое файла /etc/wireguard/privatekey

cat /etc/wireguard/privatekey

Настраиваем IP форвардинг:

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

Включаем systemd демон с wireguard:

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

Создаём ключи клиента:
wg genkey | tee /etc/wireguard/client_privatekey | wg pubkey | tee /etc/wireguard/client_publickey

Добавляем в конфиг сервера клиента:

nano /etc/wireguard/wg0.conf
[Peer]
PublicKey = <client_publickey>
AllowedIPs = 10.0.0.2/32

Вместо <client_publickey> — заменяем на содержимое файла /etc/wireguard/client_publickey

Перезагружаем systemd сервис с wireguard:

systemctl restart wg-quick@wg0
systemctl status wg-quick@wg0

Настраиваем клиент wireguard.

создадим файл конфигурации:

nanо client_wg.conf
[Interface]
PrivateKey = <CLIENT-PRIVATE-KEY>
Address = 10.0.0.2/32
DNS = 8.8.8.8

[Peer]
PublicKey = <SERVER-PUBKEY>
Endpoint = <SERVER-IP>:51830
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20

<CLIENT-PRIVATE-KEY> заменяем на приватный ключ клиента, из файла /etc/wireguard/client_privatekey на сервере.

 <SERVER-PUBKEY> заменяем на публичный ключ сервера, из файла /etc/wireguard/publickey на сервере. 

<SERVER-IP> заменяем на IP сервера.

Этой конфигурации достаточно для подключения с любого клиента.

Для более удобного подключения можно генерировать QR код вместо конфигурационного файла.

установим qrencode:

apt install qrencode

Генерируем QR код из конфигурационного файла клиента:

qrencode -t ansiutf8 < client_wg.conf

В консоли должен появится QR код, который можно отсканировать мобильным телефоном.

Так же можно создать изображение в формате png с QR кодом, чтобы отправить клиенту:

qrencode -t png -o client-qr.png -r client_wg.conf