用啥Ngrok,用SSH解决大局域网反向端口转发问题

自从家里换了联通光纤后,联通就在我家宽带出口前搭了一个路由器,我家也彻底沦为192.168.1.0/24段的局域网了,带来的问题就是在外网无法访问家里的路由器。这对于刷了LEDE,有时候需要从外网直接管理使用路由器的我,觉得难受极了。周末有空,干脆解决这个问题。

在这之前,了解过一个ngrok项目,用于将局域网内的某一个地址的端口,映射到公网。但是研究了一下该软件,发现其在LEDE的源中,并不包含,我又是个懒的去编译的程序员,因此想看看有没有其他办法。

研究一下,发现其实程序员必备的SSH就有这个功能。SSH一共支持三种端口转发:

1、本地端口转发:就是客户端方的某个端口和服务器某个端口相连,这样访问客户端该端口,就相当于访问服务器端某个端口

2、远程端口转发:还是把客户端方的某个端口和服务器某个端口相连,只不过反向的,访问服务器端某个端口,就相当于访问到了客户端该端口

3、动态转发:SOCKS5代理模式,不多说了

更具体一些,可以参见这篇文章: https://blog.twofei.com/528/

回到我的需求,我是希望访问VPS的某个端口,就相当于访问路由器的指定端口。比如我访问VPS的2222,就相当于访问路由器的22端口。所以是第二种:远程端口转发

SSH做起来非常简单,首先,修改VPS端 /etc/ssh/sshd_config加入 GatewayPorts yes。据说,不这样外网无法访问转发的端口,未验证。然后路由器一条命令搞定: 

  ssh -f -NR "*:2222:localhost:22" [email protected]  

这样子,访问VPS的2222端口,就直接访问到了路由器

进化一:持久

用ssh命令有个问题,因为各种因素,它可能会莫名挂掉,网络不好啦,网络干扰啦,网络xxx啦,总归都是网络问题。因此,我们得祭出神奇 autossh。在LEDE的包中,默认就有,安装之,爱死LEDE。在这之前,自己搞定SSH的密钥登录哦,否则autossh起来,也会卡在输入密码。 autossh在LEDE的配置文件是 /etc/config/autossh,配置一下 

  config autossh 'ssh'  
    option gatetime '0'
    option monitorport '20000'
    option poll '600'
    option ssh '-p 22 -NR *:2222:localhost:22 [email protected]'

然后开启autossh

进化二:隐藏

在我家的运营商,我发现了一个问题,如果你ssh启动一段时间后,到目的地址的网络丢包就开始大量出现。思来想去,把ssh塞到ssr-tunnel中不就完事了。

先建立一个到VPS的22端口的ssr-tunnel隧道

  ssr-tunnel -c /var/etc/shadowsocksr.json -l 2222 -L VPS:22 -f /tmp/ssr-tunnel.pid >> /tmp/ssr-tunnel.log  

这样,访问本机的2222端口,就相当于走ssr流量访问远端的22端口。把autossh的配置稍微改一下,让其访问本机2222端口

  config autossh 'ssh'  
    option gatetime '0'
    option monitorport '20000'
    option poll '600'
    option ssh '-p 2222 -NR *:2222:localhost:22 [email protected]'

为了让ssr-tunnel隧道保持运行,需要搞个监控。不需要很复杂,放到crontab里就可以了

  ps | grep [s]sr-tunnel || `ssr-tunnel -c /var/etc/shadowsocksr.json -l 2222 -L vps:22 -f /tmp/ssr-tunnel.pid >> /tmp/ssr-tunnel.log`  

进化三:多射

映射了第一个端口,你就想再来一个。什么aria2映射出来,就可以做外网离线下载。其实也蛮简单的,因为autossh支持多端口映射

  config autossh 'ssh'  
    option gatetime '0'
    option monitorport '20000'
    option poll '600'
    option ssh '-p 2222 -NR *:2222:localhost:22 -NR *:6800:localhost:6800 [email protected]'

这样就把aria2的6800也映射出来了

就这样,结束了

转载请注明出处: https://story.tonylee.name/2017/07/27/yong-sha-ngrok-yong-sshjie-jue-da-ju-yu-wang-fan-xiang-duan-kou-zhuan-fa-wen-ti/

*本文作者:Tony Lee,转载请注明FreeBuf.COM

你可能感兴趣的:(网络安全,ssh,局域网,端口转发)