我在 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