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时间管理基础两种时间类型系统时间 (System Clock):由内核维护,通过timedatectl或date命令查看,硬件时间 (RTC/BIOS Clock):主板电池供电,通过hwclock命令管理, timedatectl # 查看系统与硬件时间状态hwclock –show # 显示硬件……

    2025年6月18日
    20500
  • Linux如何查看文件文字编码方式?

    在Linux系统中,文字编码是影响文本文件正确显示的关键因素,常见的编码包括UTF-8、GBK、ISO-8859-1等,若编码不匹配,文件内容可能会出现乱码,因此掌握查看文字编码的方法非常重要,本文将详细介绍Linux下查看文字编码的多种方式,涵盖命令行工具、图形界面工具及不同场景下的处理技巧,帮助用户快速定位……

    2025年8月23日
    15800
  • 安装服务端失败怎么办?

    Telnet基础认知Telnet的作用Telnet是一种基于TCP/IP的远程登录协议(默认端口23),允许用户通过网络控制服务器,但请注意:Telnet传输数据为明文(包括密码),极易被截获,仅建议在内部安全环境或测试场景使用,生产环境强烈推荐SSH(加密协议)替代,服务端与客户端区分服务端:telnetd……

    2025年7月1日
    17400
  • linux中如何ping

    Linux中的ping命令是网络诊断中最基础也是最常用的工具之一,主要用于测试本地主机与目标主机之间的网络连通性,并通过发送ICMP(Internet Control Message Protocol,互联网控制报文协议)回显请求报文,获取目标主机的响应时间、丢包率等关键网络参数,下面将从基本用法、常用参数、实……

    2025年9月23日
    15200
  • linuxat命令如何结束

    Linux 中,要结束 at 命令安排的任务,可使用

    2025年8月10日
    12100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信