我有以下设置
- 服务器(192.168.21.11、172.17.4.6),通过 OpenVPN 路由 10.10.10.0/24
- 客户端(192.168.21.9)
- 路由器(192.168.21.1)[m0n0wall] 具有从 10.10.10.0/24 到 192.168.21.11 的静态路由
在服务器上,NAT转发已启用:
/sbin/iptables -t nat -A POSTROUTING -d 10.10.10.0/24 -o tun0 -j MASQUERADE
# cat /proc/sys/net/ipv4/ip_forward
1
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
我能够从客户端到服务器进行跟踪路由
# traceroute 10.10.10.10
traceroute to 10.10.10.10 (10.10.10.10), 30 hops max, 60 byte packets
1 (192.168.21.1) 0.283 ms 0.211 ms 0.165 ms ## Router
2 (192.168.21.11) 0.262 ms 0.249 ms 0.213 ms ## Server
3 (172.17.4.1) 40.356 ms 83.965 ms 83.915 ms ## OpenVPN Subnet
4 (10.10.10.10) 83.778 ms 83.626 ms 83.488 ms
但不知为何我无法从客户端连接到服务器。当我尝试通过 SSH 连接到服务器时,tcpdump 报告的内容如下:
# tcpdump -i tun0
tcpdump: WARNING: arptype 65534 not supported by libpcap - falling back to cooked socket
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type LINUX_SLL (Linux cooked), capture size 96 bytes
08:05:16.734848 IP 172.17.4.6.58710 > 10.10.10.10.ssh: S 2851123862:2851123862(0) win 5840 <mss 1460,sackOK,timestamp 597224955 0,nop,wscale 6>
08:05:16.776264 IP 10.10.10.10.ssh > 172.17.4.6.58710: S 658436853:658436853(0) ack 2851123863 win 5792 <mss 1366,sackOK,timestamp 296951268 597224955,nop,wscale 5>
08:05:20.986415 IP 10.10.10.10.ssh > 172.17.4.6.58710: S 658436853:658436853(0) ack 2851123863 win 5792 <mss 1366,sackOK,timestamp 296952321 597224955,nop,wscale 5>
08:05:26.985854 IP 10.10.10.10.ssh > 172.17.4.6.58710: S 658436853:658436853(0) ack 2851123863 win 5792 <mss 1366,sackOK,timestamp 296953821 597224955,nop,wscale 5>
看起来好像来自服务器的数据包没有被路由回客户端。
答案1
嗯,这不是 iptables 问题。问题是我使用 m0n0wall 作为路由器,并通过 m0n0wall 设置路由。由于 m0n0wall 将这些路由推送到防火墙,因此必须启用“绕过同一接口上流量的防火墙规则”规则,以阻止 m0n0wall 阻止数据包。
该问题与以下问题非常相似:http://forum.m0n0.ch/index.php?topic=381.0