iptables的dnat映射到特定的ip

我用两台机器构build了一个私有networking,它们都有两个networking接口,这是networking信息:

MACHINE1:

eth0 10.0.0.11 (private net) eth1 10.82.80.208 (Campus Network ip) 

机2:

 eth0 10.0.0.21 (private net) eth2 10.82.80.207 (Campus Network ip) 

我想在我的机器(10.82.80.206)中访问校园网中的10.0.0.11,而不是通过iptables dnat使用校园网IP地址。 例如,我想将数据包的目标从10.0.0.11更改为10.82.80.208。

我正在尝试使用iptables命令,如:

 iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208 iptables -t nat -A PREROUTING -i eth0 -p icmp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208 iptables -t nat -A PREROUTING -i eth0 -p udp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208 

但是,当我试图ping 10.0.0.11,主机仍然无法访问时,似乎没用,我怎么能把我的机器上的口袋从10.0.0.11更改为10.82.80.208?

你所犯的第一个错误是使用PREROUTING链来处理本地生成的数据包。 在你自己的机器上生成的包不会遍历PREROUTING,但只能遍历OUTPUT和POSTROUTING链。 您应该在OUTPUT链中为本地生成的数据包执行NAT,因此您的规则如下所示:

 iptables -t nat -A OUTPUT -i eth0 -p tcp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208 iptables -t nat -A OUTPUT -i eth0 -p icmp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208 iptables -t nat -A OUTPUT -i eth0 -p udp -d 10.0.0.11 -j DNAT --to-destination 10.82.80.208 

只有当您的机器(10.82.80.206)充当校园networking中其他机器的10.0.0.11/21的网关时,才应该使用PREROUTING。