在校外,如何才能访问校内网站?

Author Avatar
xmoiduts 10月 30, 2017
  • 用其他设备扫码打开本文

ssh -R加酸酸乳(或者同类产品) ,里应外合。看懂这句话,你就不用点开正文了。

我希望,若干年后,我可以在不用操心网络、空气等基础设施的环境里工作。剥离了纷扰,去解决更有意义的问题。

上个月,很多学校的同学都反映:“我们的校园网站打不开,事情都办不了”。直接原因是学校们关闭了校内网站的校外访问。让我们看看他们是如何做的:

  • 等到11月尘埃落定再办事
  • 访问同学在公网搭建的校内网站镜像
  • 肉身回到学校再办事
  • 让校内人员帮着把事办了

而作为在本省上学,要经常往返家校的学生,笔者早在一年前就基本摆脱了了这个问题的困扰。我是这么做的:

原理阐述:

反向SSH隧道+网络代理工具。

校内的电脑主动向外发起连接,并绑定自己的端口A和你服务器的端口B。在校内电脑上开个代理,监听本地的端口A。

公网发往服务器:端口B的数据会被转发给校内电脑:端口A。在校外的你的电脑看来,服务器:端口B就是个代理,连上它就能上校内网站啦。

这么阐述还是有点麻烦,下面上我的原理图。我为自己留了两条隧道:一条用于访问网站,一条用于ssh连接,用于管理校内主机。翻回学校原理图.png

原理很简单吧!实际操作时会遇到一些小麻烦,下面我将写出自己搭建的过程,ip地址和端口均参照上图(这俩都是我编的)。

硬件需求:

离校期间一直在线的电脑一台,我用的是树莓派2B,它便宜省电,适合解决这个问题。

国内vps一台,上网搜搜优惠码或许能拿到额外的优惠。

搭建:

树莓派连接到校园网(教程另搜)

我们学校使用DR.COM进行网络鉴权认证,为了让校内的树莓派能访问到外网,我在树莓派里面刷了登录器脚本。这个每个学校都不一样,大家自己解决。

掉线检测:

由于 学校网络便宜但质量一般,登陆之后经常掉线。所以要检测树莓派是否还能上外网一个位于校外但在国内的合法网站。比如sudo ping -W 2 -c 1 114.114.114.114。能ping通则返回0,反之返回1,执行完可通过$?变量访问(上一条命令的)返回值。

配置ssh:

这不是文章的重点,简单说一下步骤吧:

  • 修改vps的ssh端口,默认的22端口容易被黑,网上有好多游手好闲的人专门扫端口玩。
  • 生成一对公钥、私钥,公钥放在树莓派里,私钥放在vps上。这是ssh免密码自动登陆的方法。

构建ssh反向隧道:

以树莓派上的ssh -R 0.0.0.0:20000:localhost:22 username@8.9.10.11 -p 22命令为例,简单解释一下反向隧道的参数

-R 代表反向隧道,

0.0.0.0意味着让vps监听其所有ip地址上的该端口(20000),如果不加这个,vps本身能够反反向访问到树莓派,但外网的电脑则不行。

20000代表绑定vps的端口,

localhost表示树莓派的本地ip地址,:22表示树莓派的22端口(我用于ssh,这个没改。)

username@8.9.10.11替换成你的vps用户名、ip地址。

-p 22是端口,22替换成你改过的ssh端口号。

不出意外的话,树莓派会要你输入vps的登陆密码,正确的话就连接成功了。此时在vps上ssh username@localhost -p 20000 应该能访问到树莓派的ssh界面。

Autossh

ssh是会被掐断的,因此我们通过autossh命令和keepalive包来减少短线对我们的影响。

autossh -i /root/.ssh/id_rsa -o "ServerAliveInterval 8" -o "ServerAliveCountMax 3" -R 0.0.0.0:20000:localhost:22 username@8.9.10.11 -p 22

每8秒我们向上发送一个ssh包,避免运营商将我们的连接掐断,如果断线,autossh会立即自动重连。

代理工具:

由于你懂的原因,我不能详细展开,相信通过前面的讲解,我们能够自己换端口了。将绑定树莓派的端口改成树莓派上代理工具监听的端口即可,无论你是用“小飞机”、“酸酸乳”还是“火箭射线”,这套转发都能让你上到校内网站。

哦对了,你在校外上网时,服务器填你vps的ip(本文中为8.9.10.11),端口填你vps绑定的端口(本文为20000)哦。


Q&A:

Q:题主,我能不能用它来……看……那种……网站?

A:不能,其一,ssh是个纯文字界面,跨境流量太大你当他们不知道咋回事呢?所以你的vps要放在国内。起码网速可以保证。

Q:题主你的方法实在是又麻烦又啰嗦,真——辣鸡!

A:解决上网问题有好多方法,无论是用frp,dog-tunnel,ngrok还是什么东西,只要能达成目的这方法就是好的。这篇文章旨在讲述我在用的方法,它满足了我的需要,在一年多的时间里也立等可用。如果它不够用了,我再升级其他方法。关于现在的网络,我已经厌倦了和这种坑爹的基础设施周旋,一个人不能为他人挖的坑埋单,我的未来应该放眼于更高的层次。