简短版本:是否有任何特殊设置可以使 NAT 在 Linux 的虚拟网络接口上正常工作?
我正在运行 Linux(2.6.39-2-486 Debian 版本)机箱作为 NAT 服务器。它有一个实际网络接口 eth0,用于连接到外部,还有一个虚拟网络接口 eth0:0,地址为 192.168.42.2,网络掩码为 /24,用于连接到内部网络。机箱内部的几台计算机通过此机箱连接到互联网(其默认网关设置为 192.168.42.2),其防火墙设置为(出于调试目的设置默认转发策略):
iptables -F
iptables -A INPUT -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -P FORWARD DROP
iptables -A FORWARD -s 192.168.42.0/24 -j ACCEPT
iptables -A FORWARD -d 192.168.42.0/24 -j ACCEPT
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 192.168.42.0/24 '!' -d 192.168.42.0/24 -j MASQUERADE
大多数情况下,此设置都运行良好。SSH、HTTP 和其他流量都正常。但是,连接到某些 SSL 保护的站点后,连接将无限期阻止,即使在尝试直接从服务器运行 wget 时连接正常。但是,其他 SSL 站点运行良好。示例:
client:~> wget -dv https://use.typekit.com/qqh6jah.js
Setting --verbose (verbose) to 1
DEBUG output created by Wget 1.12 on linux-gnu.
--2011-07-24 15:59:14-- https://use.typekit.com/qqh6jah.js
Resolving use.typekit.com... 68.232.35.119
Caching use.typekit.com => 68.232.35.119
Connecting to use.typekit.com|68.232.35.119|:443... connected.
Created socket 3.
Releasing 0x08ccd160 (new refcount 1).
Initiating SSL handshake.
知道这是怎么回事吗?我尝试过不同的 -j LOG 设置,但缺乏选择正确日志记录以查看问题出在哪里的启发。
答案1
最好的办法是获取 NAT 盒 eth0 接口上问题的 tcpdump,这将有助于查看 DNAT 规则是否按预期运行。另外,mangle/raw 表是空的,对吗?
答案2
我敢打赌你使用的是 ppp 连接,并且没有设置 TCP MSS