Debian的蚀刻:如何纠正错误的iptables / NAT

我在Debian Etch机器上遇到了一个问题。对于黑暗和暴风雨的原因,它在eth0上的IP很奇怪,但是我们必须保持这样的状态。

它的ifconfig:

eth0 Link encap:Ethernet inet addr:128.0.0.250 Mask:255.255.0.0 eth1 Link encap:Ethernet inet addr:192.168.1.250 Mask:255.255.255.0 

用命令:

 iptables –t nat –L POSTROUTING 

我得到:

 target prot opt source destination ACCEPT 0 -- 128.0.0.2 anywhere MASQUERADE 0 -- !192.168.1.0/24 anywhere 

第二个规则,如果我理解正确的话,所有的stream量都不同于192.168.1.0/24。 换句话说,所有发往我拥有路由规则的lan的数据包都从Debian Etch的机器ip发送,失去了真正的发送者。

我希望这台机器不要通过NAT的stream量不通过它。 我会尽量做得更清楚…它应该只有来自128.0.0.250(它的IP),从192.168.1.250出去的NATstream量。

我最近在学习linux,这有点太多了:/任何人都可以帮忙(也许指示备份configuration,所以我可以安全的情况下,一塌糊涂)?

非常感谢!

您可以使用以下命令备份当前的iptablesconfiguration:

 iptables-save >iptables-20101117 

这将保存当前运行的规则,可以通过以下方式进行恢复:

 iptables-restore <iptables-20101117 

“iptables -L”命令没有列出所有关于规则的信息,包括接口限制等,所以我们可能在这里看不到全图。 我通常看看“iptables-save”的输出,以确保我看到完整的规则信息。

就规则而言,不应该从内部128个IP地址stream出192stream量。 stream量离开192接口应该绑定到192接口的IP地址。 所以,如果你不想要MASQUERADE规则,你可以删除它。

我通常通过编辑文件并在整个规则集上使用iptables-restore来更改规则。 iptables-restore是primefaces性的,所以整套新规则一次性得到应用。

另外,你可以得到一个稍微更详细的输出:

 iptables –t nat –vnL POSTROUTING 

这将显示规则的input/输出接口。 (-n部分告诉它不要parsing端口号/ IP地址,我发现这些端口号/ IP地址更容易理解,但这更像是一种有趣的事情)

至于规则,在NAT中,我试图坚持使用基于接口的规则,而不是匹配IP地址,因为在外部IP可能发生变化的环境中它更加稳健。

最常见的出站NAT规则是:

 iptables -t nat -I POSTROUTING -s <LAN netblock> -o eth0 -j MASQUERADE 

这使得来自局域网的所有stream量都能stream向更广阔的世界(如果eth0是这样的话)将拥有eth0的IP。 (更正编辑)

但是,如果我正确地读取了您的请求,听起来就像您根本不需要任何NAT。 请记住直接来自机器本身的stream量总是会有一个接口的源地址。 你不需要任何NAT规则。

这里是一个有用的图表: http : //www.shorewall.net/NetfilterOverview.html显示通过各种表的数据包的stream量。