SSH 隧道与端口转发(v2ex 首发) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
suifengdaren
V2EX    Linux

SSH 隧道与端口转发(v2ex 首发)

  •  1
     
  •   suifengdaren
    gitrepo 2014-08-11 00:16:21 +08:00 12251 次点击
    这是一个创建于 4103 天前的主题,其中的信息可能已经有所发展或是发生改变。
    SSH隧道与端口转发

    转载让注明出外。

    SSH端口转发(Port Forwarding),是一种隧道技术,流往某端口的数据被加密后传向另一机器,依据转发方式的不同,有多种应用场景。

    1.本地端口转发

    ssh -L localhost:localport:remotehost:remoteport user@ssh-server

    将本地机器上的某个端口转发到远程机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 localport 端口, 一旦这个端口上有了连接, 该连接就经过ssh的安全通道转发出去, 同时ssh服务器和 remotehost的 remoteport 端口建立连接.

    动画图例:
    http://suifengdaren.qiniudn.com/ssh-L.gif

    2.远程端口转发

    ssh -R remotehost:remoteport:host:hostport user@ssh-sever

    将ssh服务器的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, ssh服务器上分配了一个 socket 侦听 remoteport 端口, 一旦这个端口上有了连接, 该连接就经过ssh安全通道转发出去, 同时本地主机和 host 的 hostport 端口建立连接. (此时本地端的host可以是localhost也可以是本地端可以访问的其它主机)

    动画图例:
    http://suifengdaren.qiniudn.com/ssh-R.gif

    3.动态端口转发
    ssh -D localport user@ssh-server
    工作原理是这样的, 本地机器上分配了一个 socket 侦听 localport 端口, 一旦这个端口上有了连接, 该连接就经过ssh安全通道转发出去, ssh服务器根据你本地地器程序访问的远程主机和端口进行转发出去. 目前支持 SOCKS协议, 将充当 SOCKS 服务器.(其实和-L参数原理差不多,只不过-L只能静态指定一个或者多个远程主机和端口,-D参数可以动态处理,不用人为事先指定,一般用来充当廉价vpn)

    动画图例:
    http://suifengdaren.qiniudn.com/ssh-D.gif

    PS:
    ssh一般在做隧道与端口转发时,一般还有其它参数配合。

    -f ssh在后台运行,即认证之后,ssh退居后台

    -T 不要分配tty终端

    -N 不要在服务器执行命令

    -C 压缩数据包

    -i 指定认证密钥文件

    -n 将 stdio 重定向到 /dev/null,与-f配合使用

    -p 指定连接端口

    -X Enables X11 forwarding.

    -q 安静模式

    4.使用实例
    4.1.本地端口转发
    Q:如果你访问不了www.twitter.com里,但是你有一台vps服务器,这台服务器可以访问到到twitter,你将如何处理呢?
    A:通过ssh隧道技术,你可以让你的vps服务器在你的本地机子和twitter.com中间打通一条隧道,让你访问到twitter.com.方法如下:
    ssh -f -N -n -T -C -L localhost:8080:www.twitter.com:80 user@vps

    4.2.远程端口转发
    Q:如果你是一名程序员,你开发的程序运行在80端口,但是可恶的运营商封闭你的80端口,或者你在一台路由器后面,而你没权限来管理路由器来做端口映射,之类的问题很多。但是你有一台在公网上的vps并且你可以访问得到这台vps,你装如何让外面的人访问到你本机的80端口呢?
    A:通过ssh隧道技术,你可以让你的vps服务器和你本机和打通一条隧道,让外面的人访问到vps上的端口再转发到你的本机端口,方法如下:
    ssh -f -N -n -T -C -R *:8080:localhost:80 user@vps

    4.3.动态端口转发
    Q:如果你注意到本地端口转发的例子,你心里就会有个疑问,如果我还要访问facebook,访问youtube这些都不存大的网站,那是不是要一条一条去写进去呢?
    A:ssh提供了动态端口转发就是给这种访问目标没有事先明确使用的,方法如下。
    ssh -f -N -n -T -C -D 8080


    PS:正常的情况下,远程的vps上的phpmyadmin只应该在远程的localhost监听(或者其它一些应用),这时候你应该使用本地端口转发,通过访问本地的一个端口去访问到远程vps上只监听远程机子localhost接口的应该,增加安全性。
    第 1 条附言    2014-08-11 00:54:52 +08:00
    远程转发的端口默认也只能在远程服务器本机上访问,要想允许外部访问,可改写为 -R *:8080:localhost:80 user@vps,并确保在服务器的sshd_config中打开了GatewayPorts选项。(GatewayPorts yes)

    同时本地转发 ssh -f -N -n -T -C -L localhost:8080:www.twitter.com:80 user@vps
    的localhost:8080可以直接写成 -L 8080:www.twitter.com:80。

    远程转发 ssh -f -N -n -T -C -R *:8080:localhost:80 user@vps
    的*:8080可以直接写成 -R 8080:localhost:80。(这时候只能远程本机访问这个8080端口)
    28 条回复    2014-08-12 16:24:37 +08:00
    jerryjhou
        1
    jerryjhou  
       2014-08-11 00:25:20 +08:00
    解释得很详细,但是,你这是给谁看的?
    sdysj
        2
    sdysj  
       2014-08-11 00:35:18 +08:00
    老古董还首发,穿越了么?
    suifengdaren
        3
    suifengdaren  
    OP
       2014-08-11 00:39:47 +08:00
    远程转发的端口默认也只能在远程服务器本机上访问,要想允许外部访问,可改写为 -R *:8080:localhost:80 user@vps,并确保在服务器的sshd_config中打开了GatewayPorts选项。(GatewayPorts yes)

    同时本地转发 ssh -f -N -n -T -C -L localhost:8080:www.twitter.com:80 user@vps
    的localhost:8080可以直接写成 -L 8080:www.twitter.com:80

    远程转发 ssh -f -N -n -T -C -R *:8080:localhost:80 user@vps
    的*:8080可以直接写成 -R 8080:localhost:80。(这时候只能远程本要访问这个8080端口)
    suifengdaren
        4
    suifengdaren  
    OP
       2014-08-11 00:52:30 +08:00
    @sdysj 首发的意思,是这篇文章的第一次是发布在v2ex,ssh隧道技术是很久的技术没错,但并不代表每个人都清楚使用和用法,你懂并不代表别人也懂。
    freetg
        5
    freetg  
       2014-08-11 00:57:55 +08:00
    现在ssh翻墙经常被断
    binux
        6
    binux  
       2014-08-11 01:02:47 +08:00
    好荣幸能在V2EX上看到首发
    jings
        7
    jings  
       2014-08-11 01:03:36 +08:00 via Android
    ssh隧道的确不简单 不过发在V2这种一流穿墙社区就只能被当小白了
    Tink
        8
    Tink  
    PRO
       2014-08-11 01:07:17 +08:00 via iPhone
    以前那会这么弄,现在早不行了
    XadillaX
        9
    XadillaX  
       2014-08-11 01:30:36 +08:00 via Android
    http://v2ex.com/t/117606#reply16

    之前做的很水的一个东西,没时间维护,有兴趣的可以 fork 贡献一下哈。
    WangYan
        10
    WangYan  
       2014-08-11 01:38:43 +08:00
    被标题进来了,不过楼主撸了那么多字也算有心了。
    O21
        11
    O21  
       2014-08-11 02:08:34 +08:00
    实在想用ssh 加密不就好了。。
    RIcter
        12
    RIcter  
       2014-08-11 02:11:29 +08:00 via iPad
    @binux 嘲讽技能max XD
    jprovim
        13
    jprovim  
       2014-08-11 05:25:42 +08:00
    man ssh
    goodxxx
        14
    goodxxx  
       2014-08-11 07:06:09 +08:00 via Android
    楼主gif用什么做的,不错。
    wuwuyun
        15
    wuwuyun  
       2014-08-11 07:32:41 +08:00
    做做内网穿透不错 用来翻墙效率和可用性都是问题
    Perry87
        16
    Perry87  
       2014-08-11 07:55:38 +08:00
    楼主用心了,加油。
    mengzhuo
        17
    mengzhuo  
       2014-08-11 08:44:24 +08:00
    欢迎LZ来到unix世界~
    只有想不到,没有做不到
    Ellison
        18
    Ellison  
       2014-08-11 09:07:50 +08:00
    被标题进来,嗯,楼主头像不错...
    Aether
        19
    Aether  
       2014-08-11 09:49:11 +08:00
    嗯。。。我想V2EX的风格之一是包容的,为了达到这一目的,我认为有必要让楼主了解这个真实的世界。。。

    这篇文章如果早个七八年发布还是很时新的。现在么,其实一搜之下到处都是。。。

    话说我最开始接触SSH还真是那时从LIVID的blog开始的。。。
    hexor
        20
    hexor  
       2014-08-11 09:50:14 +08:00
    翻译的不错 加油
    xi4oh4o
        21
    xi4oh4o  
       2014-08-11 09:55:22 +08:00
    ssh -nNTf -D
    hellojinjie
        22
    hellojinjie  
       2014-08-11 09:57:22 +08:00
    good 不错,鼓励一下
    usedname
        23
    usedname  
       2014-08-11 09:59:48 +08:00
    ssh流量过大会被掐断链接的,这个真的不适合翻墙
    21grams
        24
    21grams  
       2014-08-11 10:02:07 +08:00
    实现不明白楼主发这一篇的意义何在,这不是浪费大家的时间吗?
    geeti
        25
    geeti  
       2014-08-11 12:46:17 +08:00 via iPad
    我觉得这是会点网络知识的基础
    skyworker
        26
    skyworker  
       2014-08-11 12:48:26 +08:00
    我能说 现在用ssh隧道,会加速IP被封吗?
    heganj
        27
    heganj  
       2014-08-12 12:31:01 +08:00
    laoisaudi
        28
    laoisaudi  
       2014-08-12 16:24:37 +08:00
    good
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3006 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 13:35 PVG 21:35 LAX 05:35 JFK 08:35
    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