[随笔]利用云虚拟机和学校VPN实现校外访问校内站点(反向代理)
探究背景简介:
大学校内站点一般不对外开放,个人认为原因有二:
一是站点内容受众就是大学师生;
二是站点基本无防御措施,在公网环境下容易发生意外情况。
至于为何不对外开放,不是这篇随笔探讨的重点,利用一些技术工具,实现公网下访问校内站点,才是这篇随笔要谈的。
为何要在校外去访问校内资源?这每个人都有自己的答案。
要通过公网访问这种内部站点,基本思路有两个,一个就是找一台在校园内部能连接到公网的机器做代理;另一个就是利用几乎所有高校都会提供的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则通过物理网卡去访问,从而实现学校内网和公网的同时访问。
值得注意的是:
- 所有的路由表修改工作是在虚拟机上完成,不正当的修改会导致当前主机失去和虚拟机的网络连接
- 学校的vpn在长时间无访问的情况下,会自动掉线,所以需要一个心跳包的机制
- 我所在学校的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实现校外访问校内站点(反向代理)的更多相关文章
- 利用 squid 反向代理提高网站性能(转载)
本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性.安全性方面有很好的用途.作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术, ...
- mvc上传到云虚拟机的问题解决
我用vs2015写了个小网站,.Net Framework4.5. mvc 5,发布到本机iis上正常,在美橙申请了一个云虚拟机,发布过程中遇到的一些问题记录如下: 1.服务器支持的版本比较低 上传后 ...
- 新浪云虚拟机ftp链接显示失败问题
新浪云虚拟机ftp链接显示失败问题 测试是在局域网遇到的 域名解析可以ping有字节回复 账号密码也没有错误,但是链接一直出现 连接失败 拒接连接等问题 解决办法: 其实是局域网内的问题,这 ...
- frp服务利用云主机实现Windows远程连接
frp服务利用云主机实现Windows远程连接 1.下载所需要的安装包 https://github.com/fatedier/frp/releases 下载 frp_0.44.0_linux_amd ...
- 利用ZoomPipeline迅速实现基于线程池的全异步TCP点对点代理
在博文<一种基于Qt的可伸缩的全异步C/S架构服务器实现>中提到的高度模块化的类可以进行任意拆解,实现非常灵活的功能.今天,我们来看一看一个公司局域网访问英特网云服务器的点对点代理例子.代 ...
- 利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_165 上一篇文章:Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,是在 ...
- 腾讯云下安装 nodejs + 实现 Nginx 反向代理
本文将介绍如何给腾讯云上的 Ubuntu Server 12.04 LTS 64位主机安装 node 及 nginx,并简单配置反向代理. 笔者在整个安装过程中遇到不少麻烦(不赘述),如果你希望少踩坑 ...
- 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理
Nginx的好处相信我不必多说了,它作为一个相当轻量级的开源Web 服务器以及反向代理服务器而深受欢迎.越来越多的公司已经对它产生兴趣,包括我们公司的许多部门,利用它进行负载均衡和资源管理,之前写过一 ...
- 利用html5中的localStorage获取网页被访问的次数
利用html5中的localStorage获取网页被访问的次数 <!DOCTYPE html> <html> <head> <meta charset=&qu ...
随机推荐
- LVS详解
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- vector 的用法(c++)
vertor是向量类型,它是一个对象实体.它作为容器可以容纳不同的实体,如int,flout,double,还有类类型. 1.包含头文件 #include <vector> 2.声明:ve ...
- hibernate---一对一单向外键关联--XML
Student.java: package com.bjsxt.hibernate; public class Student { private int id; private String nam ...
- Nutz 第一个Demo
Nut 是什么 我这就不多解释 知道是个javaweb框架 如想仔细了解请移步管网 http://nutzam.com/ 一.项目结构(直接看图 ) 需要注意的是 src和conf 都为源码包 con ...
- selenium 多线程
http://www.cnblogs.com/dingmy/p/3438084.html
- javascript模拟鼠标双击事件
通常我们在做开发的时候需要通过单击切换对立事件,简单做了一个模型. <!DOCTYPE html> <html> <head> <title>javas ...
- HDU 5652 India and China Origins
二分答案+验证,注意一开始就不连通的话输出0 #include<cstdio> #include<cstring> #include<cmath> #include ...
- 阿里开源Mysql分布式中间件:Cobar
目前在从事数据库中间件的开发和维护工作,我们使用的数据库中间件就是由cobar改造而来,所以对于cobar的一些说明一看就明白了: 下面是看到的一个很不错的分析文档 这里整理了下方便自己学习使用. C ...
- Android SQLite 加密模块实现入门
安卓的安全性那是众所周知,最近学习安卓apk反编译,发现某些即时通讯软件都封装了自己独立使用的数据库模块(从framework java/C++ 一直到底层的SQLite的C库), 为了防止被root ...
- MIPI-1
未来的产品都将朝着移动的方向发展,例如智能手机.数码相机.摄像机.平板电脑.媒体播放器.游戏机等,这些产品需要能执行多任务,包括处理多个不同的传感器如麦克风.图像传感器.磁罗盘.三轴加速度计和精细的触 ...