当你启用转发和伪装时,NETfilter / iptables会做什么?

我设置了防火墙规则,即使我认为我理解了netfilter和iptables,但我对将1设置为net.ipv4.ip_forward并制定MASQUERADE规则时会发生什么感到困惑。

enbaling转发是否意味着每个进入的IP数据包基本上都是按照路由表重新发送和发送的? 还是只是简单地发送出所有的networking接口?

MASQUERADE规则正在发送,并匹配发送到互联网界面的所有内容。 这似乎表明,启用转发将IP包发送到每个接口,并且这个MASQ规则对于互联网接口做了一些特殊的(NAT)。

我的下一个问题是,如果所有到NAT路由器的传入stream量都只是在LAN接口上传输(尽pipe是非工作地址)。 这是否意味着我需要在FORWARD中制定特殊的DROP规则以防止产生不必要的stream量?

如果是这样,这是否意味着对于每一个PREROUTING规则,我需要在FORWARD另一个?

编辑:作为旁注:我的困惑源于我需要做的任务:我转发端口80到内部服务器。 这从我们的networking外部正常工作,但是当我尝试从networking内部连接到WAN IP时,我无法访问它。 我的规则是:

iptables -t nat -A PREROUTING -d WANIP -p tcp -m tcp --dport 80 -m comment --comment "Forward www to <machine>." -j DNAT --to-destination 10.50.0.4 

启用转发允许机器将数据包路由到其他主机,是的,它会查询路由表并只将其发送到正确的接口。 在禁用转发的情况下,所有未发往本机的数据包都将被丢弃。

但是,每个系统只有每个表的一个实例,而不是每个接口表。 所以数据包由Netfilter处理,不pipe它们被路由到什么地方,你必须在规则中手工过滤目标接口。

伪装将源IP地址replace为出接口之一,以便请求似乎来自路由器,而不是来自专用NAT地址。 它还会跟踪连接状态,以便在到达时可以将其定向到源主机。

DNAT发生在POSTROUTING中的PREROUTING和SNAT / MASQUERADE中,因此所有的步骤(通过FORWARD过滤,特别是)总是看到有效的,“端到端”的地址。 你必须写你的转发规则,如NAT不存在,你的私有地址空间是可路由的。

你的问题最类似的原因是你的FORWARD规则不允许从lan转发到LAN(这在没有这种内部NAT的情况下是合理的)。 由于DNAT在FORWARD之前发生,当FORWARD查看它时,目标地址已经改变为LAN。

我解决了这个问题。 简而言之,这是因为您连接的机器的回复是直接返回到局域网IP,而不是通过路由器。 这篇文章解释得很好。

除了上面的规则,我做了这个规则来解决它:

 iptables -t nat -A POSTROUTING -p tcp --source 10.50.0.0/16 --dest 10.50.0.4 --dport 80 -j SNAT --to-source 10.50.0.1 

10.50.0.1是路由器,10.50.0.4是它转发的机器。