将一个端口范围映射到另一个端口范围(范围长度相等)

将一个端口范围映射到另一个端口范围(范围长度相等)

在这个答案中,如何使用 (g)ufw 在 ubuntu 中打开一系列端口,给出了打开一系列端口的简单命令。

例如,使用此命令我可以非常轻松地为本地机器上的防火墙打开端口 1000-1999。

但是,现在我想在本地机器上设置端口转发,以便:

  • 端口 1001 转发到端口 1
  • 端口 1002 转发到端口 2
  • 端口 1003 转发到端口 3
  • ... ETC
  • -

有人有一个简单的 bash 脚本可以做到这一点吗?

我必须为本地网络上的多台机器执行此操作。路由器的限制使这变得比实际更困难。

因此,对于机器 A,路由器上的端口 1000-1999 将打开以链接到机器 A。在机器 A 上,它们将被转发到传统端口。对于机器 B,将使用路由器上的端口 2000-2999(本地映射到适当的端口)。等等

答案1

[大部分内容来自互联网]

启用 IP 转发:

sysctl net.ipv4.ip_forward=1

使用“nat”表转发流量:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination X.X.X.X:80

不要忘记 HTTPS:

iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination X.X.X.X:443

要求 iptables 进行伪装:

 iptables -t nat -A POSTROUTING -j MASQUERADE

....如果您希望对某个范围内的每个端口都进行此操作,我建议做类似的事情:

 #!/bin/bash
 y=0;  //first port to map to = 1, but y++ happens before mapping, so 0
 for i in {2000..2999}
    do
       ((y++));  
       echo "forwarding port $i to port $y";
       iptables -t nat -A PREROUTING -p tcp --dport $i -j DNAT --to-destination X.X.X.X:$y;
 done

笔记:

  • 系统端口 1-1000 是保留的,因此上述脚本不是一个好主意;)
  • 当然,用 localhost 或任何你想要 na-forward 的地方替换 XXXX

相关内容