为什么我的 NAT 设置不起作用?

为什么我的 NAT 设置不起作用?

由于某种原因,tcpdump 在tun0接口上看到了数据包,但在接口上看不到它们eth0

我有一个 OpenVPN 服务器,我用它从一台无法直接连接的机器访问 Github。 OpenVPN 的设置是为了将 github 路由推送到客户端:

port 1194
proto tcp
dev tun
ca ca.crt
cert cloud.crt
key cloud.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

# github.com
push "route 192.30.253.112 255.255.255.255"
push "route 192.30.253.113 255.255.255.255"

keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

我通过 iptables 在服务器上添加了 NAT:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE 

(我也尝试了替代版本 - iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to 82.196.2.80,结果是相同的)

tun0所以我在接口上看到数据包:

$ tcpdump -n -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes
06:37:47.936890 IP 10.8.0.6.58816 > 192.30.253.112.80: Flags [S], seq 1523900495, win 29200, options [mss 1366,sackOK,TS val 3602297008 ecr 0,nop,wscale 7], length 0
06:37:48.960336 IP 10.8.0.6.58816 > 192.30.253.112.80: Flags [S], seq 1523900495, win 29200, options [mss 1366,sackOK,TS val 3602298033 ecr 0,nop,wscale 7], length 0

但没有数据包eth0

$ tcpdump -n -i eth0 | grep 192.30.253.112
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

sysctl报告转发已开启:

$ sysctl net.ipv4.ip_forward 
net.ipv4.ip_forward = 1

我使用的是 Ubuntu 16.04.3、Linux 4.4.0-112-generic。

可能是什么问题呢?我可以在哪里查看调试这个问题?

相关内容