我使用来自OpenWRT的自动生成规则作为NAT反射(NAT回环)的一个例子。
让我们假设有两个主机(+路由器)的网络192.168.1.0/24 : 192.168.1.100和192.168.1.200。路由器有两个接口局域网(br- LAN )和广域网(eth0).LAN接口具有IP 192.168.1.1,WAN接口具有IP 82.120.11.22 (public)。192.168.1.200上有一个www服务器。我们希望使用公共IP地址从192.168.1.100连接到web服务器。
如果您想重定向WAN->LAN,以便来自互联网的用户可以访问web服务器,您将向iptables添加以下规则:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80我知道这些规则意味着什么。但是还有另外两条规则,它们对NAT反射负责。其中一个对我来说不像上面的那个那么清楚。第一条规则是这样的:
iptables -t nat -A PREROUTING -i br-lan -s 192.168.1.0/24 -d 82.120.11.22/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200这意味着,从192.168.1.0/24网络发送到公共IP到端口80的所有流量都应该发送到本地web服务器,这意味着我在firefox中输入公共IP,我应该得到服务器返回的页面,对吗?filter表中的所有其他转发魔术都已经完成,但我仍然无法使用公共IP连接到web服务器。这个包符合规则,但什么也没发生。
为了使整个机制正常工作,我们需要另一个nat规则:
iptables -t nat -A POSTROUTING -o br-lan -s 192.168.1.0/24 -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.1我不知道为什么需要这条规则。有人能解释一下这条规则到底是干什么的吗?
发布于 2016-05-09 17:49:29
要使NAT正常工作,从客户端到服务器的数据包和从服务器到客户端的数据包都必须通过NAT。
注意,iptables中的NAT表仅用于连接的第一个数据包。随后,使用在第一个数据包被翻译时建立的内部映射表来处理与连接相关的包。
iptables -t nat -A PREROUTING -i br-lan -s 192.168.1.0/24 -d 82.120.11.22/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200只要有了这条规则,就会发生以下情况。
iptables -t nat -A POSTROUTING -o br-lan -s 192.168.1.0/24 -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.1一旦我们添加了这个规则,事件的顺序就会发生变化。
发布于 2016-05-09 17:14:47
这听起来似乎强制相反的流量也通过openwrt。通过重写see服务器将看到的源地址。
如果the服务器直接回复客户端,则这些数据包的源地址仍然是the服务器的源地址。但是客户端正在尝试与openwrt IP对话。因此,应答包将被丢弃。
在第一种情况下,您不需要这种强制执行,因为从don服务器到跨internet的客户端的路由已经通过openwrt框。
https://unix.stackexchange.com/questions/282086
复制相似问题