DNAT和REDIRECT在IPTABLES中的区别

好吧,可能是因为我很密集,或者找不到正确的来源,但我不明白为什么这些IPTABLES设置之一会比另一个更好。

这是我的设置:

我有一个作为一个透明的代理路由器或sorting框。 它有两个接口,ETH0和ETH1,以及以下地址scheme:

ETH0 = DHCP ETH1 = 192.168.5.1/24为192.168.5.0/24networking上的DHCP提供服务给LAN后面的客户端

我有privoxy安装和侦听端口8080作为透明代理。 我用这个设置完成的是能够把这个盒子放到一个现有的networking中,只需要最less的configuration,并把客户端连接到代理上。

这是我的原始IPTABLES文件

*nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 8080 -A POSTROUTING -o eth0 -j MASQUERADE COMMIT *filter COMMIT 

这种configuration工作正常,stream量来回stream畅,没有问题。 我在privoxy的日志文件中得到原始的客户IP地址,生活很好。

当我开始查看其他人的configuration,并看到他们使用的是DNAT而不是REDIRECT时,我的困惑就出现了,我正在试图理解一个人的真实愿望。 这里是一个示例configuration:

 *nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to 192.168.5.1:8080 -A POSTROUTING -o eth0 -j MASQUERADE COMMIT *filter COMMIT 

同样,这个configuration也能工作,并且从日志的angular度给我提供了我所需要的一切。

哪一个是正确的,或者比另一个更正确?

感谢您花时间阅读这个…

REDIRECT改变发送到机器本身的目标IP地址。 换句话说,本地生成的数据包被映射到127.0.0.1地址。 这是redirect本地数据包。 如果您只想在本地机器上redirect服务之间的stream量,那将是一个不错的select。

DNAT是实际的networking地址转换 。 如果你希望在本地系统之外的数据包有目的地被改变,那么这是更好的select,因为REDIRECT不起作用。

REDIRECT @所回答, REDIRECT确实会改变发送到机器本身的目标IP地址。 但是我会说答案不完全正确,或者有点误导。

REDIRECT不仅用于redirect本地数据包。 这是真正的DNAT ,其中使用的目标IP地址是隐含的,如果是本地数据包则是127.0.0.1,否则是机器接口的IP地址,在OP的情况下是192.168.5.1。

所以在这个问题上,无论最终目的地是什么,数据包应该首先到达代理,所以REDIRECT是非常适合的。

由于使用REDIRECT你不需要指定IP地址,它只会采取正确的,它比DNAT有一些优势:

  • 如果计算机的IP地址由于任何原因而改变,则不需要修改规则,特别是DNAT不适用于DHCP控制的接口。

  • 您可以为几个系统(例如几个代理实例)编写和维护相同的规则,而不会因为特定的IP地址而保留不同的略微版本。