iptables 中的 SNAT 问题

iptables 中的 SNAT 问题

我正在尝试通过 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 时,我发现该计数为零。因此该规则不会与任何数据包匹配。

我怎样才能解决这个问题?

相关内容