寻陌千 2019-05-07 19:23 采纳率: 0%
浏览 348

iptables如何添加非对称的NAT规则段

背景:内网穿透,想用server的port:20001-30000代理虚拟子网里另一台服务器的port:1-10000,其他都搞定了就差NAT了

目前进度:

将server的28000端口请求转发给虚拟子网10.8.0.8的8000端口,可以访问到

iptables -t nat -A PREROUTING -p tcp --dport 28000 -j DNAT --to-destination 10.8.0.8:8000
iptables -t nat -A PREROUTING -p udp --dport 28000 -j DNAT --to-destination 10.8.0.8:8000

尝试将28000-30000端口请求转发到8000-10000,结果是只有首条28000→8000有效,其他无效

iptables -t nat -A PREROUTING -p tcp --dport 28000:30000 -j DNAT --to-destination 10.8.0.8:8000-10000
iptables -t nat -A PREROUTING -p udp --dport 28000:30000 -j DNAT --to-destination 10.8.0.8:8000-10000

查阅到了一篇相关文章,文章结论如下

“当匹配的端口在映射端口的区间内时,那么端口号不会被修改。如果匹配端口不在映射端口的区间内,则大多数情况下映射端口号为最小的端口号,即映射端口号是不可预测的。

举例:

[1000-2000] 映射到[1000-2000]时会一一映射

[1000-2000] 映射到[3000-4000]结果不可预知,一般会映射到3000端口。”

这篇文章的结论符合目前的情况,但是接下来还能怎么做呢?

难道写个脚本添加10000条iptables规则进去?这也太...

希望能得到dalao解答,不胜感谢!

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 09:33
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要实现非对称的NAT规则段,您可以在NAT规则中使用--to-source选项来指定源IP地址,并且使用--to-port选项来指定目标端口。这样,即使目标端口和源端口不在同一个范围内,也可以通过设置不同的端口范围来实现非对称NAT。

    以下是一个简单的示例,它使用了--to-source--to-port选项来实现非对称NAT规则:

    iptables -t nat -A PREROUTING -p tcp --dport 28000 -j DNAT --to-source 10.8.0.8 --to-port 8000
    iptables -t nat -A PREROUTING -p tcp --dport 30000 -j DNAT --to-source 10.8.0.8 --to-port 10000
    

    在这个例子中,我们首先将28000-30000端口的流量定向到虚拟子网10.8.0.8的8000端口,然后将30000-40000端口的流量定向到虚拟子网10.8.0.8的10000端口。这样,即使目标端口和源端口不在同一个范围内,它们仍然可以通过设置不同的端口范围来实现非对称NAT。

    请注意,这只是一个基本的示例,实际使用时可能需要根据您的具体需求进行调整。例如,您可以考虑使用更复杂的策略,比如使用--to-source--to-port组合,或者使用--to-source--to-port--to-match等选项。

    评论

报告相同问题?