概述
起因是想要在家里或者使用流量能够访问校园网抢课以及其他操作,路由器刷的华硕固件,正好有搭建 ss 服务器的功能。
百度一下大概的实现方式,大多都是采用 ngrok 或者花生壳内网穿透的方式,实际测试了一下,ngrok 免费的服务很难连接上且不稳定。花生壳直接是付费服务。自己搭建 ngrok 又需要一个域名。
结合专业知识,只需要将 ss 服务的端口转发到公网上就可以了,所以最终采用了 ssh端口转发+ss-server 的方式,不得不推一下,ssh端口转发真的很方便快捷 ?
ssh端口转发
ssh -NfR port_on_your_vps:192.168.123.1:80 username@*.*.*.*
-R 远程转发
-N ssh连接之后不执行命令
-f 验证密码之后再后台运行
这个有个坑点,在默认没有进行设置的情况下直接转发,在 vps 上反向代理的 lookup 的 ip 即 127.0.0.1,并不是公网 ip,在姜哥的指点下了解了这个点。
解决方法:
首先 ssh 登录到公网主机,修改 sshd 的配置文件 /etc/ssh/sshd_config
,加入如下选项
GatewayPorts yes
然后重启 ssh 服务,service sshd restart
可以参照:http://www.netcan666.com/2016/09/28/ssh隧道反向代理实现内网到公网端口转发/
每次登陆都需要设置密码太麻烦,设置免密登录
华硕固件中 ssh 服务采用的 Dropbear,没有 ssh-keygen,可用 dropbearkey 替代
dropbearkey -t rsa -f .ssh/id_dropbear_rsa | grep "ssh-rsa" > .ssh/id_dropbear_rsa.pub
生成公私匙,将公匙 id_dropbear_rsa.pub 上传到 vps,具体可以参照
https://my.oschina.net/u/2306127/blog/3027225
最后写了个脚本,然后设置了定时执行,舒服了。-i
参数指定的是 ssh 的私匙,这个要注意
#!/bin/sh
#copyright by Str3am
#kill掉全部ssh命令
logger -t "ssh端口转发" "结束ssh进程"
killall ssh
#转发后台
ssh -NfR port_on_your_vps:192.168.123.1:80 username@*.*.*.* -i /etc/storage/.ssh/id_dropbear_rsa -K 1
#转发ss服务器端口
ssh -NfR port_on_your_vps:192.168.123.1:2333 username@*.*.*.* -i /etc/storage/.ssh/id_dropbear_rsa -K 1
logger -t "ssh端口转发" "成功转发端口"