具有 Iptables 的不同内部端口范围的 DNAT 端口范围

Lor*_*enz 8 linux nat iptables linux-networking

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

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 是否可能?

小智 12

要回答你的问题,是的

我在我的 Debian 机器上运行了一个示例规则......

iptables -t nat -A PREROUTING -i xenbr0 -p tcp --dport 64000:65000 -j DNAT --to 172.16.10.10:61000-62000
Run Code Online (Sandbox Code Playgroud)

...没有产生任何输出,表明成功。我正在运行 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
Run Code Online (Sandbox Code Playgroud)

MadHatter 是正确的,您不需要-m multiport端口范围,只需要逗号分隔的端口列表。该:是必要的,以指定端口范围--dport选择,而是一种-需要,才能在指定端口范围DNAT的目标。

我不能说这条规则在实践中的效果如何,但理论上它应该可以实现你的目标。

DNAT可以在此处找到有关目标的更多信息。

希望这可以帮助。