BIND 有什么用?如何配置BIND ?

为什么部署自己的 DNS 服务器?
日常我们上网,输入 www.baidu.com,能访问到网页,全靠 DNS 帮我们把域名解析成 IP 地址,DNS 的作用可参考DNS 是什么?彻底搞懂互联网的“电话簿”看懂 DNS 里的 A 记录、CNAME、MX……这些术语到底啥意思?一般家用路由会用运营商的 DNS 服务器,但如果你想玩点不一样的:
- • 想要 内网域名(如 nas.homelab.local)?
- • 想做 统一的内网服务入口(如 dsm.homelab.local 指到群晖、wg.homelab.local 指到 VPN)?
- • 想玩 局域网实验、内网穿透、分流、广告过滤?
那最稳妥的方案就是:
搭建一台属于自己的 DNS 服务器,而 BIND 就是业界最老牌、最通用的一款。
BIND 能干什么?
BIND(Berkeley Internet Name Domain)是一个开源 DNS 服务器软件,它由美国加州大学伯克利分校开发,它可以扮演以下几种角色:
- 1. 权威 DNS(Authoritative)
- 2. 递归 DNS(Recursive / 缓存 DNS)
- 3. 转发器(Forwarder)
在家庭 / 小办公室最常见的模式是:
BIND 同时做内网域名的权威 DNS + 外网域名的缓存/转发 DNS
BIND 的基础配置构成
BIND 的配置主要分三块:
- 1. 主配置文件:常见路径:
- 2. Zone 文件:比如 homelab.local.zone,里边写具体域名记录。
- 3. 服务启动方式:
在 Linux 上部署 BIND(最主流场景)
这里以两大阵营为例:Debian/Ubuntu 和 CentOS/RHEL。
Debian / Ubuntu
1)安装
sudo apt updatesudo apt install bind9 bind9-utils bind9-doc安装完成后,主要文件位置:
- • /etc/bind/named.conf 及 named.conf.options、named.conf.local
- • Zone 文件可以放在 /etc/bind/ 或单独目录(比如 /var/lib/bind/)
2)配置全局选项(转发器 + 递归)
编辑配置文件:
/etc/bind/named.conf.options
options { directory "/var/cache/bind"; // 只允许局域网网段递归 allow-recursion { 127.0.0.1; 192.168.31.0/24; }; // 允许查询的网段 allow-query { any; }; // 转发去上游 DNS forwarders { 223.5.5.5; 8.8.8.8; }; dnssec-validation auto; listen-on { 127.0.0.1; 192.168.31.125; }; // 根据你服务器 IP 调整};3)添加一个自定义 Zone(比如你的内网域名)
编辑配置文件:
/etc/bind/named.conf.local
zone "homelab.local" { type master; file "/etc/bind/homelab.local.zone";};然后创建 Zone 文件:
/etc/bind/homelab.local.zone
$TTL 86400@ IN SOA ns1.homelab.local. admin.homelab.local. ( 2025011501 ; Serial 序列号,改动要+1 3600 ; Refresh 1800 ; Retry 604800 ; Expire 86400 ) ; Minimum IN NS ns1.homelab.local.ns1 IN A 192.168.31.125dsm IN A 192.168.31.125nas IN A 192.168.31.126wg IN A 192.168.31.10@ IN A 192.168.31.125 ; homelab.local 根域直接指向群晖注意:admin.homelab.local. 这个邮箱写法,是把 @ 换成点,并以 . 结尾。
4)检查配置并启动
sudo named-checkconfsudo named-checkzone homelab.local /etc/bind/homelab.local.zone无报错后:
sudo systemctl restart bind9sudo systemctl enable bind95)客户端指向你的 DNS
在局域网其他设备上:
- • 手动设置 DNS 为:192.168.31.125
- • 测试:
nslookup dsm.homelab.local 192.168.31.125dig dsm.homelab.local @192.168.31.125如果返回 192.168.31.125 就成功了。
4.2 CentOS / RHEL 系列
1)安装
sudo yum install bind bind-utils -y主要配置文件:/etc/named.conf默认会包含 /etc/named.rfc1912.zones 等子配置。
2)修改 /etc/named.conf 中的 options
options { listen-on port 53 { 127.0.0.1; 192.168.31.125; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; allow-recursion { 127.0.0.1; 192.168.31.0/24; }; forwarders { 223.5.5.5; 8.8.8.8; }; dnssec-enable yes; dnssec-validation yes;};3)添加 Zone
在 /etc/named.rfc1912.zones 末尾添加:
zone "homelab.local" IN { type master; file "homelab.local.zone";};Zone 文件:/var/named/homelab.local.zone
$TTL 86400@ IN SOA ns1.homelab.local. admin.homelab.local. ( 2025011501 3600 1800 604800 86400 ) IN NS ns1.homelab.local.ns1 IN A 192.168.31.125dsm IN A 192.168.31.125nas IN A 192.168.31.126wg IN A 192.168.31.10@ IN A 192.168.31.125注意给文件合适权限:
sudo chown root:named /var/named/homelab.local.zonesudo chmod 640 /var/named/homelab.local.zone检查并启动:
sudo named-checkconfsudo named-checkzone homelab.local /var/named/homelab.local.zonesudo systemctl restart namedsudo systemctl enable named在 Docker 中部署 BIND
如果你不想污染宿主机环境,可以用 Docker 跑一个 BIND。
使用现成镜像示例
docker run -d \ --name bind9 \ --restart=always \ -p 53:53/tcp -p 53:53/udp \ -v /opt/bind/etc:/etc/bind \ -v /opt/bind/cache:/var/cache/bind \ internetsystemsconsortium/bind9:9.18然后在 /opt/bind/etc 下按前面 Debian 的写法准备配置文件和 Zone 文件,重启容器。
docker restart bind9这样升级 /迁移非常方便,且容器里配置相关的目录已挂载到宿主机。
macOS 平台部署
使用 Homebrew 安装
# 安装Homebrew(如未安装)/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"# 安装BINDbrew install bind配置文件位置
- • 配置文件:/usr/local/etc/named.conf
- • 区域文件:/usr/local/var/named/
基础配置
# 创建配置文件sudo nano /usr/local/etc/named.conf配置内容参考 Linux 版本,路径调整为 macOS 对应路径。
启动服务
# 启动BINDsudo brew services start bind# 或手动启动sudo named -c /usr/local/etc/named.conf在 Windows 上部署 BIND?
一般不太推荐在 Windows 上跑 BIND,原因:
- • Windows 有原生 DNS Server(随 AD 一起,用于 AD 场景,很好用);
- • BIND 在 Windows 上维护成本较高,很少是主流方案。
如果你硬要 Windows + BIND,大致路径是:
- 1. 从 ISC 下载 Windows 版安装包(目前很多版本已经不再提供官方 Win 版,需注意支持情况)。
- 2. 安装后会有 named.conf 与服务管理器。
- 3. 配置方式和 Linux 相同,只是路径不同。
但对于个人 / 实验 / 家庭网络整体建议:
Windows 只作为客户端,DNS 服务交给 Linux / Docker / 群晖这类长期在线设备。
群晖就更简单了,有现成的 DNS 套件,据说底层封装的也是 BIND,可参考一文搞懂 Split DNS:用群晖实现内外网同域名自动解析!
使用与安全建议
- 1. 不要忘记改 Serial 序列号每次改 Zone 文件,要把 SOA 里的 Serial +1,否则 BIND 可能认为没有变更。
- 2. 放行防火墙 53 端口
- 3. 内网和公网同域名
- 4. 限制递归查询 options { recursion yes; allow-recursion { localhost; 192.168.31.0/24; // 仅允许内网 }; };
- 5. 防止 DNS 放大攻击 options { rate-limit { responses-per-second 5; window 5; }; };
- 6. 启用 DNSSEC# 生成密钥dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com# 签名区域dnssec-signzone -o example.com db.example.com
- 7. 版本隐藏options {version "Not Available";};
常用管理命令
测试 DNS 解析
以下命令都是在 DNS 服务所在主机上运行,localhost 代指 DNS 服务器,如果在客户端上测试则换为实际的 IP 地址即可。
# 使用 dig 命令测试dig @localhost example.com# 使用 nslookup 测试nslookup example.com localhost# 查询特定记录类型dig @localhost example.com MXdig @localhost example.com NS重载配置
# Linuxsudo rndc reload# Windowscd "C:\Program Files\ISC BIND 9\bin"rndc reload查看日志
# Ubuntu/Debiansudo tail -f /var/log/syslog | grep named# CentOS/RHELsudo journalctl -u named -f# 或查看 BIND 专用日志sudo tail -f /var/log/named/named.log写在最后
通过本文的详细介绍,相信你已经掌握了在各个平台上部署 BIND DNS 服务器的方法。DNS 服务器是网络基础设施的重要组成部分,合理配置和管理 DNS 服务器对于网络的稳定性和安全性至关重要。
在实际部署中,建议:
- • 始终保持 BIND 版本更新
- • 定期备份配置文件
- • 监控 DNS 服务器性能
- • 实施适当的安全策略
本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。



