校园网维护中,DNS问题往往表现为网页打不开、统一身份认证跳转异常、某学院网站无法访问,但真正定位到DNS层面时,会发现不同区域配置各不相同。有些楼宇直接使用运营商DNS,有些服务器指向自建DNS,还有一些终端手工填写了外部公共DNS。解析入口不统一,内网域名就难以稳定解析,安全策略也无法集中执行。实施校园网络DNS统一管理,需要同时解决权威解析、递归查询、访问控制和运维监控四类问题。

一、统一管理前需要厘清的DNS角色
DNS系统从功能上可以拆成权威DNS和递归DNS。权威DNS负责对外发布校园网内部域名,比如 campus.edu.cn 下所有A记录、CNAME记录、MX记录;递归DNS负责代替客户端向外网发起完整解析过程,并缓存结果。很多校园网早期只部署了一台DNS服务器,把权威和递归混在一起,既对内提供解析,又对外部开放递归查询,这会造成两类问题:权威服务暴露给不需要的客户端,递归服务可能被利用为放大攻击的开放解析器。
因此统一管理的第一步不是直接上设备,而是摸清现有解析关系。网络管理员需要整理清楚校园网内部对外提供服务的域名有哪些,哪些系统只能在内网访问,哪些需要从校外访问;哪些网段允许进行递归查询,哪些网段只允许访问校内权威解析。只有把这些信息梳理成策略表,后续配置才不会因为边界不清反复返工。
另一个容易混淆的概念是统一入口不等于单点服务。统一管理可以给所有终端推送同一个DNS地址,例如 10.1.1.10,但背后需要至少两台服务器通过主备或集群方式提供高可用。否则当唯一DNS故障时,整个校园网上网体验都会受影响。
二、统一管理架构与高可用设计
适合校园网的DNS架构通常分为核心层和接入层。核心层在中心机房部署两台DNS服务器,其中一台作为主节点,另一台作为备节点,两者通过VRRP虚拟出一个统一的虚拟IP地址,例如 10.1.1.10。所有DHCP模板、静态终端、服务器网卡配置中的DNS地址都指向这个虚拟IP。主节点正常时承载全部查询请求,备节点通过区域同步保持数据一致;主节点故障时虚拟IP漂移到备节点,客户端无需修改任何配置。
如果校园网规模较大,存在多个校区或独立出口,可以将DNS服务进一步下沉到分校区。分校区部署只读缓存DNS,通过 forwarders 指向核心递归DNS或运营商DNS。这样既能减少跨校区链路流量,也能让不同校区获得就近解析。对于更极端的可扩展场景,可以考虑使用Anycast技术,在多个机房发布相同的DNS服务地址,由路由协议选择最近节点,但Anycast对网络设备配置和运维能力要求更高,多数校园网使用VRRP加分校区缓存即可满足。
需要注意的是,权威DNS和递归DNS最好部署在独立服务实例上。即使物理服务器只有两台,也可以通过不同服务IP或容器拆分。权威服务只为 campus.edu.cn 区域提供权威应答,递归服务只对内部客户端开放。这样一旦递归服务被攻击,权威解析仍然可以保持可用;反之亦然。
三、BIND统一解析配置示例
BIND是目前校园网中最常用的DNS软件,配置灵活,支持ACL、视图、转发和DNSSEC校验。下面示例假设校园网使用 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 三个私网段作为内部网络,主DNS地址为 10.1.1.10,备DNS地址为 10.1.2.10。核心文件 named.conf 可以这样组织:
acl "campus_net" {
10.0.0.0/8;
172.16.0.0/12;
192.168.0.0/16;
};
options {
directory "/var/cache/bind";
listen-on { any; };
listen-on-v6 { none; };
recursion yes;
allow-query { campus_net; };
allow-recursion { campus_net; };
allow-transfer { 10.1.2.10; };
forwarders {
223.5.5.5;
119.29.29.29;
};
forward only;
dnssec-validation auto;
response-rate-limit {
responses-per-second 10;
window 5;
};
};
view "internal" {
match-clients { campus_net; };
recursion yes;
zone "campus.edu.cn" {
type master;
file "/etc/bind/zones/db.campus.edu.cn";
allow-update { none; };
};
include "/etc/bind/named.conf.default-zones";
};
上面配置中,acl "campus_net" 定义了内部网段。allow-query 和 allow-recursion 都限制为只允许校园网地址查询,allow-transfer 则只允许备用DNS从主DNS同步区域数据。forwarders 指定外部递归查询交给阿里DNS和腾讯DNS,forward only 表示当前服务器不自行从根开始迭代,统一走上游转发。这样出口递归行为可控,便于审计。
区域文件 db.campus.edu.cn 记录校园网内部各种业务系统的域名映射,例如统一身份认证、教务系统、VPN系统等。示例如下:
$TTL 3600
@ IN SOA ns1.campus.edu.cn. admin.campus.edu.cn. (
2025010101 ; serial
7200 ; refresh
3600 ; retry
1209600 ; expire
3600 ) ; negative cache TTL
;
@ IN NS ns1.campus.edu.cn.
@ IN NS ns2.campus.edu.cn.
@ IN A 10.1.1.10
ns1 IN A 10.1.1.10
ns2 IN A 10.1.2.10
portal IN A 10.20.1.20
jw IN A 10.20.2.20
vpn IN A 10.30.1.30
mail IN A 10.40.1.40
每次修改区域文件后,需要递增serial值,并使用 rndc reload campus.edu.cn 让配置生效,主备节点会自动根据 NOTIFY 和区域传输同步数据。统一管理还应该把这一修改过程放入配置版本控制系统,例如使用Git管理 /etc/bind/zones 目录,这样每一次域名变更都有记录可查。
四、安全加固与访问控制
DNS统一管理不能只考虑解析功能,还要防止校园网内的异常流量把DNS服务拖垮。除了前面配置中提到的 response-rate-limit,还可以启用DNS Cookies、限制DNS消息大小、关闭不需要的查询类型。对于必须向校外提供解析的域名,建议单独部署外部DNS服务器,或者使用云解析服务,不要在内部权威服务器上直接暴露给公网。
内部域名和外部域名可以通过视图分离。BIND的 view 能够根据客户端源地址返回不同结果。比如 campus.edu.cn 对校园网用户返回内网地址 10.20.1.20,对校外用户返回出口映射后的公网地址。这种分割在校园网中非常实用,既能保证内网访问效率,又能减少不必要的公网流量。但视图配置要在区域定义时严格区分,避免把内网视图中的记录泄漏到外部视图。
DNS日志同样重要。可以开启 querylog 并定期分析查询日志,关注短时间内大量NXDOMAIN、异常长的域名查询、同一源地址的高频请求。这些现象往往意味着扫描、隧道通信或缓存投毒尝试。借助 rndc querylog 可以在线开启日志,配合 fail2ban 或防火墙规则对异常源地址进行封禁。
另外一个容易被忽视的点是终端DNS地址下发。DHCP服务器中除了下发统一DNS地址外,建议同时下发备用DNS地址,但不要混入运营商公共DNS。很多终端会自动选择响应更快的DNS服务器,如果学生手工修改DNS为公共DNS,内网域名解析就会失败。统一管理方案需要在接入层做好策略控制,比如在核心交换机上对UDP 53流量进行重定向或监控,引导所有DNS请求走向统一入口。
五、日常运维与监控告警
DNS服务上线后,需要建立自动化的健康检查机制。管理员可以编写脚本,模拟客户端查询关键域名,判断返回结果是否与预期一致。下面是一个简单的Bash检查脚本,可放到 crontab 中每五分钟执行一次:
#!/bin/bash
# 校园DNS解析健康检查脚本
DNS_SERVER=10.1.1.10
DOMAIN=portal.campus.edu.cn
EXPECTED_IP=10.20.1.20
result=$(dig +short +time=2 +tries=1 @${DNS_SERVER} ${DOMAIN} A | tail -1)
if [ "${result}" = "${EXPECTED_IP}" ]; then
echo "OK: ${DOMAIN} -> ${result}"
else
echo "FAIL: ${DOMAIN} 解析异常,当前结果:${result}" >&2
exit 1
fi
脚本不只检查DNS服务是否响应,还校验解析结果是否正确。实际运维中可以多设置几个关键域名,例如 portal.campus.edu.cn、vpn.campus.edu.cn、mail.campus.edu.cn,并把失败信息推送到企业微信、钉钉或邮件告警。
除了主动探测,还应定期做主备切换演练。许多学校只有在DNS故障时才发现备用节点的区域数据没有同步成功。切换演练可以按照以下步骤进行:先手动停止主节点上的 named 服务,观察虚拟IP是否正常漂移,再在客户端验证关键域名解析是否成功,最后恢复主节点并检查区域同步日志。如果条件允许,每学期至少进行一次完整演练,并将演练结果记录到运维文档中。
最后,统一管理方案落地后,所有的DNS变更都应走标准化流程。域名新增、修改、删除需要提交变更申请,由网络管理员在版本控制系统中更新区域文件,经过测试环境验证后同步到生产环境。这样校园网络DNS才能从故障驱动转为策略驱动,真正提升校园网的解析稳定性和安全性。

