SSH隧道端口转发

时间:2020-04-23 15:56:52

标签: linux networking ssh tunnel

我具有以下计算机的网络配置:我正在使用计算机A,并且可以通过ssh到达计算机B。机器B可以通过ssh到达其他内部机器。我也想达到这些目标。我可以将端口转发到我的机器吗?

我的目标是像往常一样在端口22上的所有计算机上以及在端口22上连接到B的所有内部计算机上使用ssh。

如何在Linux中做到这一点?

1 个答案:

答案 0 :(得分:2)

基本上有两种方法可以做到:

  1. 何时可以利用环回保留端口号 界面和多个IP地址
  2. 当您使用一些直观的方法(适合您)重新映射此类端口时 方案。

例如,在远程网络上有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

并通过URL http://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

,并且在浏览器中使用http://l-node3/http://127.77.77.3之类的URL