|
|
我有一台不算很老的 PC,现在打算用它来做 NAT 网关。这个机器上装了两块网卡,分别连接至内网和外网,配置如下:
内网网卡 eth0:192.168.0.1,对应内网地址段 192.168.0.0/24,内网其他机器以这台 PC 的内网网卡 IP 地址(192.168.0.1)做网关;
外网网卡 eth1:10.13.9.252,对应外网地址段 10.13.9.0/24,外网网关 10.13.9.254。
我装的是 FC4,默认的内核版本是 2.6.11-1.1369_FC4,iptables 自带的版本是 1.3.0。路由规则如下:
Destination Gateway Genmask Flags Metric Ref Use Iface
10.13.9.0 * 255.255.255.0 U 0 0 0 eth1
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth1
default 10.13.9.254 0.0.0.0 UG 0 0 0 eth1
我用 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE 后,内网的机器无法访问到外网,ping 10.13.9.254 不通。用 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to 10.13.9.250 后,想把内网的机器用 10.13.9.250 这个地址转换进入外网,内网机器还是无法访问外网,ping 10.13.9.254 不通。
后来我用 yum 升级内核至 2.6.15-1.1833_FC4,用 MASQUERADE 就可以,但是用 SNAT 则还是不行,因为内网要针对不同地址范围做更细的划分,使用多个不同的外网地址做地址转换,比如 192.168.0.1-192.168.0.10 的转换为 10.13.9.250,192.168.0.11-192.168.0.20 转换为 10.13.9.251 等,我想还是要靠 SNAT才行,但是现在只有 MASQUERADE 能起作用,但是 SNAT 始终无法起作用,不知道是不是内核不支持?还是要靠自己编译内核才行吗?我试过自己编译 iptables 1.3.5 也是这个样子,只有 MASQUERADE 起作用,SNAT 没有作用。我不需要内网机器做端口映射,只需要能作到类似 MASQUERADE 那样的效果,但要求能对不同范围的内网地址指定转换为不同的外网地址,恳请哪位高手大人指点迷津,非常感谢!!! |
|