前几天入手了一个树莓派3,然而不幸的是家中的网没有公网IP,直接访问肯定是没戏了,这时候突然想到了打洞这个词,我想ssh打洞肯定是可以的。
经过一番搜索,答案找到了,实现非常简单,步骤如下。
1.原料
实现内网穿透,你首先需要一台在公网的vps,哪个国家的都无所谓。
2.VPS配置
vps开启SSHD的GatewayPorts选项,开启方式如下:
vim /etc/ssh/sshd_config # 找到GatewayPorts选项,将其变为yes GatewayPorts yes # 重启sshd服务 service sshd restart
3.树莓派配置
假设VPS的IP为1.1.1.1,远程转发的端口号为11111(端口号最好高于1024,否则需要使用root权限),远程服务器的ssh端口为22,登陆用户为username;
继续假设本地路由器需要转发的端口为22,路由器的在LAN中的IP地址为192.168.1.1。
当我们确认好了各个数字的意义后,就可以开始替换下面的命令了。
ssh -Nfg -R 11111:192.168.1.1:22 1.1.1.1 -p 22 -l username
ps.这一步需要输入username的密码,如果想要加入开机脚本,记得配置ssh的公钥,让路由器变得可信。
当完成以上配置,我们在VPS上使用命令netstat -nlp|grep sshd
,就可以发现有两个监听端口号为11111的sshd进程,至此说明隧道搭建完毕!
4.测试
通过以上配置,我们在vps上建立了一个隧道,监听端口11111,并将此端口的数据映射到内网的树莓派上,我们在外网使用一下命令即可完成登陆。
ssh username@1.1.1.1 -p 22
# 打印调试信息
ssh username@1.1.1.1 -p 22 -v
发现问题
虽然通过这种方法可以在外网访问内网的机器,但是有个问题就是长时间不访问,会自动断开,这就比较尴尬了,经过一番搜寻,发现autossh可以解决这个问题。
开一篇新的文章来说这个问题吧。
现在已经有了更好的方案:使用autossh实现树莓派内网穿透
参考资料
[1] https://blog.phpgao.com/ssh-reverse-tunnel.html
赞赏微信赞赏
支付宝赞赏
《ssh实现树莓派的内网穿透》有1条评论