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

2014-08-11 00:16:21 +08:00
 suifengdaren
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接口的应该,增加安全性。
11764 次点击
所在节点    Linux
28 条回复
xi4oh4o
2014-08-11 09:55:22 +08:00
ssh -nNTf -D
hellojinjie
2014-08-11 09:57:22 +08:00
good 不错,鼓励一下
usedname
2014-08-11 09:59:48 +08:00
ssh流量过大会被掐断链接的,这个真的不适合翻墙
21grams
2014-08-11 10:02:07 +08:00
实现不明白楼主发这一篇的意义何在,这不是浪费大家的时间吗?
geeti
2014-08-11 12:46:17 +08:00
我觉得这是会点网络知识的基础
skyworker
2014-08-11 12:48:26 +08:00
我能说 现在用ssh隧道,会加速IP被封吗?
heganj
2014-08-12 12:31:01 +08:00
laoisaudi
2014-08-12 16:24:37 +08:00
good

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/127124

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX