SSH 端口转发给我看迷糊了 - V2EX
zxCoder
V2EX    SSH

SSH 端口转发给我看迷糊了

  •  
  •   zxCoder Feb 3, 2022 2718 views
    This topic created in 1560 days ago, the information mentioned may be changed or developed.

    本地转发和远程转发

    本地转发相当于就是访问LOCAL_IP:LOCAL_PORT就变成访问DESTINATION:DESTINATION_PORT

    ssh -L [LOCAL_IP:]LOCAL_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER 

    远程转发相当于访问REMOTE:REMOTE_PORT就变成访问DESTINATION:DESTINATION_PORT

    ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER 

    这样理解对吗?

    有点不太理解是远程转发的REMOTE指的是哪个?是 ssh client 所在机器吗?

    然后本地转发的时候,SSH_SERVER也可以就是DESTINATION,而远程转发的时候,REMOTE也可以就是DESTINATION

    13 replies    2023-05-10 12:20:46 +08:00
    muzuiget
        1
    muzuiget  
       Feb 3, 2022   1
    假设你的机器叫 A ,你的服务器叫 S ,你的朋友机器叫 B 。

    ssh -L 帮助 A 通过 S 访问 B 。
    ssh -R 帮助 B 通过 S 访问 A 。
    ssh -D 动态版的 ssh -L
    Kinnice
        2
    Kinnice  
       Feb 3, 2022 via Android
    看迷糊了?
    手动操作一下,一次就明白了
    jfdnet
        3
    jfdnet  
       Feb 3, 2022
    拿第一条命令解释一下,应用场景基本上是:
    LOCAL 和 DESTINATION 无法互相连通,但是它们都能连接 SSH_SERVER
    这个命令就是通过 SSH_SERVER 做为隧道,把 LOCAL 的指定端口跟 DESTINATION 的指定端口绑定起来。
    zxCoder
        4
    zxCoder  
    OP
       Feb 3, 2022
    @muzuiget

    请问 ssh 远程转发,命令也是在 A 机器执行的吗?
    然后 ssh -R 中的 REMOTE 是 B 机器 ip ,DEST 是 A 机器 ip 吗?
    sfqtsh
        5
    sfqtsh  
       Feb 4, 2022 via Android
    ssh -L 是让你的 ssh client 进程额外 [监听] LOCAL_PORT 端口。访问 ssh client 所在机器的 LOCAL_PORT 端口的请求数据将由 ssh client 进程流转给 SSH_SERVER 上对应的 sshd 进程,
    sshd 进程再转给指定的 DESTINATION:DESTINATION_PORT 。
    ------ 适用场景为:ssh client 所处网络环境无法直连到 DESTINATION ,但其能 ssh 通的 SSH_SERVER 能访问到 DESTINATION
    sfqtsh
        6
    sfqtsh  
       Feb 4, 2022 via Android
    ssh -R 是让连上的 SSH_SERVER 上对应的 sshd 进程进程额外 [监听] REMOTE_PORT 端口。访问 SSH_SERVER 机器的 REMOTE_PORT 端口的请求数据将由 sshd 进程流转给 ssh client 进程,
    ssh client 进程再转给指定的 DESTINATION:DESTINATION_PORT 。
    ------ 适用场景为:SSH_SERVER 所处网络环境无法直连到 DESTINATION ,但已被 ssh 通的 ssh client 访问到 DESTINATION
    sfqtsh
        7
    sfqtsh  
       Feb 4, 2022 via Android
    这里讲的 [监听] 端口你可以用 netstat 命令 分别到 ssh client 机器 和 ssh server 机器上测试和查看。监听地址可以是 127.0.0.1 或 0.0.0.0 或某个网卡的固定地址,默认 localhost ,这也是[LOCAL_IP:]和[REMOTE_IP:]可以省略的原因。
    seanzxx
        8
    seanzxx  
       Feb 4, 2022
    简单的说,L 和 R 的相对的功能,
    L: 访问 localhost 转发访问 remote
    R: 访问 remote 转发访问 localhost
    iqfEmhuNidBhDfWo
        10
    iqfEmhuNidBhDfWo  
       Apr 5, 2022
    你只要区分“入口”和“落点”就行了,不要看啥“remote”和“local”,那只会越看越昏头。

    PS:贵站敏感词太他妈多了,写了一堆发不出来。。。
    iqfEmhuNidBhDfWo
        11
    iqfEmhuNidBhDfWo  
       Apr 5, 2022
    @ukss 转发规则的前 2 域是入口,后 2 域是落点,记住这一点你再也不会晕。
    lthon
        12
    lthon  
       May 10, 2023
    说一下自己的理解,并回答 OP 的两个问题。

    在讨论转发 /代理类似主题时,需要先理清参与角色。这里有三个角色:
    1. 本地主机,执行 ssh -L / -R ;
    2. 远程主机,ssh 命令连接到的主机;
    3. 目的主机,要转发到的主机;

    第一个问题,远程转发的 REMOTE 指的是哪个?

    贴一下 man 信息(机翻,并删除套接字相关描述):
    ssh -R [bind_address:]port:host:hostport [user@]hostname
    指定将与远程(服务器)主机上给定的 TCP 端口的连接转发到本地端的给定主机的端口 (host:hostport)。这是通过分配一个在远程一侧监听 TCP 端口 (port) 来实现的。每当有连接到达该端口时,SSH 将通过安全隧道转发该连接,并从本地主机向 host 端口 hostport 发起连接。
    默认情况下,服务器上的 TCP 监听端口仅绑定到回环接口。可以通过指定 bind_address 来覆盖此设置。

    回到 OP 的命令,
    ssh -R [REMOTE:]REMOTE_PORT:DESTINATION:DESTINATION_PORT [USER@]SSH_SERVER
    其中,SSH_SERVER 就是远程主机,[REMOTE:]REMOTE_PORT 就是远程主机监听的端口及其绑定的接口地址,所以 REMOTE = SSH_SERVER = 远程主机。

    第二个问题,本地转发的时候,SSH_SERVER 也可以就是 DESTINATION ,而远程转发的时候,REMOTE 也可以就是 DESTINATION ?

    本地转发的时候,远程主机充当代理,远程主机可以是目的主机;
    远程转发的时候,本地主机充当代理,本地主机可以是目的主机;
    这个可以看看 https://unix.stackexchange.com/a/115906 ,有非常漂亮的图解
    lthon
        13
    lthon  
       May 10, 2023
    本地转发,流量:本地主机 -> 远程主机 -> 目的主机;
    远程转发,流量:远程主机 -> 本地主机 -> 目的主机;
    About     Help     Advertise     Blog     API     FAQ     Solana     998 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 46ms UTC 22:22 PVG 06:22 LAX 15:22 JFK 18:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86