好吧,可能是因为我很密集,或者找不到正确的来源,但我不明白为什么这些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地址而保留不同的略微版本。