Назад | Перейти на главную страницу

Как настроить Wireguard на маршрутизаторе Linux для маршрутизации всего трафика из локальной сети на удаленный сервер Wireguard VPN

У меня работает Armbian linux на NanoPi R1. Он направляет весь трафик с eth1 (статический IP-адрес LAN, dnsmasq для DHCP / DNS) на eth0 (dhcp-клиент WAN) через IPTables NAT / Masquerading. Это нормально работает. Клиент, стоящий за eth1 в локальной сети, может подключиться к внешнему миру.

Теперь я установил Wireguard на устройство. В облаке есть сервис Wireguard VPN. Я могу связаться с ним на Pi, и он направляет весь трафик с Pi через интерфейс wg0.

Но клиенты в локальной сети больше ничего не могут достичь. Я не понимаю, как маршрутизировать весь трафик с eth1 через wg0 и достигать eth0. В сети есть много примеров, как настроить наоборот (сервер VPN), но я не уверен, как настроить интерфейс wg.

[Interface]
Address = 10.0.0.10/32, fd01:10:0::10/128
ListenPort = 21841
PrivateKey = ...

PostUp   = iptables -A FORWARD -i %i -o eth1 -j ACCEPT; iptables -A FORWARD -o %i -i eth1 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -o eth1 -j ACCEPT; iptables -D FORWARD -o %i -i eth1 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth1 -j MASQUERADE

DNS = <provider-ip>

[Peer]
PublicKey = <pubkey>
EndPoint = <vpnserver>:<vpnport>
AllowedIPs = 0.0.0.0/0, ::/0

PersistentKeepalive = 25

Даже когда я удаляю или изменяю PostUp / Down, поведение не меняется. В ядре включена переадресация IP.

Это мой набор правил после запуска wg0:

$> iptables -L -n -x -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
      12     1752 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    4267   282274 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
     273    24031 ACCEPT     all  --  eth1   *       0.0.0.0/0            0.0.0.0/0           
   0        0 ACCEPT     all  --  wlan0  *       0.0.0.0/0            0.0.0.0/0           
     825    87848 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
     701    85098 DROP       all  --  eth0   *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
     419    26498 ACCEPT     all  --  eth1   eth0    192.168.11.0/24      0.0.0.0/0            ctstate NEW
   15343  6475800 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
       0        0 ACCEPT     all  --  wg0    eth1    0.0.0.0/0            0.0.0.0/0           
      69    12915 ACCEPT     all  --  eth1   wg0     0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Я вижу, что eth1 отправляет пакеты на wg0, но они не возвращаются. Что случилось?

Таблица масок выглядит так:

$> iptables -L -n -x -v -t nat
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination         
     742    52126 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           
       0        0 MASQUERADE  all  --  *      eth1    0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination