探究背景简介:

  大学校内站点一般不对外开放,个人认为原因有二:

  一是站点内容受众就是大学师生;

  二是站点基本无防御措施,在公网环境下容易发生意外情况。

  至于为何不对外开放,不是这篇随笔探讨的重点,利用一些技术工具,实现公网下访问校内站点,才是这篇随笔要谈的。

  为何要在校外去访问校内资源?这每个人都有自己的答案。

  要通过公网访问这种内部站点,基本思路有两个,一个就是找一台在校园内部能连接到公网的机器做代理;另一个就是利用几乎所有高校都会提供的VPN通道,通常用学号等作为验证。

  第一种思路需要有一定的人脉等资源,不然很难找到一台在校内能24小时不间断运行的机器,况且针对机器的宕机很难在线修复,利用个人电脑在宿舍搭建也不现实,毕竟许多学校会断电断网。反观第二种思路,只要有一个学号或者教职工号就可以通过VPN使用校内资源,较为便捷,唯一的一点问题是在连接到VPN后,一般情况下只能访问校内资源,而无法使用其他的公网上的资源,好在这种现象只是vpn客户端的一种安全策略而已,可以通过修改路由表等来达到校内资源和公网资源同时使用的目的。

目的:让普通师生用户直接访问到校内资源。

  无论使用3G,4G,还是自家的移动联通电信宽带,都能便捷的访问校内网站,而无需连接到校内网。


大致工作流程:

一、创建云主机

  毫无疑问,必须选择国内的云主机。

  作为一名忠实的软粉,选择云主机必然是优先选择微软自家的Azure了,无奈囊中羞涩,只好放弃。但是1元体验Azure的好事是绝对不能错过的,于是用1元钱体验了1500RMB额度的Azure,建了一个D0标准的虚拟机,貌似是一天80RMB,很是奢侈啊。但是体验完了,还是要回归现实的,最终选了阿里云最便宜的一档ECS,但针对此次探讨的需求,已经足够。

  虚拟机的系统大版本是Ubuntu14。

二、配置云主机

  因为选择了使用VPN来访问校内网站,那么必须安装一个VPN客户端到服务器,学校提供的VPN是基于SSL协议的,经过我几天的百度,发现只有MotionPro这款软件最好使,但遗憾的是,在Linux上面,这款软件只支持GUI的操作方式,并没有提供在BASH中操作的命令,那必须要为服务器安装一个桌面环境了。经过百度发现,XUbuntu-desktop比较轻量级,在服务器上使用最好不过,于是根据一些教程,完成了服务器上桌面环境的安装配置。具体配置可以参考这篇教程 http://www.linuxidc.com/Linux/2015-04/116446.htm

  作为一名软粉,为什么不用Winserver呢?因为windows下Nginx的性能不是一般的差,而且还只是一个beta版本;而IIS在反向代理中会出现一些我个人暂时没找到解决办法的问题。所以只能Linux了。

况且!!!Satya Nadella 说了“Microsoft Love Linux”,是的,我也爱Linux。

三、安装MotionPro

  ArrayNetwork还有几款类似MotionPro的SSL VPN客户端软件,但是这些都会监测路由表变化,然后重置路由表。所以暂时选择MotionPro

  Array Network公司产品下载集合,可以选择合适的版本进行下载使用

  http://support.arraynetworks.com.cn/troubleshooting/

四、配置定时任务和脚本,修改路由表

  针对路由表的修改,是这次探讨最为关键的一步。通过修改路由表,可以实现特定的IP通过VPN去访问,而其他的IP则通过物理网卡去访问,从而实现学校内网和公网的同时访问。

  值得注意的是:

  1. 所有的路由表修改工作是在虚拟机上完成,不正当的修改会导致当前主机失去和虚拟机的网络连接
  2. 学校的vpn在长时间无访问的情况下,会自动掉线,所以需要一个心跳包的机制
  3. 我所在学校的vpn,无论如何,24小时后会自动断开,需要重连

  所有这些导致的结果就是必须用定时任务和脚本去修改路由表。至于修改的具体内容,我在GitHub有一个项目专门介绍:https://github.com/cjw1115/RouteTableChange

  由于用到了shell脚本,需要注意的是,再Ubuntu中,原先默认的bash shell被修改成了dash shell,这会导致一些脚本处理的语法错误,

  通过如下方式改回bash:
  

sudo dpkg-reconfigure dash
选择NO

五、Nginx反向代理

  完成以上四个步骤后,现在服务器应该可以访问校内站点诸如:jwgl.xxxx.edu.cn,my.xxxx.edu.cn等类似网站,也可以访问百度新浪等公网上的站点。接下来就是安装配置Nginx,架起一座校内和校外的桥。

  一个基本需求是,用户访问例如jwgl.proxyxxx.com,返回jwgl.xxxx.edu.cn的内容。

  Nginx负责监听用户对jwgl.proxyxxx.com的请求,并将请求转发到jwgl.xxxx.edu.cn,最后把jwgl.xxxx.edu.cn的响应又转发给用户,实现反向代理。

具体如何配置,可以参考如下配置文件(/etc/nginx/nginx.conf部分)

upstream  jwgl{
         server jwgl.xxxx.edu.cn:80;
}
server{
         listen 80;
         server_name 127.0.0.1;
        
         location /{
                proxy_set_header Host $host;
                proxy_pass http://jwgl;
         }
}

  jwgl.proxyxxx.com这个网址应该被解析到云虚拟机的公网IP上面,具体的解析可以到域名提供商处设置。

  以上五个步骤就可以实现这篇随笔要探讨的主题,在公网下访问不对外开放的校内资源!


  接下来是自问自答环节:

  问:既然校内资源不对外开放,自然有它的道理,那为什么还要通过这种方式去访问校内资源呢?

  答:这么做,只是为了更好的使用校内资源,绝不是为了搞破坏!

[随笔]利用云虚拟机和学校VPN实现校外访问校内站点(反向代理)的更多相关文章

  1. 利用 squid 反向代理提高网站性能(转载)

    本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性.安全性方面有很好的用途.作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术, ...

  2. mvc上传到云虚拟机的问题解决

    我用vs2015写了个小网站,.Net Framework4.5. mvc 5,发布到本机iis上正常,在美橙申请了一个云虚拟机,发布过程中遇到的一些问题记录如下: 1.服务器支持的版本比较低 上传后 ...

  3. 新浪云虚拟机ftp链接显示失败问题

    新浪云虚拟机ftp链接显示失败问题 测试是在局域网遇到的 域名解析可以ping有字节回复 账号密码也没有错误,但是链接一直出现    连接失败   拒接连接等问题 解决办法: 其实是局域网内的问题,这 ...

  4. frp服务利用云主机实现Windows远程连接

    frp服务利用云主机实现Windows远程连接 1.下载所需要的安装包 https://github.com/fatedier/frp/releases 下载 frp_0.44.0_linux_amd ...

  5. 利用ZoomPipeline迅速实现基于线程池的全异步TCP点对点代理

    在博文<一种基于Qt的可伸缩的全异步C/S架构服务器实现>中提到的高度模块化的类可以进行任意拆解,实现非常灵活的功能.今天,我们来看一看一个公司局域网访问英特网云服务器的点对点代理例子.代 ...

  6. 利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_165 上一篇文章:Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,是在 ...

  7. 腾讯云下安装 nodejs + 实现 Nginx 反向代理

    本文将介绍如何给腾讯云上的 Ubuntu Server 12.04 LTS 64位主机安装 node 及 nginx,并简单配置反向代理. 笔者在整个安装过程中遇到不少麻烦(不赘述),如果你希望少踩坑 ...

  8. 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理

    Nginx的好处相信我不必多说了,它作为一个相当轻量级的开源Web 服务器以及反向代理服务器而深受欢迎.越来越多的公司已经对它产生兴趣,包括我们公司的许多部门,利用它进行负载均衡和资源管理,之前写过一 ...

  9. 利用html5中的localStorage获取网页被访问的次数

    利用html5中的localStorage获取网页被访问的次数 <!DOCTYPE html> <html> <head> <meta charset=&qu ...

随机推荐

  1. EasyUi之datagird解读

    1.其json格式需要为:  JSON Code  1234567891011121314151617181920212223   {     ,     "rows": [    ...

  2. hibernate--ID生成策略--annotation

    annotation: @GeneratedValue a) 自定义ID b)auto: 对mysql默认使用auto_increment, 对oracle使用hibernate_sequence c ...

  3. Jsoup使用教程

    一.解析和遍历一个HTML文档1.解析Html及Url链接 String html = "<html><head><title>First parse&l ...

  4. HTML中meta的应用

    meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用 于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name ...

  5. Spring3.2新注解@ControllerAdvice

    Spring3.2新注解@ControllerAdvice   @ControllerAdvice,是spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强.让我们先看看@Control ...

  6. spring DateUtils

    /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...

  7. UIAlertController高级之嵌入其他控件 分类: ios技术 2015-02-02 11:58 96人阅读 评论(0) 收藏

    在编码过程中,我们经常遇到需要这样一个效果,就是弹出框的嵌套; 举个最简单的例子,比如你要选择时间,必然需要一个时间选择器DatePicker.但是这个选择器又是在你点击某按钮时弹出,弹出方式最常见的 ...

  8. VS2010环境下使用VB开发网络编程(WinHttp)

    首先点项目——>添加引用——>COM选项卡——>Microsoft WinHttp Services,version 5.1,然后点确定就可以添加Winhttp到项目引用中. 1.如 ...

  9. FlexGrid简单demo

    1.首先加入以下代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...

  10. UVa 10226 - Hardwood Species

    题目大意:给出n棵树(有重复),统计每种树出现的频率.使用STL的map. #include <cstdio> #include <iostream> #include < ...