Сервер
Для начала ставим саму программу
sudo apt update
sudo apt install wireguard wireguard-tools
Генерируем ключи
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
Добавим возможность форвардить трафик. В файле /etc/sysctl.conf добавляем строчку
net.ipv4.ip_forward = 1
И перезагружаем сервис
sudo sysctl -p
Теперь создадим конфиг для wireguard. Создаем файл /etc/wireguard/wg0.conf с следующим содержимым.
[Interface]
Address = 10.10.31.1/24
SaveConfig = false
PostUp = ufw route allow in on wg0 out on ens3
PostUp = iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on ens3
PreDown = iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o ens3 -j MASQUERADE
ListenPort = 51820
PrivateKey =
[Peer]
PublicKey =
AllowedIPs = 10.10.31.2/32
[Peer]
PublicKey =
AllowedIPs = 10.10.31.3/32
[Peer]
PublicKey =
AllowedIPs = 10.10.31.4/32
Раздел [Interface]
Address — ip и маска для vpn сети
SaveConfig — я привык все делать правкой конфига. если поставить true, то ручные правки будут отменяться в пользу конфигурирования через cli.
PostUp и PreDown — команды фаерволла для маскарада трафика. ens3 меняем на своё имя интерфейса.
PrivateKey — строка из файла /etc/wireguard/server_private.key
Раздел [Peer]. Данных разделов может быть несколько.
PublicKey — публичный ключ КЛИЕНТА. Создать можно аналогично серверным ключам.
AllowedIPs — ip клиента
Далее добавляем сервис в загрузку и стартуем его
sudo systemctl enable wg-quick@wg0.service
sudo systemctl restart wg-quick@wg0.service
Клиент
Я подключаюсь с винды — https://www.wireguard.com/install/
В окне приложения нажимаем «Добавить пустой туннель» и затем «Редактировать». Конфиг клиента
[Interface]
PrivateKey =
Address = 10.10.31.4/24
[Peer]
PublicKey =
AllowedIPs = 10.10.31.0/24, 0.0.0.0/1, 128.0.0.0/1
Endpoint = endpoint:51820
Раздел [Interface]
PrivateKey — приватный ключ из пары КЛИЕНТА. В серверной в разделе [Peer] мы указывали его PublicKey.
Address — ip клиента
Раздел [Peer]
PublicKey — строка из файла /etc/wireguard/server_public.key на СЕРВЕРЕ.
AllowedIPs — адреса, которые будут работать через VPN
Endpoint — адрес и порт сервера.
Галочку «Блокировать не туннелированный трафик» снимаем что бы ходили DNS-запросы.