如何在 Linux 路由器上配置 Wireguard 以将所有流量从 LAN 路由到远程 Wireguard VPN 服务器

如何在 Linux 路由器上配置 Wireguard 以将所有流量从 LAN 路由到远程 Wireguard VPN 服务器

我在 NanoPi R1 上运行着 Armbian Linux。它通过 IPTables NAT/Masquerading 将所有流量从 eth1(LAN 静态 IP,DHCP/DNS 的 dnsmasq)路由到 eth0(WAN dhcp 客户端)。这很好用。LAN 中 eth1 后面的客户端可以访问外部世界。

现在我已经在设备上安装了 Wireguard。云端有一个 Wireguard VPN 服务。我可以在 Pi 上访问它,它会通过 wg0 接口路由来自 Pi 的所有流量。

但 LAN 中的客户端无法再访问任何东西。我不明白如何将所有流量从 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 Forward。

这是我开始 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 发送了数据包,但是没有返回。出了什么问题?

masq 表如下所示:

$> 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     

相关内容