我有几个像这样的端口转发规则
iptables -t nat -A PREROUTING -p tcp --dport 46000 -j DNAT --to-destination 172.16.8.2:46000 iptables -A FORWARD -p tcp -d 172.16.8.2 --dport 46000 -j ACCEPT
我想知道是否有办法在一行而不是两行中添加新的转发规则,所以我不必input两次相同的数据。 我的意思是这样的规则:
可能吗?
每个DNAT只有一个命令就不可能完成 – 除非…见下文。 但是可以只input一次数据。
让我们定义标记范围1024-2047,获取DNATted和转发的连接。
每条DNAT匹配条件的一条线:
iptables -t mangle -A PREROUTING -p tcp --dport 46000 -j MARK --set-mark 0x400 iptables -t mangle -A PREROUTING -p tcp --dport 46001 -j MARK --set-mark 0x401 iptables -t mangle -A PREROUTING -p tcp --dport 46002 -j MARK --set-mark 0x402
每个nat中的一个命令:
iptables -t nat -A PREROUTING -m mark --mark 0x400 -j DNAT \ --to-destination 172.16.8.2:46000 iptables -t nat -A PREROUTING -m mark --mark 0x401 -j DNAT \ --to-destination 172.16.8.2:46001 iptables -t nat -A PREROUTING -m mark --mark 0x402 -j DNAT \ --to-destination 172.16.8.2:46002
一个在filter中的命令:
iptables -A FORWARD -m mark --mark 0x400/0x400 -j ACCEPT
顺便说一句:如果没有改变,就不需要为-j DNAT提供目标端口。
编辑1:
你可以做到这一点,如果你不明确允许连接,如果你是允许所有已经被DNATted的罚款。 在这种情况下,你会坚持你的
iptables -t nat -A PREROUTING -p tcp --dport 46000 -j DNAT --to-destination 172.16.8.2:46000
但只有一个FORWARD规则:
iptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT