WireGuard: Policy Based Routing

В Keenetic OS начиная с версии 3.3 появилась поддержка WireGuard. Решил поменять OpenVPN на него и заодно потренироваться в настройке. Задача как обычно телегу и протон почту пустить через VPN. В качестве сервера CentOS 7, а клиента роутер Keenetic.

Настройка сервера

Установка тривиальная:

yum upgrade -y
reboot
yum install kmod-wireguard wireguard-tools
modprobe wireguard

Если еще не включен форвардинг пакетов, то включаем:

vi /etc/sysctl.conf

net.ipv4.ip_forward=1

sysctl -p

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

wg genkey > /etc/wireguard/private-server.key
chmod 077 /etc/wireguard/private-server.key
wg pubkey < /etc/wireguard/private-server.key > public-server.key

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

wg genkey > /etc/wireguard/private-client.key
chmod 077 /etc/wireguard/private-client.key
wg pubkey < /etc/wireguard/private-client.key > public-client.key

Пишем конфиг сервера:

vi /etc/wireguard/wg0-server.conf

[Interface]
Address = 10.1.0.1/24
ListenPort = 48030
PrivateKey = содержимое_private-server.key

[Peer]
PublicKey = содержимое_public-client.key
# в AllowedIPs на сервере на прописывайте 0.0.0.0/0 иначе сеть зависнет
AllowedIPs = 10.1.0.1/32, 192.168.1.0/24

chmod 600 /etc/wireguard/wg0-server.conf
systemctl enable wg-quick@wg0-server
systemctl start wg-quick@wg0-server

Создадим профиль WireGuard для firewalld:

vi /etc/firewalld/services/wireguard.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>wireguard</short>
  <description>WireGuard Server</description>
  <port protocol="udp" port="48030"/>
</service>

firewall-cmd --permanent --add-service=wireguard --zone=public
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --reload

Настройка клиента

Идем в общие настройки и устанавливаем WireGuard после чего роутер уйдет на ребут. Далее идем в Интернет -> Другие подключения и в секции WireGuard жмем Добавить.

Тут было немного не понятно как быть, но все же оказалось что для настройки клиента надо заполнить как серверную часть куда надо вписать приватный ключ клиента, а снизу добавить настройки пира и добавить приватный ключ сервера т.е. получается ключи устанавливаются на клиенте и сервере крест на крест. Вообщем смотрите по скринам:

Настройка подключения 1
Настройка подключения 2

Тут ремарка! Если не добавить сеть 0.0.0.0/0, то не будет работать Policy Based Routing.

Выставляем разрешающие правила фаервола для домашней сети:

Правила фаервола для домашней сети

Выставляем разрешающие правила для WireGuard. Для этого подключаемся к роутеру по ssh и выполняем:

interface Wireguard0 security-level private
ip nat Wireguard0
system configuration save

Policy Based Routing

Теперь добавляем адреса заблокированных ресурсов как показано на скринах:

Параметры статического маршрута
Статические маршруты

После каждых изменений необходимо перезапускать клиент иначе не подхватятся изменения. Проверить работу маршрутов можно трассировкой.

Подключения можно проверить командой wg show:

wireguard show