返回文章列表
服务器

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

开开
2025-11-20
2个月前
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. 1. 权威 DNS(Authoritative)
  2. 2. 递归 DNS(Recursive / 缓存 DNS)
  3. 3. 转发器(Forwarder)

在家庭 / 小办公室最常见的模式是:

BIND 同时做内网域名的权威 DNS + 外网域名的缓存/转发 DNS

BIND 的基础配置构成

BIND 的配置主要分三块:

  1. 1. 主配置文件:常见路径:
  2. 2. Zone 文件:比如 homelab.local.zone,里边写具体域名记录。
  3. 3. 服务启动方式:

在 Linux 上部署 BIND(最主流场景)

这里以两大阵营为例:Debian/UbuntuCentOS/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 bind9

5)客户端指向你的 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. 1. 从 ISC 下载 Windows 版安装包(目前很多版本已经不再提供官方 Win 版,需注意支持情况)。
  2. 2. 安装后会有 named.conf 与服务管理器。
  3. 3. 配置方式和 Linux 相同,只是路径不同。

但对于个人 / 实验 / 家庭网络整体建议:

Windows 只作为客户端,DNS 服务交给 Linux / Docker / 群晖这类长期在线设备。

群晖就更简单了,有现成的 DNS 套件,据说底层封装的也是 BIND,可参考一文搞懂 Split DNS:用群晖实现内外网同域名自动解析!

使用与安全建议

  1. 1. 不要忘记改 Serial 序列号每次改 Zone 文件,要把 SOA 里的 Serial +1,否则 BIND 可能认为没有变更。
  2. 2. 放行防火墙 53 端口
  3. 3. 内网和公网同域名
  4. 4. 限制递归查询 options { recursion yes; allow-recursion { localhost; 192.168.31.0/24; // 仅允许内网 }; };
  5. 5. 防止 DNS 放大攻击 options { rate-limit { responses-per-second 5; window 5; }; };
  6. 6. 启用 DNSSEC# 生成密钥dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.com# 签名区域dnssec-signzone -o example.com db.example.com
  7. 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 服务器性能
  • • 实施适当的安全策略

本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。

分享文章
合作伙伴

本站所有广告均是第三方投放,详情请查询本站用户协议