我正在尝试通过 openvpn 重新路由来自我家特定设备的流量。为此,我在我的家庭 WiFi 路由器和我的服务器之间创建了一个 OpenVPN 隧道。
这是我的设置:
Wifi router's outgoing interface IP: 192.168.1.102
Wifi router's openvpn tun0: 10.8.0.2
Server's openvpn tun0: 10.8.0.1
My PC WiFi Server
,- 10.8.0.2(tun0) 10.8.0.1(tun0) --.
| | _
__ _ ' .-,( ),-. ' |-|
[__]|=| wireless ___|_ VPN .-( )-. VPN |=|
/::/|_| <- - - - - > [__...] < - - - > ( internet ) < - > |=|
. '-( ).-' "^"
| '-.( ).-'
`-- 192.168.1.102
服务器的iptable配置:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED, ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o eth2 -j ACCEPT
Wifi 路由器的配置(使用新的路由表 openvpn-route):
ip route add default via 10.8.0.1 dev tun0 table openvpn-route
ip rule add fwmark 0x1 table openvpn-route
iptables -t mangle -A PREROUTING -m mac --mac-source aa:aa:aa:aa:aa:aa -j MARK --set-mark 1
iptables -A POSTROUTING -t nat -o tun0 -p tcp --dport 80 -j SNAT --to 10.8.0.2
现在,每当我从笔记本电脑访问网站时,我都会看到流量流向 wifi 路由器的 tun 设备,并从那里流向服务器。但该流量的SRC IP地址是192.168.1.102(wifi路由器的出接口IP)。因此,我认为服务器会忽略此流量。
当我查看有多少数据包匹配 SNATing 规则以将 SRC IP 更改为 10.8.0.2 时,我发现该计数为零。因此该规则不会与任何数据包匹配。
我怎样才能解决这个问题?