之前写了一篇 vpn 在阿里云上的搭建过程,想不到人气还挺高。今天来写一篇:如何通过公网访问内网的服务。主要的介绍的是一个称为 serveo 的服务器软件,当然,现在不需要安装这个软件,只要你的电脑上有 ssh 的客户端,就可以完成下面的实验了,serveo 的地址 :https://serveo.net/ ;不过这个地址有时候会不能访问,不过也没关系,只需要 ping serveo.net
,只要能 ping 通就可以,不影响下面的实验;最后也有我对官网的搬运内容。
缘起
大家知道,训练深度神经网络对计算性能的要求非常高,在编写代码时,很多人通过 jupyter notebook 提供的 web 服务进行。服务器电脑通常在实验室的内网中,所以为了训练神经网络,我们通常需要连接实验室的内网,而有时回寝之后突然想继续学习一下(虽然这个可能性非常低),但是连不了服务器,那岂不是辜负了一颗好学的心,所以如果内网的 web 访问能够通过公网访问就好了,貌似和花生壳有点像,听说要收费,没用过花生壳,所以不敢妄言。
其实,只要想获取内网的服务,都可以用类似的方法。
实验步骤
1、连接内网服务器,启动web服务
这里以 jupyter notebook 服务为例,例如将 jupyter notebook 的端口设定为 10010:
# 注意下面的语句是在服务器电脑上执行的!!!
jupyter notebook --ip=0.0.0.0 --port=10010 &
# 稍微解释一下:0.0.0.0 表示开放所有网卡的对应端口,最后的 '&' 表示后台运行
现在通过内网访问该服务:
注意:上面的 ip 地址是服务器的内网地址。web 服务启动完毕!
2、将 web 服务向公网开放
具体内容可以查看serveo官网: https://serveo.net/。简单的说,通过一条语句就可以实现(全篇的精髓在此):
ssh -R 80:localhost:10010 serveo.net
# 注意:上面的 10010 需要你用自己提供服务的端口号来替换
输出如下:
根据绿字的提示,现在我们就能通过 https://desiit.serveo.net
这个 serveo.net 下的子域名访问内网了(这个子域名是随机生成的,每次应该都会不一样),将我们电脑的网络与内网断开,切换到其他网络(我是通过自己手机开热点来切换的,只要不是同一网络就行,在同一网络也可以,毕竟是通过域名访问,不过这样有的人会怀疑这些操作到底要没有起作用)
3、测试实验效果
在切换网络后,通过浏览器访问https://desiit.serveo.net
跑一个训练 mnist 的程序的结果:
这样我们就能随时随地使用内网的硬件来训练我们的模型了。
不足
- 由于需要通过公网访问,可能速度没有内网快;
- 貌似使用 serveo 提供的服务,过一段时间会自己断开(但有时候可以连好久),这也有情可原,毕竟人家不能提供了技术还给提供服务器,另外也有网络连接的问题,毕竟人家的服务器在🇩🇪德国;
所以,建议大家如果真的需要,可以通过自己的 VPS,根据 serveo 的官网教程在自己的 VPS 运行 serveo 服务,应该可以保证连接的稳定。
鉴于有时候 serveo 有时候访问不了,我就来手动搬运一下,可以访问的直接访问官网即可。
其中的下载连接为:
PS: 我也是刚刚发现这个穿透内网的方法,所以如果表述中存在某些错误,多谢指正。如果大家想深入了解 serveo 的使用,仔细看官网教程吧。详细的参数含义也可以看:内网穿透神器-Serveo