目录

 

一、前言

二、实验环境准备

2.1 软件安装与依赖处理

2.2 BIND核心配置文件(必须懂 重要)

 

三、实验要求:

四、实验主要配置

实验一 正向解析与验证

实验二 反向解析与验证

实验三 主从DNS与验证

五、总结与经验


 

一、前言

很多初学 Linux 的同学,在学习 DNS 时都会疑惑:为什么要有从 DNS?简单来说:主 DNS 负责写入、管理解析记录;从 DNS 自动同步主服务器数据,充当备用节点。当主服务器故障时,从 DNS 无缝接管解析服务,保障网络不中断。

在企业生产环境中,单台 DNS 服务器存在极大的单点故障风险。一旦主 DNS 服务宕机,全网域名解析将会瘫痪,严重影响业务正常运行。为了解决该问题,企业普遍采用主从 DNS 架构,通过区域传送机制实现解析数据同步,从而达到备份冗余、故障切换、分担解析压力的目的。

本文将摒弃晦涩理论,全部实操演示,手把手带你从零搭建主从 DNS,每一条命令、每一行配置都附带详细注释,零基础也能一次成功,非常适合运维新手学习使用。

 

二、实验环境准备

角色 主机名 IP 地址
主 DNS 服务器 mater 192.168.176.128
从 DNS 服务器 slave 192.168.176.130
测试客户端 client 192.168.176.129

搭建DNS域名解析服务器

  • 首先先介绍一下BIND:全称为伯克利域名解析服务器,是由伯克利大学开源的软件。主要用于域名解析  .

2.1 软件安装与依赖处理

dnf install bind -y

这里注意:

因为博主我在安装时出现了图上这个问题,所以在这里给大家说明一下,为保证大家可以不会在安装这个步骤就卡住。图上这个报错原因就是openssl-fips-provider 系列包的文件冲突导致的。

解决方法:使用dnf swap 替换冲突包

dnf swap 是 DNF 提供的「替换安装」功能,可以在安装新包的同时卸载旧的冲突包,一次性解决文件冲突问题,命令如下:

dnf swap openssl-fips-provider-so openssl-fips-provider -y

执行完此命令后会自动完成依赖解析,解析文件冲突,后续重新执行安装命令即可安装成功。

2.2 BIND核心配置文件(必须懂 重要)

1. /etc/named.conf 主配置文件

2. /etc/named.rfc1912.zones 区域声明文件

3. /var/named 目录

这里我将一 一为大家解析我们将在实验中用到的每个配置文件中的主要信息,因为如果不给大家介绍这个你们可能不懂为什么要这么改,这会导致我们可能做了一次无用实验。

1. /etc/named.conf 主配置文件

  • 作用:BIND 服务的全局控制中心,定义了 DNS 服务的基础运行规则
 
 10 options {
 11     listen-on port 53 { 127.0.0.1; };  # 仅在本机IPv4回环地址监听53端口
 12     listen-on-v6 port 53 { ::1; };     # 仅在本机IPv6回环地址监听53端口
 13     directory   "/var/named";  # 域名解析的数据文件保存位置。
 14     dump-file   "/var/named/data/cache_dump.db"; # 缓存数据转储文件
 15     statistics-file "/var/named/data/named_stats.txt"; # 统计信息
 16     memstatistics-file "/var/named/data/named_mem_stats.txt"; # 服务运行的内存分析文件
 17     secroots-file   "/var/named/data/named.secroots";
 18     recursing-file  "/var/named/data/named.recursing";
 19     allow-query { localhost; };         # 仅允许本机发起DNS查询


recursion yes;      # 重要:开启递归查询功能
dnssec-validation yes; # 开启DNSSEC验证

2. /etc/named.rfc1912.zones 区域声明文件

  • 作用:域名解析区域的声明清单,你要管理哪些域名 / IP 段的解析,都在这里声明:
# 正向解析的区域声明
 23 zone "localhost" IN {  ## 声明localhost这个域名的正向解析区域
 24     type master/slave; # 区域的类型为 主/从服务器
 25     file "named.localhost"; # 区域的数据文件:详细的域名解析内容全部写在这个文件中 /var/named/named.localhost
 26     allow-update { none; };#  禁止动态更新记录,当设定主从dns服务的时候,该属性必须屏蔽,否则会导致服务无法正常运行
 27 };
 28
 29 zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
 30     type master;
 31     file "named.loopback";
 32     allow-update { none; };
 33 };
 34
 # 反向域名解析
 35 zone "1.0.0.127.in-addr.arpa" IN { #区域ip必须倒着写
 36     type master;  #区域的类型为 主服务器
 37     file "named.loopback"; #/var/named/named.loopback #详细的域名解析内容全部写在这个文件中
 38     allow-update { none; }; #当设定主从dns服务时,该属性必须隐藏
 39 };

3. /var/named 目录

/var/named 就是 BIND 服务的 “数据仓库”,所有和域名解析相关的配置、数据、缓存都存在这里,是 DNS 服务正常运行的核心目录。

[root@slave ~]# ll /var/named
总用量 16
drwxrwx--- 2 named named    6  1月 28 18:35 data
drwxrwx--- 2 named named    6  1月 28 18:35 dynamic
-rw-r----- 1 root  named 2112  1月 28 18:31 named.ca
-rw-r----- 1 root  named  152  1月 28 18:31 named.empty
-rw-r----- 1 root  named  152  1月 28 18:31 named.localhost
-rw-r----- 1 root  named  168  1月 28 18:31 named.loopback
drwxrwx--- 2 named named    6  1月 28 18:35 slaves

文件 / 目录 作用说明
data/ 存放 BIND 运行时的缓存、统计、SECROOTS 等数据文件
dynamic/ 用于存放支持动态更新的区域数据文件
slaves/ 从服务器同步过来的区域数据文件默认存放目录
named.ca 根域名服务器列表文件,用于公网域名的迭代查询
named.empty 空的区域模板文件,可用于创建新的解析区域
named.localhost localhost 正向解析的模板文件
named.loopback 127.0.0.1 反向解析的模板文件

 

三、实验要求:

一、DNS正向解析  解决“域名→IP” 的访问问题

二、DNS反向解析  解决 “IP→域名” 的溯源问题

三、DNS主从服务  解决 DNS 服务的可靠性问题,三者结合才能搭建一个完整、可用的企业级 DNS 系统。

四、实验主要配置

实验一 正向解析与验证

1.修改主配置文件

[root@server ~]# vim /etc/named.conf 

进入内部配置如下:
 options {
 11     listen-on port 53 { any; };  #监听本机用的所有IP
 12     listen-on-v6 port 53 { ::1; };
 13     directory   "/var/named";
 14     dump-file   "/var/named/data/cache_dump.db";
 15     statistics-file "/var/named/data/named_stats.txt";
 16     memstatistics-file "/var/named/data/named_mem_stats.txt";
 17     secroots-file   "/var/named/data/named.secroots";
 18     recursing-file  "/var/named/data/named.recursing";
 19     allow-query     { any; }; #接收所有客户端请求
    # DNS的两种查询模式说明
    # 递归查询:客户端向DNS服务器发请求,服务器没数据时,自己去层层查询,最后把结果返回给客户端
    # 迭代查询:客户端向DNS服务器发请求,服务器没数据时,把根服务器地址告诉客户端,让客户端自己去查

 20     forward only;    #这两行是我新加的,强制 BIND 服务器只做转发查询,不做递归查询。
 21     forwarders{ 8.8.8.8;}; #本机无解析的域名转发给 8.8.8.8

 37    dnssec-validation no; #设置为no 取消验证

2.修改区域声明文件

[root@server ~]# vim /etc/named.rfc1912.zones 

#进入内部进行修改
zone "localhost" IN {
 24     type master;
 25     file "named.localhost";
 26     allow-update { none; };
 27 };
 28 
#这里无需删掉上面原本的默认正向解析,在下面加入你要域名解析的就可以了
#我这里是定义的域名为ohh.com
 29 zone "ohh.com" IN {          # 声明要管理的域名(根域)
 30     type master;             # 声明为该区域的主DNS服务器
 31     file "ohh.com.zone";     # 指定该区域的解析数据文件(需后续在/var/named目录中创建)
 32     allow-update { none; };  # 禁止客户端动态更新解析记录,保证数据安全
 33 };

3.创建区域数据文件

 

[root@server ~]# cd /var/named
[root@server named]#  cp -a named.localhost ohh.com.zone
[root@server named]# vim ohh.com.zone

#我们先来看原localhost 正向解析的文件:

  1 $TTL 1D   # 解析记录的默认缓存生存周期,这里设为1天
  2 @   IN SOA  @ rname.invalid. (        # @ 代表当前区域(你配置的ohh.com);SOA记录是区域的起始授权记录
  3                     0   ; serial
  4                     1D  ; refresh
  5                     1H  ; retry
  6                     1W  ; expire
  7                     3H )    ; minimum
  8     NS  @
  9     A   127.0.0.1  # A记录:将当前域名解析到本机IPv4地址127.0.0.1
 10     AAAA    ::1    # AAAA记录:将当前域名解析到本机IPv6地址::1
~                      
# @表示当前区域 如localhost 或者 xxx.com xxx.org...
# 第二个@的位置 一般写 域名解析服务器的域名 



#以下为修改内容:
  1 $TTL 1D
  2 @   IN SOA  ns.ohh.com. 2432024864.qq.com (   #注意别忘记在区域后加. @也用.表示
  3                     0   ; serial
  4                     1D  ; refresh
  5                     1H  ; retry
  6                     1W  ; expire
  7                     3H )    ; minimum
  8     NS  ns.ohh.com.
  9 ns.ohh.com. A   192.168.176.128
 10 www.ohh.com. A 192.169.176.129
 11 image.ohh.com. A 192.168.176.130

4.完成所有配置后启动或重启named服务

[root@server named]# systemctl restart/enable --now named

5.客户端 将dns指向我们自己的域名解析服务器
 

[root@client ~]# nmcli connection modify ens160 ipv4.dns 192.168.176.128  这里的IP根据自己的改
[root@client ~]# nmcli connection up ens160 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)

6.验证域名解析是否成功

nslookup 是 Linux/Windows 系统中最常用的 DNS 解析测试工具,全称是 name server lookup,专门用来排查域名解析问题,验证 DNS 服务器是否正常工作。

[root@client ~]# nslookup www.ohh.com

实验成功结果:

 

实验二 反向解析与验证

可在实验一的基础上继续进行

因实验一已经修改过主配置文件了,所以这里直接进行下面的操作

1.修改区域声明文件

 [root@server ~]# vim /etc/named.rfc1912.zones 

#进入内部修改如下

 41 zone "1.0.0.127.in-addr.arpa" IN {
 42     type master;
 43     file "named.loopback";
 44     allow-update { none; };
 45 };
 46 
 47 
#这个也是一样可以直接在默认反向解析下加
 #这是我新增的192.168.176.0网段反向解析区域声明
 48 zone "176.168.192.in-addr.arpa" IN {   #注意这里一定是倒序写,并加上.in-addr.arpa
 49     type master;
 50     file "176.168.192.arpa";  # 指定反向解析数据文件,需在/var/named目录创建
 51     allow-update { none; };   # 禁止客户端动态更新记录
 52 };

2.创建区域数据文件

[root@server ~]# cd /var/named
[root@server named]# cp -a named.loopback 176.168.192.arpa
[root@server named]# vim 176.168.192.arpa


 1 $TTL 1D
  2 @   IN SOA  ns.ohh.comm. 2432024864.qq.com. (
  3                     0   ; serial
  4                     1D  ; refresh
  5                     1H  ; retry
  6                     1W  ; expire
  7                     3H )    ; minimum
  8     NS  ns.ohh.com.
  9 ns  A 192.168.176.128
 10 131 PTR ns.ohh.com. 
 11 129 PTR www.ohh.com.   # PTR记录:把IP 192.168.176.129反向解析为www.ohh.com
 12 130 PTR music.ohh.com.
~                             

注意:大家在写域名时一定不要忘记后面跟个"."。

3.重启namd服务

[root@server named]# systemctl restart/enable named

4.验证域名解析是否成功

实验三 主从DNS与验证

在做这个实验时好消息是我们已经做了正向与反向解析配置,由于基础解析服务已验证成功可用,本实验只需在这两个基础上补充主从同步相关配置,即可实现DNS服务的冗余备份与故障转移能力。

1.配置从服务

1.1 修改主配置文件

[root@slave ~]# vim /etc/named.conf 
 #修改让从服务器监听所有的ip 让从服务器允许所有客户端访问
 10 options {
 11     listen-on port 53 { any; }; 
 12     listen-on-v6 port 53 { ::1; };
 13     directory   "/var/named";
 14     dump-file   "/var/named/data/cache_dump.db";
 15     statistics-file "/var/named/data/named_stats.txt";
 16     memstatistics-file "/var/named/data/named_mem_stats.txt";
 17     secroots-file   "/var/named/data/named.secroots";
 18     recursing-file  "/var/named/data/named.recursing";
 19     allow-query     { any; };

1.2 修改区域声明文件

 [root@slave ~]# vim /etc/named.rfc1912.zones 

 29 zone "ohh.com" IN {
 30     type slave;      # 声明为从区域,数据从主服务器同步
 31     masters {192.168.176.128;};  # 指定主DNS服务器的IP地址
 32     file "slaves/ohh.com.zone";  # 同步的区域文件存储路径(BIND专用slaves目录)
 33     allow-update { none; };      ## 删掉 allow-update 这一行!
 34 };

 48 zone "176.168.192.in-addr.arpa" IN {
 49     type slave;
 50     masters {192.168.176.128;};
 51     file "slaves/176.168.192.arpa";
 52     allow-update { none; };      ## 删掉 allow-update 这一行!
 53 }; 
 

注意:在 type slave; 的从服务器区域声明里,不能写 allow-update { none; }; 这个配置,BIND 不允许从区域使用这个选项,导致配置文件语法校验失败,服务无法启动。

2.修改主服务

[root@server named]# vim /etc/named.rfc1912.zones 

 29 zone "ohh.com" IN {
 30     type master;
 31     file "ohh.com.zone";
 32     allow-update { none; };
 33     allow-transfer {192.168.176.130;}; #新加允许转发给从服务器
 34 };

 49 zone "176.168.192.in-addr.arpa" IN {
 50     type master;
 51     file "176.168.192.arpa";
 52     allow-update { none; };
 53     allow-transfer {192.168.176.130;};
 54 
 55 };

3.重启named服务

[root@server named]# systemctl restart named
[root@slave ~]# systemctl restart named

4.直接测试解析功能是否成功

客户端上操作:

1.正向解析:

2.反向解析:

3.最终测试:断开主服务器,验证从服务器可用性:

  • 先关闭主服务器:
[root@server named]# systemctl stop named
  • 在客户端上,依然使用从服务器IP解析域名:

 

五、总结与经验

写到这里,相信大家对 DNS 服务以及主从架构已经有了完整且清晰的认识。很多初学者初学 DNS 时,只会机械复制配置,却不懂每一行代码的意义。因此本文从安装报错处理、配置文件详解,到正向反向解析、主从同步搭建,全程通俗易懂、尽量弱化晦涩理论,让每一位读者都能看懂、跟做、成功复现。

在企业网络中,DNS 是最基础、却最不能崩的服务。主从架构看似简单,实则是生产环境最基础的高可用保障。主服务器负责管理数据,从服务器负责冗余备份,避免单点故障,这也是企业必须部署从 DNS 的根本原因。

希望本篇实操教程能够帮助正在学习 Linux 运维的你,彻底吃透 DNS 原理,避开新手常见坑。不用死记命令,真正理解配置,以后无论面试还是实操,都能轻松拿捏 DNS 服务。如果本文对你有帮助,欢迎收藏、点赞,我后续也会持续更新更多高质量运维实操教程。

 

 

 

 

 

 

 

 

 

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐