配置 DNS 服务器并让其他服务器使用它来解析域名

步骤 1:安装 Bind9

首先,我们要在服务器上安装 Bind9 软件,超级简单!打开终端,输入:

apt update
apt install bind9 bind9utils bind9-doc

安装好后,我们来确认一下 Bind9 是否正常运行:

systemctl status bind9

如果看到状态是 active (running),那就说明安装成功!

步骤 2:配置主域名 mxdx.com

接下来,我们要为 mxdx.com 设置 DNS 区域文件。让我们一步步来:

  1. 编辑 Bind9 的配置文件:
vim /etc/bind/named.conf.local
  1. 在文件里添加 mxdx.com 的区域配置:
zone "mxdx.com" {
    type master;
    file "/etc/bind/db.mxdx.com";
};

保存文件(按 Ctrl+O,回车,然后 Ctrl+X 退出)

步骤 3:创建区域文件

现在,我们要为 mxdx.com 创建一个专属的区域文件:

  1. 复制模板文件来创建区域文件:
cp /etc/bind/db.local /etc/bind/db.mxdx.com
  1. 编辑这个新文件:
vim /etc/bind/db.mxdx.com
  1. 在文件里添加域名记录(以下是参考示例,记得根据你的实际需求调整!):
$TTL    604800
@       IN      SOA     dns.mxdx.com. admin.mxdx.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      dns.mxdx.com.
@       IN      A       192.168.1.101
web     IN      A       192.168.1.101
dns     IN      A       192.168.1.101
files   IN      A       192.168.1.102
ftp     IN      A       192.168.1.102
mail    IN      A       192.168.1.102
@       IN      MX 10   mail.mxdx.com.
mysql   IN      A       192.168.1.103
pgsql   IN      A       192.168.1.103
redis   IN      A       192.168.1.103

这些记录都干啥了?

  • $TTL 604800:设置 DNS 缓存时间为 7 天。
  • SOA:定义域名管理信息,比如主 DNS 服务器和管理员邮箱。
  • NS:指定 DNS 服务器是 dns-web.mxdx.com
  • A:把 mxdx.com 解析到 192.168.1.101
  • web A:让 web.mxdx.com 也指向 192.168.1.101
  • dns A:让 dns.mxdx.com 指向 192.168.1.101
  • files Aftp A:把 files.mxdx.comftp.mxdx.com 解析到 192.168.1.102
  • mail A:邮件服务器 mail.mxdx.com 解析到 192.168.1.102
  • MX:指定邮件服务器是 mail.mxdx.com,优先级是 10。
  • mysql Apgsql Aredis A:把这些子域名都解析到 192.168.1.103

步骤4:配置上游DNS解析

功能说明: Bind9 优先查询本地 DNS 记录(如 mxdx.com 区域文件)。若本地无法解析,则将查询转发至上游公共 DNS(如腾讯云 DNS 或 Google DNS),确保本地记录优先,未找到时再查询公共 DNS。

步骤: 编辑 Bind9 的上游配置文件:

sudo vim /etc/bind/named.conf.options

替换为以下内容:

options {
    directory "/var/cache/bind";
    allow-query { localhost; 192.168.1.0/24; };
    recursion yes;
    forwarders {
        119.29.29.29; // 腾讯云公共 DNS
        119.28.28.28; // 腾讯云公共 DNS
        8.8.8.8;      // Google公共 DNS
        8.8.4.4;      // Google公共 DNS
    };
    forward first;
    dnssec-validation auto;
    listen-on-v6 { none; };
};

配置说明

  • allow-query { localhost; 192.168.1.0/24; }:允许本地主机和 192.168.1.0/24 网段的客户端查询 DNS,匹配您的网络环境(根据实际调整)。
  • recursion yes:启用递归查询,允许 Bind9 代表客户端查询上游 DNS。
  • forwarders:指定腾讯云(119.29.29.29, 119.28.28.28)和 Google(8.8.8.8, 8.8.4.4)的公共 DNS 作为上游服务器。
  • forward first:优先解析本地记录,若无法解析则转发至上游 DNS。
  • dnssec-validation auto:启用 DNSSEC 验证,确保查询结果的安全性。
  • listen-on-v6 { none; }:禁用 IPv6 监听(因区域文件未配置 IPv6 记录,需与网络环境一致)。

注意点(记得修改!!!)

  1. 配置修正
    • 网段更正:将 allow-query 中的 192.168.0.0/24 改为自己服务器所在的网段,比如我服务器所在的网段就是192.168.0.0/24,避免客户端无法查询的问题。

步骤 5:检查配置

配置好了,咱们得确认一下有没有写错:

  1. 检查主配置文件:
named-checkconf

如果没有错误提示,说明配置没问题!

  1. 检查区域文件:
named-checkzone mxdx.com /etc/bind/db.mxdx.com

看到 OK 就说明区域文件也完美啦!

步骤 6:重启 Bind9 服务

改好配置后,记得重启 Bind9 让新设置生效:

systemctl restart bind9

再检查一下服务状态:

systemctl status bind9

看到 active (running),就说明一切顺利!

步骤 7:让其他服务器用我们的 DNS

现在,我们要在其他服务器上设置 DNS,让它们使用我们刚配置好的 DNS 服务器:

vim /etc/resolv.conf

添加这一行:

nameserver 192.168.1.101

步骤 8:测试 DNS 解析

最后,我们来测试一下 DNS 解析是不是真的好用!在其它配置好的服务器上运行以下命令:

nslookup dns.mxdx.com
nslookup web.mxdx.com
nslookup files.mxdx.com
nslookup ftp.mxdx.com
nslookup mail.mxdx.com
nslookup mysql.mxdx.com
nslookup pgsql.mxdx.com
nslookup redis.mxdx.com

# 也可以测试一下外网域名的解析
nslookup baidu.com

dns.mxdx.com 为例,预期输出是这样的:

Server:         192.168.1.101
Address:        192.168.1.101#53

Name:   dns.mxdx.com
Address: 192.168.1.101

如果每个域名都能正确解析,恭喜你!DNS 服务器已经完美运行啦!

效果图:

image

永久修改DNS

/etc/resolv.conf文件只是临时修改所用的DNS服务器,持久化修改请编辑 /etc/dhcp/dhclient.conf 文件

vim /etc/dhcp/dhclient.conf

在末尾添加一行 supersede domain-name-servers 223.5.5.5, 223.6.6.6;

然后重启系统,使用 nslookup 验证是否生效

梦葉樱 all right reserved,powered by Gitbook该文件最后修改时间: 2025-07-21 12:54:03

results matching ""

    No results matching ""