必备功能:至少包含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/hosts
:sudo nano /etc/hosts
在每台服务器上添加以下配置:
192.168.202.128 ns1.hwdomain.io ns1192.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.1options {#开始一个选项块,其中包含了全局配置选项,这些选项将影响整个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
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.128ns2.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.100mail.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地址映射到对应的FQDN128 IN PTR ns1.hwdomain.io. ; 192.168.202.128129 IN PTR ns1.hwdomain.io. ; 192.168.202.129100 IN PTR ns1.hwdomain.io. ; 192.168.202.100120 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 serversns1.hwdomain.io. IN A 192.168.202.128ns2.hwdomain.io. IN A 192.168.202.129; Mail handler or MX record for the domain hwdomain.iohwdomain.io. IN MX 10 mail.hwdomain.io.; A records for domain nameshwdomain.io. IN A 192.168.202.10mail.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 recordsIN NS ns1.hwdomain.io.IN NS ns2.hwdomain.io.; PTR Records128 IN PTR ns1.hwdomain.io. ; 192.168.202.128129 IN PTR ns2.hwdomain.io. ; 192.168.202.12910 IN PTR hwdomain.io. ; 192.168.202.1020 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
没有收到任何错误消息使用命令检查正向区域配置文件:s
udo 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
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