Deep BlueVBScriptWMIPHPC语言JavaScriptWindows API路由器Windows函数Python

OpenWrt SSH远程端口转发

在写《外网SSH远程访问OpenWrt》的时候参考了一些文章,里面都提到要把“Allow remote hosts to connect to local SSH forwarded ports”选项勾上,但是后来通过实际测试以后发现,这个选项根本无关紧要,只要在防火墙中开放22端口就可以了。

那么“Allow remote hosts to connect to local SSH forwarded ports”是用来做什么的呢?答案是SSH远程端口转发(SSH Remote port forwarding)。

相信很多人都用过SSH隧道来科学上网(番羽土啬),其原理就是SSH动态端口转发(SSH Dynamic port forwarding),而远程端口转发是SSH隧道的另外一个应用。

SSH远程端口转发能用来做什么?简单来说就是可以让第三方主机通过SSH服务端主机来连接SSH客户端主机,即服务端充当两者之间的“隧道”。这样解释看起来有点抽象,举个例子来说,假设我在单位有一台电脑A开启了远程桌面,我想在家里的电脑B远程连接到电脑A,但是由于在电脑A在单位的局域网内部,没有公网IP,而且我不是网管,没有权限在单位的出口路由器上面做端口转发,所以无法用电脑B直接连接电脑A。但是我可以在一台有公网IP的OpenWrt路由器上面做SSH远程端口转发,通过SSH隧道连接电脑A。

首先在OpenWrt上面开启“Allow remote hosts to connect to local SSH forwarded ports”,并且假设域名openwrt.demon.tw已经通过动态域名解析指向路由器的IP地址,没有域名的话也可以直接使用IP地址。

在电脑A上面连接OpenWrt路由器并开启SSH远程端口转发:

ssh -R *:3389:localhost:3389 root@openwrt.demon.tw

这句命令的意思是在SSH服务端(即OpenWrt路由器)上监听3389端口并转发到localhost(即电脑A)的3389端口,星号表示监听所有的IP。

这时候在OpenWrt路由器可以看到已经开始监听3389端口了:

root@OpenWrt:~# netstat -nl | grep 3389
tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN
tcp        0      0 :::3389                 :::*                    LISTEN

记得在OpenWrt路由器的防火墙上打开3389端口,否则无法连接。然后在电脑B上面打开远程桌面连接,输入openwrt.demon.tw或者OpenWrt路由器的IP地址即可远程连接到电脑A。


http://ken.gw.to/