DNAT端口范围与Iptables不同的内部端口范围

将单个端口DNATing到内部networking上不同端口的标准方式是这样的:

ip(6)tables -t nat -A PREROUTING -i wan0 -p tcp --dport 80 --to-destination 10.0.0.1:8080

如果你需要一个端口范围,你可以使用-m multiport--dports这样的-m multiport

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的内核?

回答你的问题, 是的

我在我的Debian框上运行了一个示例规则

 iptables -t nat -A PREROUTING -i xenbr0 -p tcp --dport 64000:65000 -j DNAT --to 172.16.10.10:61000-62000 

没有产出,表明成功。 我正在运行内核3.16.0-4-amd64

通过iptables -t nat -vnL PREROUTING检查NAT规则,我看到规则被列出…

 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目标的更多信息可以在这里find。

希望这可以帮助。