内网外入,外网入内

地址:https://cqupt.congm.in Github:https://github.com/mcc108/cqupt.congm.in

变动后 变动前

  • 原理:nginx反向代理
  • 设备:一台即能上内网又能上外网的一直开机不断网电脑
  • 环境:nginx服务器(windows/linux操作系统)
  • 配置:
    • 配置IP – 设置并固定内网ip及网关、子网掩码等
    • 配置route命令 – 实现切换路由,访问内网时切换为内网ip与网关
    • 配置nginx – 实现访问某域名反向代理至内网域名
    • 配置DNS解析域名至本台服务器外网地址

具体实现

本例所用材料:

  • 本人hp1000型号的旧电脑
    • 24小时不断网,外网IP固定
    • 内网IP及网关、子网掩码等固定
    • windows 10操作系统
    • 内置nginx服务器(windows版)
    • 关闭防火墙
  • 自己的域名
    • cqupt.congm.in – 外网入内主页
    • *.cqupt.congm.in – 外网入内反向代理具体所需域名实现
      • 如:jwzx.cqupt.congm.in
      • 又如:oa.cqupt.edu.cn.cqupt.congm.in
  • 阿里云万网DNS解析

具体步骤:

1、配置内网IP地址

  • 当前状态为已成功连入内网,并能连入外网
  • 在网络连接中找到以太网(内网连接),右键状态
  • 点击详细信息,并记录IP值、子网掩码、默认网关、DNS地址,* 自己知道所在网段的这些值就不必查询。(如果IP不是172.开* 头,检测是否为内网连接)
  • 返回网络连接中以太网(内网连接),右键属性
  • 找到点击TCP/IPv4协议,再点击属性
  • 固定IP地址:(将上述记录值填入)

2、Route命令,实现切换路由,访问内网时切换为内网ip与网关

  • 每一行都需成功执行
  • 其中格式为:route add 内网某一IP段 mask 内网该IP段子网掩码 本电脑网关地址 -p
    • 内网某一IP段,后用0表示。比如172.22.0.0表示172.22.0.0-172.22.255.255
      • 172.22.0.0、202.202.43.0、202.202.32.0皆为重邮网络连接或者某网页内网IP
    • 内网该IP段子网掩码,对应上述IP地址,0为0,其他数字为255
      • 如:172.22.0.0 对应 255.255.0.0 、202.202.43.0 对应 255.255.255.0
    • 本电脑网关地址
      • 内网所在网关地址,而不是IP地址。
    • -p表示设置为永久路由,重启后不会消失
  • 成功执行后,再测试看外内网还能不能同时进入。
route delete 0.0.0.0  
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1 -p  
route add 172.22.0.0 mask 255.255.0.0 172.22.1**.**9 -p  
route add 202.202.43.0 mask 255.255.255.0 172.22.1**.**9 -p  
route add 202.202.32.0 mask 255.255.255.0 172.22.1**.**9 -p  

3、在我windows10系统的旧电脑上安装nginx服务器

  • 在官网 http://nginx.net 下载windows版nginx服务器
  • 安装解压即可,目录为 c:/nginx
  • 运行c:/nginx/nginx.exe
  • 浏览器访问 http://localhost 即可看见(如无法访问,查看:80端口占用情况)

4、DNS解析域名到主机外网IP

  • 查询自己电脑的外网IP,可直接百度IP,结果中将会给出
  • 将域名解析到该IP
    • 这里是阿里云万网DNS云解析
    • 这里需要解析jwzx.cqupt.congm.in与.cqupt.congm.in到该IP
    • 记录类型为A
    • 主机记录为jwzx.cqupt和.cqupt
    • 记录值为外网IP
  • 访问域名,测试能否显示出nginx服务器的网页界面(记得关闭防火墙)

5、最重要的布置,nginx反向代理配置

  • 对配置文件 c:/nginx/conf/nginx.conf 进行操作
  • 会用到一些正则表达式
  • 用编辑软件(如记事本)打开,该配置文件的主要格式为:(#表示注释)
http {  
    ...
     # 默认配置
    server {
        ...
        listen       80;
         # 监听80端口
        server_name  localhost;
         # 访问地址为localhost(即所访问的域名,如*.cqupt.congm.in)
            location / {
                ...
                 # 反向代理目标地址
            }
    }
    server {
        ...
    }
}
  • 进行配置,需要http中与其他server并列添加一个自己的server,默认配置无需修改
  • 在http中添加server:
server {  
    listen  80;
    server_name  jwzx.cqupt.congm.in;
    charset gb2312;
     # 设置编码
    location / {
        proxy_pass http://jwzx.cqupt.edu.cn;
         # 反向代理至jwzx.cqupt.edu.cn
        proxy_redirect off;
        proxy_set_header   Host    $host; 
        proxy_set_header   X-Real-IP   $remote_addr; 
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
server {  
    listen  80;
    server_name  ~^(.+)\.cqupt\.congm\.in$;
     # 利用正则表达式匹配到*.cqupt.congm.in,并将前缀用()包含为变量$1
     # nginx对正则表达式用()的定义变量为$1,$2...
    resolver 202.202.32.33 114.114.114.114 8.8.8.8 valid=3600s;
     # 对自定义的server_name需要自己resolver出DNS服务器
    location / {
        proxy_pass http://$1;
         # 将地址代理代理到所访问域名的前缀变量的地址
         # 如访问oa.cqupt.edu.cn.cqupt.congm.in将会代理到oa.cqupt.edu.cn
    }
}
  • 保存修改的配置文件,重新启动nginx:(在命令行中操作)
cd c:/  
cd nginx  
nginx.exe -s reload  

6、测试访问域名地址是否能成功访问,有错误不断摸索,成功总是会留给有耐心喜爱摸索的人。


温馨提醒:为了内网安全及长期的使用,内网外入应当节制