内网外入,外网入内

重庆邮电大学内网外入诞生于2015年9月,该系统利用nginx服务器反向代理的原理,方便了重邮同学通过外网直接访问内网。同学们可以随时随地进入内网查询自己的个人课表、考试安排、期末成绩,进行选课等,极大方便同学们的日常使用。此外还设立了网站保护名单机制用以保证内网隐私和安全。系统上线16个月来,总访问量(PV)超过250万多次,PV单日峰值接近10万次,独立访客(UV)日均约1750人,UV日峰值超2万人。

(主站) cqu.pt --链接--> *.cqu.pt [校内服务器]

当前解决方案:

(主路线)

2017.10 ~

*.cqu.pt -> 百度云加速 -> [校内服务器.nginx反代] -> * 内网
*.cqupt.congm.in --跳转--> *.cqu.pt

nginx反代具体配置方案可见Github - Plan A。

历史解决方案

[ Plan A ] - (主路线)

2017.2 ~ 2017.10

*.cqupt.congm.in -> 百度云加速 -> [校内服务器A.nginx反代] -> * 内网
[ Plan B ] - (备用路线.废用)

2016.11 ~ 2017.07

*.cqupt.congm.in -> 阿里云服务器.302跳转 -> *.host.congm.in:88 -> [校内服务器B.nginx反代] -> * 内网
# 缺点:url将跳转并会显示为88端口
more

2016.6 ~ 2016.11:电信封了80端口后采取的方案

*.cqupt.congm.in -> 阿里云服务器.nginx反代 -> *.host.congm.in:88 -> [校内服务器.nginx反代] -> * 内网
# 缺点:大量消耗阿里云服务器流量

2015.9 ~ 2016.6:初始方案

*.cqupt.congm.in -> [校内服务器.nginx反代] -> * 内网

内网外入服务器搭建

服务器所用操作系统:Ubuntu 16.04.2 LTS

0、环境

服务器需既能上内网又能上外网,若满足则跳过该步骤;

若不能同时上内网和外网,需尝试配置route路由。

#!/bin/bash
# 配置route路由,实现同时上内网和外网
nmcli dev show
echo =================================
echo 请输入上面显示的你的校园网网关IP
read gateway
echo 你输入的校园网网关IP是 $gateway
echo =================================
sudo route del default
sudo route del -net 202.202.32.0/20
sudo route del -net 172.0.0.0/10
sudo route del -net 172.16.0.0/12
sudo route del -net 172.32.0.0/15
sudo route del -net 211.83.208.0/20
sudo route del -net 222.177.140.0/25
sudo route del -net 219.153.62.64/26
sudo route del -net 10.10.10.0/24
sudo route add default gw 192.168.2.1
sudo route add -net 202.202.32.0/20 gw $gateway
sudo route del -net 172.0.0.0/10 gw $gateway
sudo route add -net 172.16.0.0/12 gw $gateway
sudo route add -net 172.32.0.0/15 gw $gateway
sudo route add -net 211.83.208.0/20 gw $gateway
sudo route add -net 222.177.140.0/25 gw $gateway
sudo route add -net 219.153.62.64/26 gw $gateway
sudo route add -net 10.10.10.0/24 gw $gateway
echo =================================
echo 路由配置完毕
1、安装并编译nginx
sudo apt install nginx

因需安装第三方模块,固下面将使用编译的方式重新安装nginx

# 切换到root用户
sudo su
# 创建一个用于存放下载源程序的文件夹source
mkdir /source
cd /source

下载nginx

# 下载最新版nginx,可在官网 http://nginx.org 寻找下载地址
wget http://nginx.org/download/nginx-1.11.13.tar.gz
# 解压
tar -xzvf nginx-1.11.13.tar.gz

下载nginx

# 下载最新版nginx,可在官网 http://nginx.org 寻找下载地址
wget http://nginx.org/download/nginx-1.11.13.tar.gz
# 解压
tar -xzvf nginx-1.11.13.tar.gz

下载nginx:subs_filter模块

git clone https://github.com/yaoweibin/ngx_http_substitutions_filter_module

查看当前apt所安装的nginx是如何配置的

nginx -V

找到configure arguments的如下内容,并复制

--with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads
# 根据上述配置参数,安装部分依赖,如:
apt install libpcre3 libpcre3-dev libxml2 libxml2-dev libxslt1-dev libgd-dev geoip-bin libgeoip-dev

编译nginx

cd nginx-1.11.13
# 编译,在上述configure arguments后加上subs_filter模块
./configure [粘贴上述查询到的configure arguments] --add-module=/source/ngx_http_substitutions_filter_module
# 若报错,尝试进行上述部分依赖的安装

安装nginx

make && make install

替换nginx

mv /usr/sbin/nginx /usr/sbin/nginx.old
cp objs/nginx /usr/sbin/nginx
# 启动
nginx
2、nginx配置

进入nginx路径

cd /etc/nginx

编辑配置文件

vim nginx.conf

查看http中是否包含include conf.d/*.conf。若无或不正确,则新增或者修改为上述结果,表示包含conf.d文件夹其内的.conf后缀的配置文件

cd conf.d

进入conf.d,将内网外入的配置文件拷贝进入

  • 若服务器支持80端口访问,则拷贝plan_a中的cqupt.congm.in.confcqupt.congm.in.rule
  • 若服务器支持88端口访问,则拷贝plan_b中的host.congm.in.confcqupt.congm.in.rule
3、启动/重启nginx
# 已启动,让配置生效
nginx -s reload
# 未启动,启动
nginx