WireGuard: Policy Based Routing
Задача как обычно телегу и протон почту пустить через 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 жмем Добавить.
Тут было немного не понятно как быть, но все же оказалось что для настройки клиента надо заполнить как серверную часть куда надо вписать приватный ключ клиента, а снизу добавить настройки пира и добавить приватный ключ сервера т.е. получается ключи устанавливаются на клиенте и сервере крест на крест. Вообщем смотрите по скринам:
Тут ремарка! Если не добавить сеть 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: