
我有一個 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?誰能確定為什麼嗎?
這是我迄今為止嘗試過的:
- 將 ipv4 連接埠轉送設定為 1
- 將 GatewayPorts 和 AllowTcpForwarding 設定為 1
- 在本地計算機上運行(我認為這更改了伺服器上的一些配置)-
ssh -R 1.2.3.4:1100:192.168.122.2:22 [email protected]
- 使用命令向 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
- 還添加了偽裝:
sudo /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
答案1
根據以下來源,不應使用 DNAT,而應進行 REDIRECT:
所以:
sudo iptables --table nat --append PREROUTING --protocol tcp --destination 1.2.3.4 --dport 1100 --jump REDIRECT --to-destination 192.168.122.2:22