下面我将以最经典的BIND9 和更轻量级的dnsmasq 为例,详细说明如何配置。
自建DNS服务器默认是一个递归解析器,当它收到一个不属于自己管辖范围的查询(比如查询www.google.com)时,它会从根域名服务器(.)开始,一步步查询到.com 服务器,再到google.com 的权威服务器,最后拿到IP地址。
这个过程比较慢,而且对根服务器不友好。转发器 的作用就是告诉你的自建DNS:“如果你不知道答案,别自己去根服务器查了,直接去问这个指定的、专业的公共DNS服务器(比如8.8.8.8 或1.1.1.1),它肯定知道,然后把答案告诉我。”
这样做的优点是:
速度快利用了公共DNS的缓存。
减少流量减少了你的服务器发出的DNS查询包。
配置简单只需添加几行配置。
BIND9 是功能最全、最专业的DNS软件。
1. 安装 BIND9(以 Ubuntu/Debian 为例)
sudo apt update sudo apt install bind9
主要编辑两个文件:named.conf.options 和named.conf.local。
编辑主配置文件
sudo nano /etc/bind/named.conf.options在options { ... } 块内添加转发器
options {
// 省略其他默认配置...
// 设置转发器到公共DNS
forwarders {
8.8.8.8; // Google DNS
1.1.1.1; // Cloudflare DNS
223.5.5.5; // 阿里云 DNS
};
// 如果转发器都失效,fallback到标准的递归查询(从根开始)
forward first; // 或者 only
// "first":先尝试转发,失败则自己递归查询。
// "only":只使用转发器,如果失败就直接返回失败。
// 允许哪些客户端来查询(根据你的网络修改)
allow-query {
localhost;
192.168.1.0/24; // 允许你的本地网络
any; // 谨慎使用,这会让你的DNS对公网开放
};
// ... 其他配置
};检查主配置文件语法 sudo named-checkconf 如果语法正确,重启BIND9服务 sudo systemctl restart bind9 设置开机自启 sudo systemctl enable bind9
将你的电脑的DNS服务器设置为自建DNS服务器的IP地址,然后使用nslookup 或dig 命令测试。
查询外网域名 dig @你的DNS服务器IP www.google.com 或者直接修改系统DNS后测试 nslookup www.baidu.com
dnsmasq 非常轻量,配置简单,非常适合在家庭网络或小型网络中作为DNS缓存和DHCP服务器。
1. 安装 dnsmasq(以 Ubuntu/Debian 为例)
sudo apt update sudo apt install dnsmasq
dnsmasq 的主配置文件是/etc/dnsmasq.conf,在修改前,建议备份原配置。
编辑配置文件
sudo nano /etc/dnsmasq.conf找到并修改/添加以下行
# 指定上游DNS服务器(这就是转发器)
server=8.8.8.8
server=1.1.1.1
server=223.5.5.5
# 监听地址(可选,但建议设置)
# 只监听本地和内部网络接口,增强安全性
listen-address=127.0.0.1
listen-address=192.168.1.10 # 你的dnsmasq服务器IP
# 本地域名解析(可选)
# 你可以在这里添加自定义的本地域名,
# address=/myrouter.local/192.168.1.1
# 缓存大小(可选,默认是150)
cache-size=1000 对于最基本的“解析外网域名”需求,你只需要配置server=8.8.8.8 这一行就足够了。
有些系统需要先停止 systemd-resolved(如果它占用了53端口) sudo systemctl stop systemd-resolved sudo systemctl disable systemd-resolved 重启 dnsmasq sudo systemctl restart dnsmasq 设置开机自启 sudo systemctl enable dnsmasq
测试方法与BIND9相同。
dig @你的DNS服务器IP www.qq.com
1、防火墙:确保你的自建DNS服务器的UDP 53 端口 对内部网络(或你的测试客户端)是开放的。
# 用 ufw 开放
sudo ufw allow from 192.168.1.0/24 to any port 532、客户端DNS设置:务必记得将你的电脑、手机或路由器的DNS服务器地址指向你自建的DNS服务器IP,否则测试不会生效。
3、SELinux/AppArmor:在某些系统(如 CentOS)上,SELinux可能会阻止BIND的行为,如果遇到问题,可能需要调整策略或将其设置为宽容模式进行测试。
4、查看日志:如果解析失败,查看日志是首要任务。
BIND9sudo tail -f /var/log/syslog (Debian/Ubuntu)或sudo journalctl -u bind9 -f
dnsmasqsudo tail -f /var/log/syslog 或sudo journalctl -u dnsmasq -f
5、DNS污染/劫持:在中国大陆,某些公共DNS(如8.8.8.8)可能会被干扰或污染,导致解析不稳定,建议优先使用国内可靠的DNS作为转发器,如223.5.5.5(阿里)、119.29.29.29(DNSPod)。
| 特性 | BIND9 | dnsmasq |
| 复杂度 | 高,功能强大,配置复杂 | 低,轻量简洁,配置简单 |
| 适用场景 | 企业、大型网络、需要做权威DNS | 家庭、小型办公室、路由器、本地开发 |
| 配置外网解析 | 在named.conf.options 中配置forwarders | 在dnsmasq.conf 中配置server= |
对于绝大多数个人用户和小型网络,dnsmasq 是更简单、更快速的选择,如果你需要更精细的控制和更强大的功能(如复杂的视图、DNSSEC、区域传输等),则应该选择BIND9。
文章摘自:https://idc.huochengrm.cn/dns/17822.html
评论
钭溪澈
回复自建DNS解析外网域名需配置相应的DNS记录,如A记录指向目标IP,CNAME记录指向外网DNS服务器,并确保本地DNS服务器能访问到这些记录。
哀傲易
回复本文介绍了如何使用BIND9和dnsmasq配置DNS服务器,包括设置转发器以加快解析速度并减少流量,对于个人和小型网络来说推荐使用轻量级的 dnsmasq 配置较为简单;而对于大型企业和需要高级功能的场景则选择 BIND 更为合适 ,在操作过程中需要注意防火墙、客户端 DNS 设置等事项以确保测试成功进行故障排查时查看日志是首要任务以便解决遇到的问题
黄彦慧
回复自建DNS解析外网域名,需配置A记录指向目标IP,确保DNS服务器正确解析。
紫霓云
回复通过配置本地DNS服务器,将外网域名解析到相应的IP地址即可。
实谷蓝
回复配置自建DNS服务器,使用BIND9或dnsmasq作为转发器,可以加速DNS查询并减少对根服务器的压力,BIND9配置复杂,dnsmasq简单易用,适合家庭和小型网络。
那博易
回复自建DNS解析外网域名需要配置相应的DNS记录,包括A记录指向目标IP,CNAME记录指向外网域名,并在本地hosts文件中添加对应映射,确保DNS解析到正确的外网IP地址。
孝尔槐
回复自建DNS解析外网域名需配置DNS服务器,将域名指向对应IP地址,并确保DNS服务器与外网通信畅通,同时配置反向解析记录以完善解析过程。