PREROUTING区分INPUT和FORWARD数据包

我想在NAT PREROUTING链中做一个iptables REDIRECT规则,把连接redirect到80端口去到8080.但是我想只对input数据包(发往这台机器),而不是转发数据包(注定例如因特网)。

PREROUTING链中的规则中,有没有办法区分发往本机的数据包和正在转发的数据包,并对它们进行不同的处理?

这样做是非常理想的,不需要在规则中枚举特定的接口或IP地址,因为这样做不够灵活(例如,如果接口或IP地址发生变化,则需要更新iptables规则)。

我认为你注定要手动列出所有的“本地”IP地址。 根据我对这个netfilter数据包stream程图的阅读,在input/转发数据包之前没有任何差别,直到所有的PREROUTING链 – 这是有道理的,因为这个链毕竟叫做PRE ROUTING …

我只是遇到了addrtype模块 ,这似乎能够区分传入的数据包取决于目标地址是否是本地地址。 所以这可以用来区分input和转发数据包。

例如:

 iptables -A PREROUTING -t nat -p tcp --dport 80 -m addrtype --dst-type LOCAL -j REDIRECT --to-port 8080