DNS转发器配置需分三步:一用mosdns部署DoT/DoH加密转发防劫持;二通过match_domain插件实现解析白名单,仅放行指定域名;三用防火墙限制客户端访问白名单,确保仅可信设备可用。

新手配置高安全级别服务器的 DNS 转发器和解析白名单,核心是“转发可控 + 解析可管 + 访问可信”。不追求一步到位,而是分三步走:先配好加密转发器(防劫持、防监听),再限制哪些域名能被解析(即解析白名单),最后确保只有授权客户端能使用该 DNS 服务(即访问白名单)。三者缺一不可。
一、用 mosdns 部署带 DoT/DoH 的安全转发器
推荐使用 mosdns(轻量、开源、支持现代加密协议),比传统 BIND 或 Windows DNS 更适合新手兼顾安全与易用:
- 安装方式选 Docker(避免编译和依赖冲突):
docker run -d --name mosdns -p 53:53/udp -p 53:53/tcp -p 5353:5353/tcp -v /etc/mosdns:/etc/mosdns --restart unless-stopped mosdns:latest - 关键配置(
/etc/mosdns/config.yaml)示例:
- 插件 use: "forward" → upstreams: ["https://1.1.1.1/dns-query", "tls://8.8.8.8"]
- 插件 use: "block" → rules_file: "/etc/mosdns/blocklist.txt"(用于后续加黑名单) - 务必启用 DoT(DNS over TLS)或 DoH(DNS over HTTPS)上游,禁用纯 UDP 53 转发——这是防中间人攻击的第一道防线。
二、实现“解析白名单”:只允许特定域名被解析
注意:标准 DNS 协议本身不支持“解析白名单”,必须靠转发器逻辑拦截。mosdns 可通过 rule-based filtering 实现:
免费 DNS 与邮件安全分析(IntoDNS.ai):包括 DNSSEC、SPF、DKIM、DMARC、MTA-STS、BIMI、SMTP STARTTLS、FCrDNS、黑名单、发件人要求及报告。
- 在
config.yaml中添加 rule 插件:- use: "match_domain"<br> args:<br> domain_list: [".example.com", ".internal.company", "api.paymentservice.net"]<br> policy: "allow" - 所有未显式列出的域名查询,将被直接拒绝(返回 NXDOMAIN 或空响应),不会转发到上游。
- 域名写法支持通配符(如
.company匹配所有子域),但不建议用*全放行——违背白名单本意。
三、绑定“客户端访问白名单”:仅允许可信设备使用此 DNS
DNS 服务若对全网开放,等于把解析控制权交出去。必须限制谁可以向它发起查询:
-
操作系统防火墙层面(最可靠):
Linux(ufw):sudo ufw allow from 192.168.10.0/24 to any port 53 proto udp
Windows:在“高级安全 Windows Defender 防火墙”中新建入站规则,协议选 UDP/TCP,端口 53,作用域设为“仅这些 IP 地址”(填内网管理段)。 - 不要依赖 DNS 服务自身的 ACL(如 BIND 的
allow-query),它容易被绕过;防火墙是第一道也是最后一道网络层屏障。 - 若部署在云服务器上,还需同步配置云平台安全组,只放行指定 CIDR 段的 53 端口入向流量。
四、验证与持续维护要点
配置完成不是终点,需定期确认有效性:
- 用
dig @your-dns-ip example.com +short测试白名单内域名是否正常返回;
用dig @your-dns-ip badsite.xyz +short测试白名单外域名是否无响应或返回 NXDOMAIN。 - 检查日志(mosdns 默认输出到 stdout,可用
docker logs mosdns):确认拒绝记录是否包含 “blocked by domain rule”。 - 每季度更新一次上游 DoH/DoT 地址列表(例如 Cloudflare、Quad9 官方会公告变更),并测试连通性。
- 白名单域名如有新增,必须同步更新
domain_list并重载配置(docker kill -s HUP mosdns)。

















