将单个端口 DNAT 到内部网络上的不同端口的标准方式如下:
ip(6)tables -t nat -A PREROUTING -i wan0 -p tcp --dport 80 --to-destination 10.0.0.1:8080
如果您需要端口范围,可以像这样-m multiport
一起使用--dports
:
ip(6)tables -t nat -A PREROUTING -i wan0 -p tcp -m multiport --dports 1000:2000 --to-destination 10.0.0.1
现在我想知道您是否可以结合这两种技术将一个端口范围(例如 1000-2000)映射到另一个相同大小的端口范围(例如 12000-13000)。使用不晚于 Linux 4.1 的内核的 Iptables 可以实现这一点吗?
答案1
回答你的问题,是的。
我在我的 Debian 机器上运行了一个示例规则......
iptables -t nat -A PREROUTING -i xenbr0 -p tcp --dport 64000:65000 -j DNAT --to 172.16.10.10:61000-62000
... 没有输出,表示成功。我正在运行 kernel 3.16.0-4-amd64
。
通过检查 NAT 规则iptables -t nat -vnL PREROUTING
,我看到规则已列出......
DNAT tcp -- xenbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpts:64000:65000 to:172.16.10.10:61000-62000
MadHatter 是正确的,您不需要-m multiport
端口范围,只需要逗号分隔的端口列表。需要:
来指定--dport
选项的端口范围,但-
需要 来指定DNAT
目标中的端口范围。
我无法说这个规则在实践中效果如何,但理论上它应该可以实现你的目标。
DNAT
可以找到有关目标的更多信息这里。
希望这可以帮助。