我在 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
如果我理解正确的话,第二条规则对所有不同于 192.168.1.0/24 的流量进行 NAT。换句话说,所有发往我为其制定了路由规则的局域网的数据包都是从 Debian Etch 的机器 IP 发送的,从而丢失了它们的真实发送者。
我希望这台机器不要对未经过它的流量进行 NAT。我会尽量说得更清楚...它应该只对来自 128.0.0.250(其 IP)和从 192.168.1.250 发出的流量进行 NAT。
我最近在学习 Linux,这有点太多了 :/ 有人可以帮忙吗(也许给出备份配置的指示,以便在出现完全混乱的情况下我可以安全)?
多谢!
答案1
您可以使用以下命令备份当前的 iptables 配置:
iptables-save >iptables-20101117
这将保存当前正在运行的规则,可以使用以下命令恢复:
iptables-restore <iptables-20101117
“iptables -L”命令不会列出有关规则的所有信息,包括接口限制等内容,因此我们可能无法在此处看到完整的情况。我通常会查看“iptables-save”的输出,以确保我看到完整的规则信息。
就规则而言,不应有来自其内部 128 IP 地址并通过 192 接口发出的流量。离开 192 接口的流量应绑定到 192 接口 IP 地址。因此,如果您不想要 MASQUERADE 规则,您可以将其删除。
我通常通过编辑文件并对完整规则集使用 iptables-restore 来更改规则。iptables-restore 是原子的,因此整套新规则会立即应用。
答案2
另外,你可以使用以下命令获得稍微更详细的输出:
iptables –t nat –vnL POSTROUTING
它将显示规则的输入/输出接口。(-n 部分告诉它不要解析端口号/IP 地址,我发现这更容易查看,但这更多的是一种品味......)
至于规则,使用 NAT 时,我尝试坚持基于接口的规则,而不是匹配 IP 地址,因为它在外部 IP 可能发生变化的环境中更为强大。
最常见的出站 NAT 规则是:
iptables -t nat -I POSTROUTING -s <LAN netblock> -o eth0 -j MASQUERADE
这使得来自 LAN 的所有流量,发往更广阔的世界(如果 eth0 是那样的话)都将具有 eth0 的 IP。(已编辑并更正)
但是,如果我没有看错您的请求,听起来您根本不想要任何 NAT。请记住,直接从机器本身发出的流量将始终具有其发出接口的源地址。您不需要任何 NAT 规则。
这里有一个有用的图表:http://www.shorewall.net/NetfilterOverview.html显示数据包通过各个表的流程。