搭建DNS服务器(Ubuntu)

必备功能:至少包含1个master和1个slave
劫持私有zone,添加子域名解析记录
增加至少2个view
支持公网域名解析
验证
能够修改私有zone子域名解析记录,master同步slave
测试私有zone子域名和公网域名可解析
引用:https://cn.linux-console.net/?p=3443

1.1 先决条件(机器准备)

准备了第三台机器,一台用作master(192.168.202.128),一台用作slave(192.168.202.129),还有一台用作客户端client(192.168.202.130)。

1.2 设置FQDN(完全限定域名)

FQDN提供了服务器在全局互联网中的唯一名称。这确保了当其他设备或服务需要访问这台DNS服务器时,可以通过一个明确且唯一的地址找到它。
在这里插入图片描述
1.2.1 在每个服务器上设置FQDN

在ns1服务器上执行命令:sudo hostnamectl set-hostname ns1.hwdomain.io
在ns2服务器上执行命令:sudo hostnamectl set-hostname ns2.hwdomain.io
1.2.2 在服务器上添加配置
使用以下命令编辑文件 /etc/hostssudo nano /etc/hosts
在每台服务器上添加以下配置:

192.168.202.128 ns1.hwdomain.io ns1
192.168.202.129 ns2.hwdomain.io ns2

1.2.3 验证每台服务器上的FQDN
使用命令:sudo hostname -f
在这里插入图片描述在这里插入图片描述
在ns1服务器上,获得的FQDN为 ns1.hwdomain.io
在ns2服务器上,获得的FQDN为 ns2.hwdomain.io

1.3 安装BIND包(ns1和ns2都安装)

1.3.1 安装
运行apt命令更新和刷新Ubuntu存储库:sudo apt update
安装bind9:sudo apt install bind9 bind9utils bind9-doc dnsutils
1.3.2 编辑配置
使用以下命令编辑配置 /etc/default/named:sudo nano /etc/default/named
“OPTIONS = ”行允许BIND服务运行时设置特定选项,使用IPv4运行绑定:OPTIONS="-u bind -4"
在这里插入图片描述
1.3.3 重新启动绑定服务named
重新启动:sudo systemctl restart named
检查BIND服务的状态:sudo systemctl status named
在这里插入图片描述

1.4 设置BIND主机(Master)

将ns1服务器设置为BIND DNS 服务器的主服务器。
1.4.1 编辑配置文件/etc/bind/named.conf.options
使用命令:sudo nano /etc/bind/named.conf.options
在使用"options{…};"行之前,将创建一个名为"受信任"的ACL(访问控制列表),其中包括现环境中所有受信任的 IP 地址和网络。此外,添加本地服务器 IP 地址“ns1”和辅助 DNS 服务器“ns2”的 IP 地址。

acl "trusted" {
        192.168.202.128;    # ns1 - or you can use localhost for ns1
        192.168.202.129;    # ns2
        192.168.202.0/24;  # trusted networks
};

对"options{…};"部分:

  • 通过注释选项“listen-on-v6”禁用了对 IPv6 的支持
  • 启用并允许来自“受信任”ACL 的递归
  • 运行 BIND 服务在特定的ns1的 IP 地址(192.168.202.128)
  • 正在禁用默认区域传输并将 BIND DNS 服务器的特定转发器定义为 Google 公共 DNS 8.8.8.8 和 Cloudflare的1.1.1.1
    options {#开始一个选项块,其中包含了全局配置选项,这些选项将影响整个BIND服务器的行为
        directory "/var/cache/bind";#设置BIND服务器的默认工作目录,用于存储运行时文件,如缓存文件和日志文件

        //listen-on-v6 { any; };        # BIND不会监听IPv6的DNS查询

        recursion yes;                 # 启用了递归查询
        allow-recursion { trusted; };  # 只允许来自“受信任”的地址进行递归查询
        listen-on { 192.168.202.128; };   # ns1 IP address
        allow-transfer { none; };      # 禁止所有区域传输

        forwarders {                    #配置两个公共DNS服务器
                8.8.8.8;
                1.1.1.1;
        };
};

1.4.2 检查和验证配置文件/etc/bind/named.conf.options
使用以下命令来检查:sudo named-checkconf /etc/bind/named.conf.options
在这里插入图片描述
没有输出信息,证明以上配置时正确的。

1.5 设置区域

1.5.1编辑配置文件 /etc/bind/named.local
使用命令:sudo nano /etc/bind/named.conf.local

  • 设置域名正向解析区域:解析hwdomain.io的域名到IP地址的配置
zone "hwdomain.io" {    #指定DNS区域的域名是hwdomain.io。
    type master;     #设置了该区域的类型为master,意味着这个BIND服务器是此区域的权威主服务器,负责维护该区域的所有DNS记录。
    file "/etc/bind/zones/db.hwdomain.io"; # 指定了包含该区域DNS记录的文件路径
    allow-transfer { 192.168.202.129; };           # 允许从IP地址192.168.202.129进行区域传输,这是辅助DNS服务器的地址,它需要从主服务器上复制区域数据
};
  • 设置反向解析区域:解析IP地址到对应的域名的配置
zone "202.168.192.in-addr.arpa" { #反向解析区域,DNS区域的域名为202.168.192.in-addr.arpa
    type master;  #设置了该区域的类型为master,表示这个BIND服务器是此反向解析区域的权威主服务器。
    file "/etc/bind/zones/db.192.168.202";  # 指定了包含该反向解析区域DNS记录的文件路径
    allow-transfer { 192.168.202.129; };  # 允许从IP地址192.168.202.129进行区域传输,与上面的正向解析区域配置相同。这通常是为了设置一个辅助DNS服务器,以便于备份和负载均衡。
};

1.5.2 创建新目录
运行命令创建一个新目录/etc/bind/zones:sudo mkdir -p /etc/bind/zones/,该目录将用于存储区域配置文件。
1.5.3 转发区域配置
使用命令复制默认转发区域配置/etc/bind/zones/db.hwdomain.io:sudo cp /etc/bind/db.local /etc/bind/zones/db.hwdomain.io
使用命令编辑文件:sudo nano /etc/bind/zones/db.hwdomain.io

;
; BIND data file for local loopback interface
;   #这个文件是为本地回环接口(通常是127.0.0.1)配置的BIND数据文件
$TTL    604800  #设置了默认的TTL(生存时间),即DNS记录被客户端缓存的时间(以秒为单位)
@       IN      SOA     localhost. root.localhost. (#SOA记录
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;

; NS records for name servers  #NS记录,指定了负责处理该区域查询的服务器
    IN      NS      ns1.hwdomain.io.
    IN      NS      ns2.hwdomain.io.

; A records for name servers  #定义了两个A记录,将DNS服务器的FQDN映射到对应的IP地址
ns1.hwdomain.io.          IN      A       192.168.202.128
ns2.hwdomain.io.          IN      A       192.168.202.129

; Mail handler or MX record for the domain hwdomain.io#定义了一个MX(邮件交换)记录,指定了处理该域电子邮件的服务器地址
hwdomain.io.    IN     MX   10   mail.hwdomain.io.

; A records for domain names#两行定义了A记录,将域名映射到对应的IP地址
hwdomain.io.            IN      A      192.168.202.100
mail.hwdomain.io.       IN      A      192.168.202.120

1.5.4 反向区域配置
使用命令将默认反向区域配置文件复制到 /etc/bind/zones/db.192.168.202:

sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168.202

使用命令编辑文件:sudo nano /etc/bind/zones/db.192.168.202

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns1.hwdomain.io. admin.hwdomain.io. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;


; name servers - NS records  #NS记录,指定了负责处理该区域查询的服务器
      IN      NS      ns1.hwdomain.io.
      IN      NS      ns2.hwdomain.io.


; PTR Records  #PTR记录,将IP地址映射到对应的FQDN
128   IN      PTR     ns1.hwdomain.io.    ; 192.168.202.128
129   IN      PTR     ns1.hwdomain.io.    ; 192.168.202.129
100   IN      PTR     ns1.hwdomain.io.    ; 192.168.202.100
120   IN      PTR     mail.hwdomain.io.   ; 192.168.202.120

1.5.5 添加view

  • 编辑配置文件 /etc/bind/named.local:sudo nano /etc/bind/named.conf.local
    将zone区域全部放在view视图中。
view "internal" {
       match-clients { 192.168.202.128;192.168.202.129;192.168.202.130; };
       zone "hwdomain.io" {
             type master;
             file "/etc/bind/zones/db.hwdomain.io";
             allow-transfer{192.168.202.129;};
       };
     zone "202.168.192.in-addr.arpa" {
         type master;
         file "/etc/bind/zones/db.192.168.202"; # subnet 192.168.202.0/24;
         allow-transfer { 192.168.202.129; }; # ns2 private IP address - secondary DNS
       };
};

view "external" {
    match-clients { any; };
    zone "hwdomain.io" {
          type master;
          file "/etc/bind/zones/db.hwdomain.io.external";
          allow-transfer{192.168.202.129;};
    };
    zone "202.168.192.in-addr.arpa" {
         type master;
         file "/etc/bind/zones/db.192.168.202";
         allow-transfer { 192.168.202.129; };
     };
};
  • 编辑配置文件/etc/bind/zones/db.hwdomain.io.external
```powershell
;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL

; NS records for name servers
    IN      NS      ns1.hwdomain.io.
    IN      NS      ns2.hwdomain.io.
; A records for name servers
ns1.hwdomain.io.          IN      A       192.168.202.128
ns2.hwdomain.io.          IN      A       192.168.202.129


; Mail handler or MX record for the domain hwdomain.io
hwdomain.io.    IN     MX   10   mail.hwdomain.io.


; A records for domain names
hwdomain.io.  IN A 192.168.202.10
mail.hwdomain.io.  IN A 192.168.202.20
  • 编辑文件/etc/bind/zones/db.192.168.202.external
;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
; name servers - NS records
IN      NS      ns1.hwdomain.io.
IN      NS      ns2.hwdomain.io.


; PTR Records
128   IN      PTR     ns1.hwdomain.io.    ; 192.168.202.128
129   IN      PTR     ns2.hwdomain.io.    ; 192.168.202.129
10  IN      PTR     hwdomain.io.        ; 192.168.202.10
20  IN      PTR     mail.hwdomain.io.   ; 192.168.202.20
  • 编辑文件/etc/bind/named.conf.default-zones: 正在使用视图,BIND的默认区域配置可能不再需要,注释掉named.conf.default-zones文件中的默认配置。

1.5.6 检查配置

  • 使用以下命令来检查BIND配置:sudo named-checkconf
    在这里插入图片描述
    没有收到任何错误消息
  • 使用命令检查正向区域配置文件:sudo named-checkzone hwdomain.io /etc/bind/zones/db.hwdomain.io
    在这里插入图片描述
  • 使用命令检查反向区域配置文件:sudo named-checkzone 202.168.192.in-addr.arpa /etc/bind/zones/db.192.168.202
    在这里插入图片描述
  • 使用命令重新启动BIND服务:sudo systemctl restart named
    在这里插入图片描述

1.6 设置BIND从站

1.6.1 编辑配置文件/etc/bind/named.conf.options
使用命令编辑配置文件:/etc/bind/named.conf.options
创建与主服务器上相同的 ACL(访问控制列表):

acl "trusted" {
        192.168.202.128;    # ns1
        192.168.202.129;    # ns2 - or you can use localhost for ns2
        192.168.202.0/24;  # trusted networks
};

更改"options{…}"配置:
options {#开始一个选项块,其中包含了全局配置选项,这些选项将影响整个BIND服务器的行为

        directory "/var/cache/bind";#设置BIND服务器的默认工作目录,用于存储运行时文件,如缓存文件和日志文件

        //listen-on-v6 { any; };        # BIND不会监听IPv6的DNS查询

        recursion yes;                 # 启用了递归查询
        allow-recursion { trusted; };  # 只允许来自“受信任”的地址进行递归查询
        listen-on { 192.168.202.129; };   # ns2 IP address
        allow-transfer { none; };      # 禁止所有区域传输

        forwarders {                    #配置两个公共DNS服务器
                8.8.8.8;
                1.1.1.1;
        };
};

1.6.2 编辑配置文件/etc/bind/named.conf.local
使用命令编辑配置文件/etc/bind/named.conf.local:sudo nano /etc/bind/named.conf.local,将ns2服务器设置为辅助DNS服务器

zone "hwdomain.io" {#开始了一个区域定义块,指定了DNS区域的域名是hwdomain.io
     type slave;#设置了该区域的类型为slave,意味着这个BIND服务器是从服务器,它将从主DNS服务器(master DNS)同步区域数据
     file "/etc/bind/zones/db.hwdomain.io";#指定了从服务器将存储同步的区域数据文件的路径
     masters { 192.168.202.128; };  # 定义了主DNS服务器的IP地址,从服务器将从这个地址同步区域数据
};

zone "202.168.192.in-addr.arpa" {#开始了一个新的区域定义块,指定了DNS区域的域名是202.168.192.in-addr.arpa。这是一个反向解析区域,用于将IP地址解析为域名。
     type slave;
     file "/etc/bind/zones/db.192.168.202";#指定了从服务器将存储同步的反向解析区域数据文件的路径
     masters { 192.168.202.128; };  # 主DNS服务器的IP地址,从服务器将从这个地址同步反向解析区域数据
};

1.6.3 检查配置

  • 检查和验证BIND配置:sudo named-checkconf
    在这里插入图片描述
  • 在ns2服务器上重新启动 BIND 服务named以应用新的更改:sudo systemctl restart named
  • 检查和验证ns2服务器上的BIND服务named:sudo systemctl status named
    在这里插入图片描述

1.7 从客户端计算机验证DNS服务器

使用以下命令删除默认链接文件/etc/resolv.conf:sudo unlink /etc/resolv.conf

  • 使用nano编辑器创建一个新文件: sudo nano /etc/resolv.conf
  • 在文件中添加如下配置:
nameserver 192.168.202.128(master)
nameserver 192.168.202.129(slave)
nameserver 8.8.8.8(Google DNS解析器)
search hwdomain.io(域名)
  • 下载bind9:sudo apt install dnsutils bind9-utils

  • 运行dig命令解析域名"hwdomain.io",可以看到看到被解析为服务器IP地址:192.168.202.100
    在这里插入图片描述

  • 运行dig命令解析子域名"mail.hwdomain.io",可以看到看到被解析为服务器IP地址:192.168.202.120
    在这里插入图片描述

  • 使用dig命令解析公网域名www.baidu.com
    在这里插入图片描述

  • 使用nslookup命令验证域名的反向区域配置
    在这里插入图片描述

  • 在master端修改私有zone子域名解析记录
    在这里插入图片描述
    在这里插入图片描述

  • 重启后再停止master的服务:sudo systemctl restart named sudo systemctl stop named

  • 在客户端dig mail.hwdomain.io:
    在这里插入图片描述

  • view检查:使用192.168.202.130去dig hwdomain.io得到192.168.202.100
    在这里插入图片描述
    使用192.168.202.131去dig hwdomain.io得到192.168.202.10
    在这里插入图片描述

要在Ubuntu 20.04上搭建DNS服务器,你可以使用BIND(Berkeley Internet Name Domain)软件。下面是一个简单的步骤指南: 1. 更新系统软件包: ``` sudo apt update ``` 2. 安装BIND: ``` sudo apt install bind9 ``` 3. 配置DNS服务器: 打开主配置文件 `/etc/bind/named.conf.local`: ``` sudo nano /etc/bind/named.conf.local ``` 在文件中添加以下内容作为示例: ``` zone "example.com" { type master; file "/etc/bind/db.example.com"; }; ``` 创建一个新文件 `/etc/bind/db.example.com` 并添加以下内容: ``` ; ; BIND data file for example.com ; $TTL 604800 @ IN SOA ns1.example.com. admin.example.com. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.example.com. @ IN A 192.168.0.10 ns1 IN A 192.168.0.10 ``` 4. 配置反向DNS: 打开主配置文件 `/etc/bind/named.conf.local`: ``` sudo nano /etc/bind/named.conf.local ``` 在文件中添加以下内容作为示例: ``` zone "0.168.192.in-addr.arpa" { type master; file "/etc/bind/db.192"; }; ``` 创建一个新文件 `/etc/bind/db.192` 并添加以下内容: ``` ; ; BIND reverse data file for local loopback interface ; $TTL 604800 @ IN SOA ns1.example.com. admin.example.com. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.example.com. 10 IN PTR ns1.example.com. ``` 5. 重启BIND服务: ``` sudo systemctl restart bind9 ``` 现在你的Ubuntu 20.04系统上已经搭建了一个基本的DNS服务器。请注意,这里只是一个示例配置,你可以根据自己的需求进行进一步定制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值