局域网考试系统安全访问配置全攻略:本地域名与HTTPS部署指南

一、配置背景与核心价值

在局域网环境中部署考试系统时,直接使用IP地址访问存在三大痛点:记忆成本高、管理分散、安全性不足。通过配置本地域名与HTTPS加密,可实现以下核心价值:

  1. 统一访问入口:将考试系统绑定至易记域名(如exam.local),替代冗长的IP+端口组合(如192.168.1.100:8080)
  2. 功能完整性保障:摄像头监考、音频录制等高级功能依赖HTTPS协议,未加密传输会导致功能失效
  3. 数据安全加固:防止局域网内的中间人攻击与数据篡改,避免浏览器”不安全”警告影响用户体验
  4. 集中化管理:通过DNS服务统一管理多个内部服务域名,降低维护复杂度

二、技术方案选型对比

当前主流的局域网域名解析方案包含两类:

  1. 硬件路由器方案:利用路由器内置DNS功能(如DDNS)
    • 优点:无需额外服务器
    • 缺点:配置界面简陋,缺乏高级功能(如广告拦截、访问控制)
  2. 软件DNS服务方案:部署专用DNS服务器(如Pi-hole、Technitium DNS)
    • 优点:功能丰富、可扩展性强
    • 缺点:需要独立服务器资源

推荐方案:采用Pi-hole开源方案,其优势在于:

  • 支持自定义本地域名解析
  • 内置广告拦截功能提升网络质量
  • 提供详细的访问日志与统计
  • 跨平台支持(Docker/Linux原生)

三、环境准备与架构设计

3.1 硬件环境要求

  • 一台闲置的Linux服务器(物理机/虚拟机均可)
  • 推荐配置:2核CPU、2GB内存、20GB存储空间
  • 网络要求:与考试系统同属一个局域网段

3.2 软件架构设计

  1. 客户端设备 局域网DNS查询 Pi-hole服务器 考试系统服务器
  2. (本地域名解析)

采用分层设计:

  1. DNS解析层:Pi-hole处理所有域名查询请求
  2. 应用服务层:考试系统运行在独立服务器
  3. 证书服务层:可选自签名证书或企业CA证书

3.3 目录结构规范

推荐采用Docker部署方式,统一管理配置文件:

  1. mkdir -p ~/docker/pihole/config
  2. ├── custom.list # 自定义域名解析规则
  3. ├── dnsmasq.d/ # DNS配置扩展目录
  4. ├── local.conf # 本地域名重定向规则
  5. └── upstream.conf # 上游DNS服务器配置
  6. └── env # 环境变量配置文件

四、详细部署流程

4.1 Docker环境搭建

  1. # 安装Docker(Ubuntu示例)
  2. sudo apt update
  3. sudo apt install docker.io docker-compose
  4. sudo systemctl enable docker
  5. # 验证安装
  6. docker --version
  7. # 预期输出:Docker version 24.0.x, build abc1234

4.2 Pi-hole容器部署

创建docker-compose.yml文件:

  1. version: '3'
  2. services:
  3. pihole:
  4. image: pihole/pihole:latest
  5. ports:
  6. - "53:53/tcp"
  7. - "53:53/udp"
  8. - "80:80"
  9. environment:
  10. TZ: 'Asia/Shanghai'
  11. WEBPASSWORD: 'your_admin_password'
  12. ServerIP: '192.168.1.10' # 服务器内网IP
  13. volumes:
  14. - './config/custom.list:/etc/pihole/custom.list'
  15. - './config/dnsmasq.d/:/etc/dnsmasq.d/'
  16. cap_add:
  17. - NET_ADMIN
  18. restart: unless-stopped

启动容器:

  1. docker-compose up -d

4.3 本地域名配置

编辑config/dnsmasq.d/local.conf

  1. # 考试系统域名解析
  2. address=/exam.local/192.168.1.20
  3. address=/api.exam.local/192.168.1.20
  4. # 阻止广告域名(示例)
  5. address=/doubleclick.net/0.0.0.0

4.4 DHCP服务迁移(可选)

若需完全接管局域网DNS解析:

  1. 登录路由器管理界面
  2. 关闭DHCP服务
  3. 在Pi-hole中启用DHCP:
    1. # 修改环境变量
    2. echo "DHCP_ACTIVE=true" >> config/.env
    3. docker-compose restart
  4. 设置静态IP分配规则(确保考试系统IP固定)

五、HTTPS证书配置

5.1 自签名证书生成

  1. mkdir -p ~/certs
  2. openssl req -x509 -nodes -days 3650 \
  3. -newkey rsa:2048 \
  4. -keyout ~/certs/exam.local.key \
  5. -out ~/certs/exam.local.crt \
  6. -subj "/CN=exam.local"

5.2 Nginx反向代理配置

编辑考试系统服务器的Nginx配置:

  1. server {
  2. listen 443 ssl;
  3. server_name exam.local;
  4. ssl_certificate /path/to/exam.local.crt;
  5. ssl_certificate_key /path/to/exam.local.key;
  6. ssl_protocols TLSv1.2 TLSv1.3;
  7. location / {
  8. proxy_pass http://localhost:8080; # 考试系统实际端口
  9. proxy_set_header Host $host;
  10. proxy_set_header X-Real-IP $remote_addr;
  11. }
  12. }

5.3 客户端证书信任(Windows示例)

  1. 双击.crt文件
  2. 选择”本地计算机”存储位置
  3. 导入到”受信任的根证书颁发机构”

六、验证与故障排除

6.1 基础验证

  1. # 测试DNS解析
  2. dig exam.local @192.168.1.10
  3. # 测试HTTPS连接
  4. curl -k https://exam.local
  5. # 应返回考试系统首页内容

6.2 常见问题处理

现象 可能原因 解决方案
域名无法解析 DNS服务未启动 检查容器状态:docker ps
HTTPS连接失败 证书未信任 客户端导入证书或使用自签名例外
功能异常 混合HTTP/HTTPS内容 确保所有资源通过HTTPS加载
访问缓慢 DNS缓存问题 清除浏览器DNS缓存或重启Pi-hole

七、高级优化建议

  1. 高可用设计:部署双节点Pi-hole容器,使用Keepalived实现故障转移
  2. 监控告警:集成Prometheus+Grafana监控DNS查询性能
  3. 访问控制:通过Pi-hole的Client Groups功能实现不同部门的访问权限管理
  4. 日志分析:定期导出Pi-hole查询日志,分析内部访问模式

通过本方案的实施,可构建一个安全、易用的局域网考试环境,既满足现代化考试系统的功能需求,又符合企业网络安全规范。建议每季度更新证书并备份配置文件,确保系统长期稳定运行。