【问题标题】:SSH tunnel Port forwarding [closed]SSH隧道端口转发[关闭]
【发布时间】:2026-02-19 03:55:01
【问题描述】:

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

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

如何在 Linux 中做到这一点?

【问题讨论】:

    标签: linux networking ssh tunnel


    【解决方案1】:

    基本上有两种方法:

    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
    

    通过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 之类的网址

    【讨论】: