如何对 GNS3 服务器进行端口转发(SSH 隧道)?

如何对 GNS3 服务器进行端口转发(SSH 隧道)?

我有一台 GNS3 服务器,我正在尝试添加 iptable 规则,这样当我团队中的某个人连接到端口 1100 时,他们就会被路由到内部 IP,例如 192.168.122.2:22。此内部 IP 属于 GNS3 项目的堡垒主机。最终目标是能够从本地计算机访问内部 IP 地址。

我的 IPTABLE 如下所示(为了举例,使用虚假的公网 IP 1.2.3.4):

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    DNAT       tcp  --  0.0.0.0/0            1.2.3.4       tcp dpt:1100 to:192.168.122.2:22

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    MASQUERADE  all  --  0.0.0.0/0            0.0.0.0/0          

Chain DOCKER (0 references)
num  target     prot opt source               destination         

Chain LIBVIRT_PRT (0 references)
num  target     prot opt source               destination

我从本地机器执行命令。Ubuntu 是访问 GNS3 项目内部 IP 所需的用户名。ssh [email protected] -p1100

执行此命令后,我在 GNS3 服务器(1.2.3.4)上得到以下输出: cloud@gns3:~$ connect_to 192.168.122.2 port 1100: failed.

似乎我的 SSH 命令正在到达 GNS3 服务器,并尝试进行端口转发。但是,出于某种原因,它试图转发到端口 1100 而不是 22?有人能找出原因吗?

这是我迄今为止尝试过的:

  1. 将 ipv4 端口转发设置为 1
  2. 将 GatewayPorts 和 AllowTcpForwarding 设置为 1
  3. 在本地机器上运行(我认为这改变了服务器上的一些配置) -ssh -R 1.2.3.4:1100:192.168.122.2:22 [email protected]
  4. 使用命令向 IPtables 添加规则sudo iptables --table nat --append PREROUTING --protocol tcp --destination 1.2.3.4 --dport 1100 --jump DNAT --to-destination 192.168.122.2:22
  5. 还添加了伪装:sudo /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE

答案1

根据此来源,不应使用 DNAT,而应使用 REDIRECT:

https://fabianlee.org/2018/09/17/iptables-running-service-as-non-root-iptables-to-forward-from-privileged-port/

所以:

sudo iptables --table nat --append PREROUTING --protocol tcp --destination 1.2.3.4 --dport 1100 --jump REDIRECT --to-destination 192.168.122.2:22

相关内容