如何从外网无痛访问校园网内的设备

A.问题概述

一般的校园网或者一些机构的内网是无法从外网访问进来的,必须得连接内部的网络才可以访问校园网的资源。 官方方案一般是VPN,就是你在校外需要访问校内资源时,需要一个vpn平台,然后收个验证码或者扫个码什么什么的。 从校外需要访问校内资源,比如如下情形:

  • 需要在家远程ssh登录自己的工作设备。
  • 自己写的博客部署在了校内服务器,希望被校外的人看见。
  • 自己设计的软件给外面人使用时,需要访问校园网里的设备。

由于VPN登录的繁琐性,情形2和3就已经把这个方案pass掉了,那么就需要我们使用到内网穿透技术。

B.预备知识

一般连接家里的路由器,或者校园网,使用ipconfig查看你的ip,会是如下这些情况

  • A类地址范围:10.0.0.0 - 10.255.255.255
  • B类地址范围:172.16.0.0 - 172.31.255.255
  • C类地址范围:192.168.0.0 - 192.168.255.255

这些都是内网的IP频段,在内网以内的设备可以互相访问的。

一般来讲,外网的设备要想进来要问你的路由器愿不愿意(防火墙),或者你有一个公网IP。 内网穿透的作用就是把你的内网设备,映射到外网,让外网的设备可以访问到你的内网设备。 png

C.案例说明

这里以校内搭建Flask应用为例子。我们的设计草图如下所示。主要的主角有:

  • 部署Flask服务的服务器,server,操作系统:ubuntu
  • 我们自己的个人设备,PC,操作系统:windows
  • 校外设备,可以用手机开热点来模拟外网环境(记得关掉校园网wifi)

图中标注的IP是因人而异的,需要自己查询。

#Tips:有部分读者可能没有可以使用的服务器,这个并没有关系,相当于你自己的设备和服务器是同一个设备而已。

png

大致草图

C.1搭建一个Flask

png

内网访问Flask应用

在Flask服务器中,我们创建一个Flask应用

# flaskapp.py
from flask import Flask
app = Flask(__name__)

@app.route("/")
def home():
    return "hello world"
if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True,port=5000)

终端运行python flaskapp.py即可启动服务,其中host参数的0.0.0.0代表监听全部的端口,这样才可以被外部设备访问到。 这时flask会弹出大致如下信息(部分信息已脱敏)

 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://192.168.1.103:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Restarting with stat
 * Debugger is active!

这个时候,在我们自己的设备使用浏览器,输入网址http://192.168.1.103:5000/ ,就可以访问到我们的Flask应用了。(输入的网址需要查看你的服务器的ip)

png

内网访问结果

C.2校外网设备访问校内设备Flask

这里就轮到我们的内网穿透工具登场了。

chmlfrp

png

内网穿透工具

这个穿透工具需要注册一个账号,然后实名认证一下就可以添加一个隧道。 在添加隧道界面,大致填写这些信息就可以了。

  • 本地ip:服务器的IP,本文中为192.168.1.103
  • 内网端口:一般为5000 ,和你的flask的端口有关
  • 隧道名称:随便
  • 外网端口:网站帮你填写完了

png

隧道信息

然后下载软件,服务器的操作系统是ubuntu,所以我下载的是amd64版本的。没有服务器,用windows设备测试读者应该下载windows版本。

然后就是在生成配置文件,把文件内容复制到刚刚下载的文件frpc.ini(按照官网步骤即可)

最后一条一条在服务器中执行如下命令。(windows的需要按照官网的步骤)

# 记得切到文件目录再执行操作
chmod 777 frpc        # 修改文件权限用的
chmod 777 frpc.ini    # 修改文件权限用的
./frpc -c ./frpc.ini  # 启动服务

看到信息中有映射启动成功, 感谢您使用ChmlFrp!就算是成功了。 在你的隧道列表中,有个隧道地址,用你的开着热点的手机输入这个网址就可以访问在服务器创建的Flask应用了。 png