Networking

如何為 GNS3 伺服器進行埠轉發(SSH 隧道)?

  • August 17, 2021

我有一個 GNS3 伺服器,我正在嘗試添加 iptable 規則,以便當我團隊中的某個人在埠 1100 上連接時,他們會被路由到內部 IP,例如 192.168.122.2:22。此內部 IP 屬於 GNS3 項目的堡壘主機。最終目標是能夠從本地機器 shh 進入內部 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

在我的本地機器上,我執行命令ssh ubunut@1.2.3.4 -p1100。Ubuntu 是訪問 GNS3 項目內部 IP 所需的使用者名。

執行此命令後,我在 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 cloud@1.2.3.4
  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

而不是使用 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

引用自:https://serverfault.com/questions/1074499