IPTABLES 正在伪装软件包,但没有明确的规则

IPTABLES 正在伪装软件包,但没有明确的规则

我正在运行一个简单的实验来验证 IPtables 的一些 NAT 概念。

我有一个防火墙,它有两个接口连接两个网络:

网络 A - 192.168.0.0/24 - 连接到 eth0 - 防火墙的 IP:192.168.0.1
网络 B - 192.168.1.0/24 - 连接到 eth1 - 防火墙的 IP:192.168.1.1

我已将以下 DNAT 规则应用于 FW:

iptables -t nat -A PREROUTING -d 192.168.1.1/32 -j DNAT --to-destination 192.168.0.2

流量被正确重定向到主机 192.168.0.2,这是从 .0.2 主机捕获的示例:

16:17:40.005055 IP 192.168.1.2 > 192.168.0.2:ICMP 回显请求,ID 15106,序列号 1285,长度 64 16:17:40.005133 IP192.168.0.2> 192.168.1.2:ICMP 回显答复,id 15106,seq 1285,长度 64

然而,当我从 FW HOST 捕获相同的流量时,我看到了一些非常有趣的东西。

当我从eth0我看到的流量与预期一致,回应来自 IP:192.168.0.2

但当我做同样的事情eth1,这就是我看到的:

16:21:44.348196 IP 192.168.1.2 > 192.168.1.1:ICMP 回显请求,ID 15106,序列号 1527,长度 64 16:21:44.360376 IP192.168.1.1> 192.168.1.2:ICMP 回显答复,id 15106,seq 1527,长度 64

如果你关注回显答复,源 IP 是 192.168.1.1。如果我们查看 eth0 时只看到来自 192.168.0.2 的原始包,这怎么可能呢?

可以看出,FW 上没有配置 SNAT 或 Masquerade 规则:

FIREWALL:~# iptables -t nat -L

Chain PREROUTING (policy ACCEPT) target     prot opt source           
destination          DNAT       all  --  anywhere            
192.168.1.1         to:192.168.0.2 

Chain POSTROUTING (policy ACCEPT) target     prot opt source          
destination         

Chain OUTPUT (policy ACCEPT) target     prot opt source              
destination

只有原始的DNAT规则。

那么为什么内核会伪装我的包呢?我知道建议结合 DNAT 进行 SNAT,但这不是我的观点。如果我没有告诉 IPtables 这样做,我想知道为什么会发生这种情况。内核是否有可能在不咨询 iptables/netfilter 规则的情况下这样做?

答案1

这就是 DNAT 规则的效果。您希望更改地址,因此,一方面您有原始数据包,另一方面您有更改后的数据包。这就是 NAT 的全部意义所在。

编辑

来自手册

它指定应该修改数据包的目标地址(并且此连接中的所有未来数据包也将被破坏)

这意味着不仅启动连接的包会被修改,而且所有响应和所有进一步发送的包都会被修改。

相关内容