【发布时间】:2026-02-19 03:55:01
【问题描述】:
我有以下机器的网络配置:我正在使用机器 A,并且可以通过 ssh 访问机器 B。机器 B 可以通过 ssh 访问更多的内部机器。我也想接触那些。我可以将端口转发到我的机器吗?
我的目标是像往常一样在我的机器上使用 ssh 访问端口 22 上的所有机器,以及端口 22 上连接到 B 的所有内部机器。
如何在 Linux 中做到这一点?
【问题讨论】:
标签: linux networking ssh tunnel
我有以下机器的网络配置:我正在使用机器 A,并且可以通过 ssh 访问机器 B。机器 B 可以通过 ssh 访问更多的内部机器。我也想接触那些。我可以将端口转发到我的机器吗?
我的目标是像往常一样在我的机器上使用 ssh 访问端口 22 上的所有机器,以及端口 22 上连接到 B 的所有内部机器。
如何在 Linux 中做到这一点?
【问题讨论】:
标签: linux networking ssh tunnel
基本上有两种方法:
例如,远程网络上有 5 个节点在该网络之外不可见。 因此,您可以将所有这些 ssh 端口映射到您的节点,如 22001、22002、22003、22004 和 22004。
通过这种方式,您可以轻松映射远程网络(如 192.168.0.0)中所有 255 台设备的 ssh 端口
当您尝试以这种方式为每个设备映射 3-4 个端口时,尤其是当端口号高于 65 时,这种编号会变得很糟糕:-)
例如,您可以按照以下方式映射 5 个神话节点的 22 和 80 端口:
ssh me@server \
-L 22001:node1:22 -L 8001:node1:80 \
-L 22002:node2:22 -L 8002:node2:80 \
-L 22003:node3:22 -L 8003:node3:80 \
-L 22004:node4:22 -L 8004:node4:80 \
-L 22005:node5:22 -L 8005:node5:80
这样您就可以通过以下方式从您的节点连接到 node1:
ssh me2@localhost -p 22001
通过URLhttp://localhost:8001/访问node1的http端口
您还可以通过更改 /etc/hosts 和 ~/.ssh/config 文件来补充此类 Tunel,让生活更轻松:
#/etc/hosts
127.0.0.1 node1 node2 node3 node4 node5
#~/.ssh/config
Host node1
Port 22001
Host node2
Port 22002
Host node3
Port 22003
Host node4
Port 22004
那么你可以通过这种方式 ssh 进入 node1:
ssh me2@node1
这种方法在远程节点和要映射的端口很少的情况下还可以,但是当您拥有更大的设备群时,它会变得像噩梦一样。
在我看来,更好的方法是将远程节点的端口映射到相同的端口号,但映射到与您的节点关联的本地 IP 地址。 因此,您正在为环回接口分配 5 个新地址:
sudo ip addr add 127.77.77.1/8 dev lo label lo:1
sudo ip addr add 127.77.77.2/8 dev lo label lo:2
sudo ip addr add 127.77.77.3/8 dev lo label lo:3
sudo ip addr add 127.77.77.4/8 dev lo label lo:4
sudo ip addr add 127.77.77.5/8 dev lo label lo:5
用 dns 覆盖来补充这样的配置
# /etc/hosts
127.77.77.1 l-node1
127.77.77.2 l-node2
127.77.77.3 l-node3
127.77.77.4 l-node4
127.77.77.5 l-node5
然后您创建 ssh 隧道以将远程端口映射到相同的端口号。
# here r-node# names are IP addresses of remote nodes as server sees them
ssh me@server \
-L l-node1:22:r-node1:22 -L l-node1:80:r-node1:80 \
-L l-node1:22:r-node2:22 -L l-node2:80:r-node2:80 \
-L l-node1:22:r-node3:22 -L l-node3:80:r-node3:80 \
-L l-node1:22:r-node4:22 -L l-node4:80:r-node4:80 \
-L l-node1:22:r-node5:22 -L l-node5:80:r-node5:80
一旦建立了这样的隧道,您就可以通过 ssh 访问 node3:
ssh me2@l-node3
#or
ssh me2@127.77.77.3
在浏览器中使用http://l-node3/ 或http://127.77.77.3 之类的网址
【讨论】: