我有一个现有的 iptables 设置可以进行端口转发。在这种端口转发场景中,有些情况下我不希望它进行端口转发。所以,例如我有这个定义:
iptables -A PREROUTING -t nat -i eth0 '!' -s 10.200.0.0/16 -p tcp --dport 80 -j DNAT --to 10.200.30.11
Run Code Online (Sandbox Code Playgroud)
这将阻止 10.200/16 访问此规则。事实证明,我需要添加多个排除项。但是,似乎没有办法做到这一点:
iptables -A PREROUTING -t nat -i eth0 '!' -s 10.200.0.0/16,192.168.0.0/16 -p tcp --dport 8080 -j DNAT --to 10.200.30.11:80
iptables v1.4.8: ! not allowed with multiple source or destination IP addresses
Run Code Online (Sandbox Code Playgroud)
我将假设我必须以不同的方式处理这个问题,但我不知道如何。有什么建议?
您可以使用以下变体之一:
第一个是设置类型为“hash:net”的 ipset。
第二个是 iptables 规则链,-j RETURN
每个网络都跳过检查,并将所需的默认操作作为最后一个链规则。
第三个是标记数据包使用一些位标记-j MARK
和相应的标志播放(带--set-mark
,--set-xmark
等等),然后做所需的操作,如果标记检查的条件(-m mark
和--mark
)。这是最通用的变体,因为标记可以在一个表中设置并在另一个表中检查。OTOH 标记位掩码限制为 32 位,这对于复杂规则来说可能不够。
归档时间: |
|
查看次数: |
3498 次 |
最近记录: |