SSH 隧道端口转发

SSH tunnel Port forwarding

我有以下机器网络配置:我正在使用机器 A,可以通过 ssh 访问机器 B。机器 B 可以通过 ssh 访问更多内部机器。我也想达到那些。我可以将端口转发到我的机器吗?

我的目标是像往常一样在我的机器上的端口 22 上使用 ssh 访问所有机器,并在端口 22 上访问所有连接到 B 的内部机器。

我如何在 Linux 中做到这一点?

基本上有两种方法:

  1. 当您能够利用环回保留端口号时 接口和多个 IP 地址
  2. 当你使用一些直观的(对你来说)重新映射这些端口时 方案。

例如,远程网络上有 5 个节点在该网络之外是不可见的。 因此,您可以将所有这些 ssh 端口映射到您的节点,如 22001、22002、22003、22004 和 22004。

这样您就可以轻松映射远程网络中所有 255 台设备的 ssh 端口,例如 192.168.0.0

当您尝试以这种方式为每个设备映射 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 文件来补充此类隧道让生活更轻松:

#/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

并在浏览器中使用 URLs,例如 http://l-node3/ or http://127.77.77.3