标题: OpenWrt SSH远程端口转发
作者: Demon
链接: https://demon.tw/hardware/openwrt-ssh-remote-port-forwarding.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
在写《外网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。
赞赏微信赞赏支付宝赞赏
随机文章:
这个方法还是有局限性的,前提条件是单位电脑A连接openwrt路由器,并且这个路由器还必须连接有公网ip的网络。问题就是,既然电脑A在公司局域网内,那么怎么可能再连接有公网ip的网络呢?这是个理想的解决方案。