服务器角色决定dns服务的配置方式——是做本地缓存、内网权威解析,还是对外提供递归服务,每种角色对应不同的软件选型、端口策略和安全边界。
明确服务器角色再选型
不同角色对稳定性、性能和功能要求差异很大:
- 本地缓存/转发器(推荐多数场景):如 dnsmasq 或 systemd-resolved(轻量、低开销),适合终端设备或小型内网。作用是加速解析、支持 hosts 映射、自定义域名重定向(如 dev.local → 192.168.1.100)。
- 内网权威服务器:如 BIND9 或 CoreDNS,用于管理企业内部域名(如 hr.internal、git.ops)。需配置 zone 文件、SOA 记录、允许特定 IP 查询(allow-query { 192.168.0.0/16; };),不开放递归查询。
- 公网递归解析器(慎用):面向互联网用户提供 DNS 查询服务。需严格限制查询来源(避免开放递归被滥用为放大攻击源),启用响应速率限制(RRL)、DNSSEC 验证,并绑定公网 IP 和 53 端口(UDP/TCP)。
按角色配置关键参数
以常见组合为例:
- dnsmasq(缓存+内网泛解析):
listen-address=127.0.0.1,192.168.5.1 —— 只监听本地和内网地址
address=/myapp.internal/192.168.5.20 —— 泛域名映射
server=223.5.5.5 —— 指定上游 DNS(阿里 DNS)
cache-size=1500 —— 提升重复查询效率
- BIND9(内网权威主服务器):
recursion no; —— 关闭递归,仅响应已授权区域请求
allow-transfer { none; }; —— 禁止区域传输(防数据泄露)
zone "dev.company" 块中指定 file "/etc/bind/db.dev.company";,并在该文件中写入 A、CNAME 等记录
必须同步调整客户端与网络策略
服务配好只是第一步,客户端才能真正用上:
- 修改 /etc/resolv.conf,把 nameserver 指向本机或内网 DNS 服务器 IP(如 nameserver 192.168.5.1);建议用 chattr +i /etc/resolv.conf 锁定,防止 NetworkManager 覆盖。
- 防火墙放行 UDP/TCP 53 端口(仅限可信网段):
sudo ufw allow from 192.168.5.0/24 to any port 53 proto udp
- 验证是否生效:
dig @192.168.5.1 myapp.internal(直连测试)
nslookup test.dev.company(系统级解析测试)
安全与可观测性不能省
无论哪种角色,以下三点直接影响可用性:
- 时间同步:DNSSEC 验证依赖准确时间,务必运行 systemd-timesyncd 或 chrony 并校准。
- 日志分级:dnsmasq 开启 log-queries,BIND9 配置 logging 子句,记录查询来源、响应码、耗时。
- 健康检查:用 systemctl is-active dnsmasq 或 rndc status(BIND9)加入监控脚本,异常时告警。
|