Linux系统如何一步步架设DNS服务器的详细步骤?

在Linux系统中架设DNS(域名系统)服务器,通常使用BIND(Berkeley Internet Name Domain)软件,它是目前最广泛使用的DNS服务器软件之一,以下以Ubuntu/Debian和CentOS/RHEL系统为例,详细说明DNS架设的完整步骤。

linux如何架设dns

环境准备

  1. 系统要求

    • 推荐使用稳定版的Linux发行版(如Ubuntu 20.04+、CentOS 8+)。
    • 服务器需配置静态IP地址(192.168.1.100),确保网络连通性。
    • 关闭防火墙或开放DNS相关端口(TCP/UDP 53),若使用firewalld(CentOS)执行:
      firewall-cmd --permanent --add-service=dns
      firewall-cmd --reload

      若使用ufw(Ubuntu)执行:

      ufw allow 53/tcp
      ufw allow 53/udp
  2. 安装工具
    安装bind9(Ubuntu/Debian)或bind(CentOS/RHEL)及管理工具:

    • Ubuntu/Debian
      apt update && apt install -y bind9 bind9utils bind9-doc
    • CentOS/RHEL
      yum install -y bind bind-utils

BIND核心配置文件

BIND的主要配置文件位于/etc/bind/(Ubuntu)或/etc/named/(CentOS),核心文件包括:

  • named.conf:主配置文件,定义全局参数和区域引用。
  • 区域文件:存储具体域名解析记录(如正向区域、反向区域)。

编辑主配置文件named.conf

备份原文件后编辑:

cp /etc/bind/named.conf /etc/bind/named.conf.bak
vim /etc/bind/named.conf

关键配置如下:

    directory "/var/cache/bind";  # 区域文件存放目录
    allow-query { any; };         # 允许查询的客户端(any表示允许所有,可限制为内网IP,如192.168.1.0/24)
    recursion yes;                # 允许递归查询
    forwarders { 8.8.8.8; 1.1.1.1; }; # 上游DNS服务器(可选,用于转发无法解析的请求)
};
# 定义正向区域(示例:example.com)
zone "example.com" {
    type master;                  # 主DNS服务器
    file "/etc/bind/db.example.com"; # 区域文件路径
    allow-update { none; };       # 禁止动态更新(安全考虑)
};
# 定义反向区域(示例:192.168.1.0/24)
zone "1.168.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.168.1";
};```
#### **2. 创建区域文件**
**正向区域文件**(`/etc/bind/db.example.com`):  
```bash
cp /etc/bind/db.local /etc/bind/db.example.com
vim /etc/bind/db.example.com
```  示例:  
```;
; BIND data file for example.com
;
$TTL    604800
@       IN      SOA     ns1.example.com. admin.example.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.example.com.
@       IN      A       192.168.1.100
ns1     IN      A       192.168.1.100
www     IN      A       192.168.1.101
mail    IN      A       192.168.1.102

说明

linux如何架设dns

  • SOA记录:起始授权机构,包含序列号(Serial,修改后需递增)、刷新时间等。
  • NS记录:域名服务器记录,指向ns1.example.com。
  • A记录:正向解析,将域名映射到IP地址。

反向区域文件/etc/bind/db.192.168.1):

cp /etc/bind/db.127 /etc/bind/db.192.168.1
vim /etc/bind/db.192.168.1
```  示例:  
```;
; BIND reverse data file for 192.168.1.0/24
;
$TTL    604800
@       IN      SOA     ns1.example.com. admin.example.com. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.example.com.
100     IN      PTR     ns1.example.com.
101     IN      PTR     www.example.com.
102     IN      PTR     mail.example.com.

说明

  • 反向区域文件名需符合in-addr.arpa格式,此处为168.192.in-addr.arpa,简化为db.192.168.1
  • PTR记录:反向解析,将IP地址映射到域名。

启动与测试服务

  1. 启动DNS服务

    • Ubuntu/Debian
      systemctl start bind9
      systemctl enable bind9  # 开机自启
    • CentOS/RHEL
      systemctl start named
      systemctl enable named
  2. 检查服务状态

    systemctl status bind9  # 或 named

    若启动失败,查看日志:/var/log/syslog(Ubuntu)或/var/log/messages(CentOS)。

  3. 测试解析
    使用nslookupdighost工具测试:

    • 正向解析测试
      nslookup www.example.com 192.168.1.100

      预期输出:www.example.com A 192.168.1.101

      linux如何架设dns

    • 反向解析测试
      nslookup 192.168.1.101 192.168.1.100

      预期输出:1.168.192.in-addr.arpa PTR www.example.com

常见配置优化

  1. 限制查询范围
    出于安全考虑,建议将allow-query限制为内网IP,避免公网随意查询:

        allow-query { 192.168.1.0/24; localhost; };
    };```  
  2. 启用DNSSEC(可选)
    DNSSEC(域名系统安全扩展)可防止DNS欺骗,配置较复杂,需生成密钥对并添加区域记录,此处略(可参考BIND官方文档)。

  3. 日志配置
    named.conf中添加日志条目,记录查询和错误信息:

        channel default_log {
            file "/var/log/named/named.log" versions 3 size 10m;
            severity info;
            print-time yes;
        };
        category default { default_log; };
    };```  
    创建日志目录并授权:  
    ```bash
    mkdir -p /var/log/named && chown bind:bind /var/log/named

DNS记录类型说明

记录类型 作用 示例
A 将域名映射到IPv4地址 www IN A 192.168.1.101
AAAA 将域名映射到IPv6地址 ipv6 IN AAAA 2408:8207:8f3f::1
CNAME 别名记录,指向另一个域名 blog IN CNAME www.example.com
MX 邮件交换记录,指定邮件服务器 mail IN MX 10 mail.example.com
NS 域名服务器记录,指定权威DNS服务器 example.com IN NS ns1.example.com
PTR 反向解析记录,IP映射到域名 101 IN PTR www.example.com
SOA 起始授权机构,区域核心记录 包含序列号、管理员邮箱等

相关问答FAQs

问题1:如何排查DNS服务无法解析的问题?
解答

  1. 检查服务状态:systemctl status bind9,确认服务正常运行。
  2. 检查配置文件语法:named-checkconf /etc/bind/named.conf,若有错误会提示具体行号。
  3. 检查区域文件语法:named-checkzone example.com /etc/bind/db.example.com,验证记录格式是否正确。
  4. 查看日志:tail -f /var/log/syslog(Ubuntu)或tail -f /var/log/messages(CentOS),定位错误原因(如权限不足、端口冲突等)。
  5. 测试网络连通性:ping 192.168.1.100,确认客户端与DNS服务器通信正常。

问题2:如何配置DNS转发,将无法解析的请求转发到上游DNS?
解答
named.confoptions段中添加forwarders选项,指定上游DNS服务器(如运营商DNS或公共DNS):

    directory "/var/cache/bind";
    allow-query { any; };
    recursion yes;
    forwarders { 114.114.114.114; 8.8.8.8; }; # 上游DNS服务器
    forward first; # 优先转发,转发失败则自行查询(可选,默认为first)
};```  
配置完成后重启服务:`systemctl restart bind9`,测试解析外部域名(如`www.baidu.com`),确认请求是否被正确转发。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/31170.html

(0)
酷番叔酷番叔
上一篇 2025年9月27日 07:28
下一篇 2025年9月27日 07:43

相关推荐

  • Linux系统忘记root密码后如何重置密码?

    Linux系统作为服务器和开发环境的核心工具,root密码的安全性至关重要,若不慎遗忘root密码,需通过特定方法重置,本文将详细说明不同场景下重置Linux root密码的步骤、注意事项及适用场景,帮助用户安全恢复系统访问权限,通过GRUB引导进入单用户模式(适用于本地物理机/虚拟机)GRUB(Grand U……

    2025年9月21日
    2300
  • Linux如何动态加载驱动不编译内核?

    驱动模块基础内核模块(.ko文件)Linux驱动以.ko(Kernel Object)文件形式存在,存储在/lib/modules/$(uname -r)/kernel/目录下,查看已安装模块: ls /lib/modules/$(uname -r)/kernel/drivers模块依赖关系模块可能依赖其他模块……

    2025年7月5日
    4900
  • linux运行程序如何退出

    Linux中,运行程序后可通过按Ctrl + C组合键来终止前台正在运行

    2025年8月10日
    3400
  • Linux如何创建编辑文本文件?

    命令行方法(高效快捷)touch 命令创建空文件 touch filename.txt # 创建空文件 ls -l filename.txt # 验证文件生成重定向符号 > 和 >>覆盖写入(文件不存在则新建):echo "Hello World" > file.tx……

    2025年8月8日
    4000
  • 移除MySQL核心包会引发什么后果?

    在Linux上卸载MySQL数据库实例需要谨慎操作,避免残留文件影响后续安装或占用资源,以下是详细步骤,适用于主流发行版(Ubuntu/Debian/CentOS/RHEL),操作前务必备份重要数据:准备工作备份数据(防止误删)使用mysqldump备份所有数据库:mysqldump -u root -p……

    2025年7月19日
    4300

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信