一、配置背景与核心价值
在局域网环境中部署考试系统时,直接使用IP地址访问存在三大痛点:记忆成本高、管理分散、安全性不足。通过配置本地域名与HTTPS加密,可实现以下核心价值:
- 统一访问入口:将考试系统绑定至易记域名(如exam.local),替代冗长的IP+端口组合(如192.168.1.100:8080)
- 功能完整性保障:摄像头监考、音频录制等高级功能依赖HTTPS协议,未加密传输会导致功能失效
- 数据安全加固:防止局域网内的中间人攻击与数据篡改,避免浏览器”不安全”警告影响用户体验
- 集中化管理:通过DNS服务统一管理多个内部服务域名,降低维护复杂度
二、技术方案选型对比
当前主流的局域网域名解析方案包含两类:
- 硬件路由器方案:利用路由器内置DNS功能(如DDNS)
- 优点:无需额外服务器
- 缺点:配置界面简陋,缺乏高级功能(如广告拦截、访问控制)
- 软件DNS服务方案:部署专用DNS服务器(如Pi-hole、Technitium DNS)
- 优点:功能丰富、可扩展性强
- 缺点:需要独立服务器资源
推荐方案:采用Pi-hole开源方案,其优势在于:
- 支持自定义本地域名解析
- 内置广告拦截功能提升网络质量
- 提供详细的访问日志与统计
- 跨平台支持(Docker/Linux原生)
三、环境准备与架构设计
3.1 硬件环境要求
- 一台闲置的Linux服务器(物理机/虚拟机均可)
- 推荐配置:2核CPU、2GB内存、20GB存储空间
- 网络要求:与考试系统同属一个局域网段
3.2 软件架构设计
客户端设备 → 局域网DNS查询 → Pi-hole服务器 → 考试系统服务器↑(本地域名解析)
采用分层设计:
- DNS解析层:Pi-hole处理所有域名查询请求
- 应用服务层:考试系统运行在独立服务器
- 证书服务层:可选自签名证书或企业CA证书
3.3 目录结构规范
推荐采用Docker部署方式,统一管理配置文件:
mkdir -p ~/docker/pihole/config├── custom.list # 自定义域名解析规则├── dnsmasq.d/ # DNS配置扩展目录│ ├── local.conf # 本地域名重定向规则│ └── upstream.conf # 上游DNS服务器配置└── env # 环境变量配置文件
四、详细部署流程
4.1 Docker环境搭建
# 安装Docker(Ubuntu示例)sudo apt updatesudo apt install docker.io docker-composesudo systemctl enable docker# 验证安装docker --version# 预期输出:Docker version 24.0.x, build abc1234
4.2 Pi-hole容器部署
创建docker-compose.yml文件:
version: '3'services:pihole:image: pihole/pihole:latestports:- "53:53/tcp"- "53:53/udp"- "80:80"environment:TZ: 'Asia/Shanghai'WEBPASSWORD: 'your_admin_password'ServerIP: '192.168.1.10' # 服务器内网IPvolumes:- './config/custom.list:/etc/pihole/custom.list'- './config/dnsmasq.d/:/etc/dnsmasq.d/'cap_add:- NET_ADMINrestart: unless-stopped
启动容器:
docker-compose up -d
4.3 本地域名配置
编辑config/dnsmasq.d/local.conf:
# 考试系统域名解析address=/exam.local/192.168.1.20address=/api.exam.local/192.168.1.20# 阻止广告域名(示例)address=/doubleclick.net/0.0.0.0
4.4 DHCP服务迁移(可选)
若需完全接管局域网DNS解析:
- 登录路由器管理界面
- 关闭DHCP服务
- 在Pi-hole中启用DHCP:
# 修改环境变量echo "DHCP_ACTIVE=true" >> config/.envdocker-compose restart
- 设置静态IP分配规则(确保考试系统IP固定)
五、HTTPS证书配置
5.1 自签名证书生成
mkdir -p ~/certsopenssl req -x509 -nodes -days 3650 \-newkey rsa:2048 \-keyout ~/certs/exam.local.key \-out ~/certs/exam.local.crt \-subj "/CN=exam.local"
5.2 Nginx反向代理配置
编辑考试系统服务器的Nginx配置:
server {listen 443 ssl;server_name exam.local;ssl_certificate /path/to/exam.local.crt;ssl_certificate_key /path/to/exam.local.key;ssl_protocols TLSv1.2 TLSv1.3;location / {proxy_pass http://localhost:8080; # 考试系统实际端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
5.3 客户端证书信任(Windows示例)
- 双击
.crt文件 - 选择”本地计算机”存储位置
- 导入到”受信任的根证书颁发机构”
六、验证与故障排除
6.1 基础验证
# 测试DNS解析dig exam.local @192.168.1.10# 测试HTTPS连接curl -k https://exam.local# 应返回考试系统首页内容
6.2 常见问题处理
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 域名无法解析 | DNS服务未启动 | 检查容器状态:docker ps |
| HTTPS连接失败 | 证书未信任 | 客户端导入证书或使用自签名例外 |
| 功能异常 | 混合HTTP/HTTPS内容 | 确保所有资源通过HTTPS加载 |
| 访问缓慢 | DNS缓存问题 | 清除浏览器DNS缓存或重启Pi-hole |
七、高级优化建议
- 高可用设计:部署双节点Pi-hole容器,使用Keepalived实现故障转移
- 监控告警:集成Prometheus+Grafana监控DNS查询性能
- 访问控制:通过Pi-hole的Client Groups功能实现不同部门的访问权限管理
- 日志分析:定期导出Pi-hole查询日志,分析内部访问模式
通过本方案的实施,可构建一个安全、易用的局域网考试环境,既满足现代化考试系统的功能需求,又符合企业网络安全规范。建议每季度更新证书并备份配置文件,确保系统长期稳定运行。