正向解析
1、配置主機名
[root@localhost ~]# dnf install bash-completion -y
#一個按tap鍵補全的軟件
[root@localhost ~]# hostnamectl hostname dns
#改主機名為dns
[root@localhost ~]# exit
ssh root@你的IP地址
要重啟才會生效
2、安裝bind
[root@dns ~]# dnf install bind -y
3、修改核心配置文件(把原本的刪除--ggdG)
[root@dns ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.72.135; };
directory "/var/named";
};
zone "demo.com" IN {
type master;
file "demo.com.zone";
};詳細解釋:
1. 整體結構
/etc/named.conf 是 BIND 服務的主配置文件,它定義了 DNS 服務器的全局選項和管理的域名區域。2. options 塊
plaintext
options {listen-on port 53 { 192.168.72.135; };directory "/var/named";
};
options 關鍵字:用于定義 DNS 服務器的全局選項,這些選項會影響服務器的整體行為。
listen-on port 53 { 192.168.72.135; };:
listen-on 用于指定 DNS 服務器監聽的 IP 地址和端口。
port 53 明確了監聽的端口號,53 是 DNS 服務的標準端口。
{ 192.168.72.135; } 表示服務器僅在 IP 地址 192.168.72.135 上監聽 DNS 請求。
directory "/var/named";:
此選項定義了 DNS 區域文件的存儲目錄。BIND 服務器會在該目錄下查找和存儲域名區域文件。3. zone 塊
zone "demo.com" IN {type master;file "demo.com.zone";
};zone "demo.com" IN:
zone 關鍵字用于定義一個域名區域。
"demo.com" 是要管理的域名。
IN 表示 Internet 類,這是最常見的域名區域類型。
type master;:
type 用于指定該區域的類型。
master 表示該 DNS 服務器是 demo.com 域名區域的主服務器,負責維護該區域的權威數據。
file "demo.com.zone";:
此選項指定了 demo.com 域名區域的區域文件名稱。BIND 服務器會在 directory 選項指定的目錄(即 /var/named)下查找名為 demo.com.zone 的文件,該文件包含了 demo.com 域名的具體 DNS 記錄。總結
這段配置文件將 DNS 服務器配置為在 IP 地址 192.168.72.135 的 53 端口上監聽 DNS 請求,將區域文件存儲在 /var/named 目錄下,并將該服務器設置為 demo.com 域名區域的主服務器,其區域文件為 demo.com.zone。
4、校驗配置文件的語法
[root@dns ~]# named-checkconf如果沒有消息就說明語法是正確的,但并不代表你的配置沒錯。
5、編寫區域數據文件
[root@dns ~]# vim /var/named/demo.com.zone
$TTL 1D
@ IN SOA @ admin.demo.com. (0 1D 2H 1W 1D)
IN NS ns.demo.com.
ns IN A 192.168.72.135
IN MX 5 mail.demo.com.
mail IN A 192.168.72.111 (目前不用這個功能,可以先隨便寫)
www IN A 10.10.10.10
ftp IN CNAME www詳細解釋:
1. $TTL 1D
$TTL 是 Time-To-Live(生存時間)的縮寫,用于指定 DNS 記錄在 DNS 緩存服務器中可被緩存的時長。
1D 代表 1 天,也就是 86400 秒。這意味著當其他 DNS 服務器或客戶端查詢該域名的記錄時,若查詢到結果,結果會在本地緩存 1 天,1 天后會重新向權威 DNS 服務器查詢。2. @ IN SOA @ admin.demo.com. (0 1D 2H 1W 1D)
@:在區域文件里,@ 是一個占位符,代表當前的域名,也就是 demo.com。
IN:代表 Internet 類,是最常見的 DNS 記錄類別。
SOA:即 Start of Authority(授權開始),是每個 DNS 區域文件都必須有的記錄,它給出了該域名區域的權威信息。
@:這是主域名服務器的名稱,此處表示 demo.com。
admin.demo.com.:該域名區域管理員的郵箱地址,DNS 中用 . 替代郵箱地址里的 @,所以實際的郵箱地址是 admin@demo.com。最后那個點不能省略。
括號內的數字參數:
0:序列號,每次區域文件有修改時,該序列號要遞增,以便讓從服務器知曉區域文件有更新。
1D:刷新時間,從服務器每隔 1 天(86400 秒)會向主服務器查詢區域文件是否有更新。
2H:重試時間,若從服務器在刷新時失敗,會在 2 小時(7200 秒)后重試。
1W:過期時間,若從服務器在 1 周(604800 秒)內都無法從主服務器獲取更新,就會認為該區域文件無效。
1D:最小 TTL,當 DNS 記錄沒有單獨指定 TTL 時,就使用這個最小 TTL 值。也稱為minimum(否定緩存時間):3H 代表 3 小時,當 DNS 查詢得到否定響應(如域名不存在)時,該否定響應會在緩存中保留 3 小時。3. IN NS ns.demo.com.
IN:同樣代表 Internet 類。
NS:即 Name Server(名稱服務器),用于指定該域名的權威 DNS 服務器。
ns.demo.com.:表示 ns.demo.com 是 demo.com 域名的權威 DNS 服務器。4. ns IN A 192.168.72.135
ns:是主機名,完整的域名是 ns.demo.com。
IN:Internet 類。
A:Address(地址)記錄,把主機名映射到對應的 IPv4 地址。
192.168.72.135:ns.demo.com 對應的 IPv4 地址。5. IN MX 5 mail.demo.com.
IN:Internet 類。
MX:Mail Exchanger(郵件交換器)記錄,用于指定接收該域名郵件的郵件服務器。
5:優先級,數值越小優先級越高,這里表示 mail.demo.com 的優先級為 5。
mail.demo.com.:接收 demo.com 域名郵件的郵件服務器。6. mail IN A 192.168.72.111
mail:主機名,完整域名是 mail.demo.com。
IN:Internet 類。
A:Address 記錄,將主機名映射到 IPv4 地址。
192.168.72.111:mail.demo.com 對應的 IPv4 地址。7. www IN A 10.10.10.10
www:主機名,完整域名是 www.demo.com。
IN:Internet 類。
A:Address 記錄,將主機名映射到 IPv4 地址。
10.10.10.10:www.demo.com 對應的 IPv4 地址。8. ftp IN CNAME www
ftp:主機名,完整域名是 ftp.demo.com。
IN:Internet 類。
CNAME:Canonical Name(別名)記錄,把一個主機名指向另一個主機名。
www:表示 ftp.demo.com 是 www.demo.com 的別名,當查詢 ftp.demo.com 時,會返回 www.demo.com 的 IP 地址。
注意,有些域名最后加點的詳細解釋:
在 DNS(Domain Name System)區域文件中,像 ns.demo.com. 這樣最后帶有一個點(.)的寫法,具有重要意義,以下為你詳細解釋:
1. 表示根域名
在 DNS 層級結構里,整個域名系統是基于一個根域名(用 . 表示)構建的。所有域名本質上都是根域名下的子域名。例如,demo.com 實際上是 demo.com.,完整寫法強調了它是從根域名衍生出來的。
所以,ns.demo.com. 中的點表明這是一個絕對域名,明確指向 DNS 層級結構中確切的位置。它完整表述了該域名在整個域名體系中的完整路徑,從根域名開始,依次經過頂級域名(如 .com)、二級域名(如 demo),最終到子域名(如 ns)。
2. 避免歧義
在 DNS 區域文件中,如果不使用末尾的點,域名會被視為相對域名。相對域名的解析會依賴于當前區域文件的設置,也就是會默認在相對域名后面追加當前區域的域名。
例如,在 demo.com 這個區域文件中,如果寫成 ns.demo.com(沒有末尾的點),DNS 服務器在解析時可能會將其當作相對域名,進而在后面追加 .demo.com,變成 ns.demo.com.demo.com,這顯然不是我們想要的結果。而使用 ns.demo.com. 這種絕對域名的寫法,就能避免這種歧義,確保 DNS 服務器準確解析到我們期望的域名。
3. 遵循標準規范
在 DNS 配置和管理中,使用絕對域名并在末尾加上點是標準的做法。遵循這一規范能讓配置文件更加清晰、準確,便于不同 DNS 服務器和管理員之間進行交互和理解。同時,它也有助于減少因解析錯誤而導致的網絡故障,提高 DNS 系統的穩定性和可靠性。
綜上所述,在 DNS 區域文件里使用末尾帶點的絕對域名寫法,是為了準確表示域名在 DNS 層級結構中的位置、避免解析歧義以及遵循標準規范。
6、驗證區域數據文件的語法
[root@dns ~]# named-checkzone demo.com /var/named/demo.com.zone
zone demo.com/IN: loaded serial 0
OK
7、啟動named服務
[root@dns ~]# systemctl start named
8、功能測試
[root@dns ~]# dig -t NS demo.com @192.168.72.135; <<>> DiG 9.16.23-RH <<>> -t NS demo.com @192.168.72.135
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17462
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: b4497c08c2b7da590100000067f8bffbc0c3e1ce0db2d73e (good)
;; QUESTION SECTION:
;demo.com. IN NS;; ANSWER SECTION:
demo.com. 86400 IN NS ns.demo.com.;; ADDITIONAL SECTION:
ns.demo.com. 86400 IN A 192.168.72.135;; Query time: 1 msec
;; SERVER: 192.168.72.135#53(192.168.72.135)
;; WHEN: Fri Apr 11 15:08:43 CST 2025
;; MSG SIZE rcvd: 98下面IP地址不一樣但是解析是對應的
解析成功的判斷依據
在輸出的頭部信息里:
plaintext
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17462其中 status: NOERROR 表明 DNS 查詢沒有出現錯誤,這是解析成功的一個關鍵標志。
輸出各部分的含義及重要關注點
1. 全局選項信息
plaintext
; <<>> DiG 9.16.23-RH <<>> -t NS demo.com @192.168.153.129
;; global options: +cmd這部分顯示了 dig 命令的版本和使用的參數,它表明你執行的是查詢 demo.com 的 NS(名稱服務器)記錄,并且指定了 DNS 服務器為 192.168.153.129。
2. 頭部信息;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17462
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
opcode: QUERY:表示這是一個標準的 DNS 查詢操作。
status: NOERROR:說明查詢沒有錯誤,解析成功。
qr:代表查詢響應(Query Response),表示這是一個響應消息。
aa:代表權威回答(Authoritative Answer),表明響應來自該域名的權威 DNS 服務器。
rd:代表遞歸查詢(Recursion Desired),表示客戶端希望 DNS 服務器進行遞歸查詢。
ra:代表遞歸可用(Recursion Available),表示 DNS 服務器支持遞歸查詢。
QUERY: 1:表示查詢的問題數量為 1。
ANSWER: 1:表示響應中包含 1 條回答記錄。
AUTHORITY: 0:表示響應中沒有權威記錄。
ADDITIONAL: 2:表示響應中包含 2 條額外信息記錄。
3. 問題部分;; QUESTION SECTION:
;demo.com. IN NS
這部分展示了你所查詢的問題,即查詢 demo.com 的 NS 記錄。
4. 回答部分;; ANSWER SECTION:
demo.com. 86400 IN NS ns.demo.com.
demo.com.:查詢的域名。
86400:該記錄的 TTL(Time-To-Live)值,單位為秒,意味著該記錄可以在緩存中保留 86400 秒(也就是 1 天)。
IN:代表 Internet 類,是最常見的 DNS 記錄類別。
NS:表示這是一條名稱服務器記錄。
ns.demo.com.:demo.com 的權威名稱服務器。
5. 額外信息部分;; ADDITIONAL SECTION:
ns.demo.com. 86400 IN A 192.168.153.129
這部分給出了額外的信息,顯示了 ns.demo.com 的 A 記錄,即 ns.demo.com 對應的 IPv4 地址是 192.168.153.129。
6. 其他信息;; Query time: 1 msec
;; SERVER: 192.168.153.129#53(192.168.153.129)
;; WHEN: Fri Apr 11 15:08:43 CST 2025
;; MSG SIZE rcvd: 98
Query time: 1 msec:查詢所花費的時間為 1 毫秒。
SERVER: 192.168.153.129#53(192.168.153.129):使用的 DNS 服務器地址和端口。
WHEN:查詢的時間。
MSG SIZE rcvd: 98:接收到的 DNS 消息的大小為 98 字節。
重要關注點總結
狀態碼:重點關注 status 字段,NOERROR 表示解析成功,其他狀態碼可能意味著存在問題,比如 NXDOMAIN 表示域名不存在。
回答記錄:確認回答記錄是否符合預期,例如查詢 NS 記錄時,要確保返回的名稱服務器信息正確。
TTL 值:TTL 值會影響 DNS 緩存的時間,需要根據實際情況進行調整。
額外信息:額外信息部分可能會提供名稱服務器的 IP 地址等有用信息,有助于進一步的網絡連接和排查問題。
反向解析?
?1、修改核心配置文件
[root@dns ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.72.135; };
directory "/var/named";
};
zone "demo.com" IN {
type master;
file "demo.com.zone";
};
zone "72.168.192.in-addr.arpa" IN {
type master;
file "fanxiang.zone";
};詳細解釋:
1. zone "72.168.192.in-addr.arpa" IN
zone:這是一個關鍵字,用于定義一個 DNS 區域。
"72.168.192.in-addr.arpa":這是反向 DNS 區域的名稱。在反向 DNS 中,IP 地址的各段順序會顛倒,并且使用 in-addr.arpa 作為頂級域名。這里對應的 IP 地址范圍是 192.168.72.0/24,也就是從 192.168.72.0 到 192.168.72.255。
IN:代表 Internet 類,是最常見的 DNS 記錄類別。
2. type master;
type:用于指定該區域的類型。
master:表示該 DNS 服務器是 72.168.192.in-addr.arpa 這個反向 DNS 區域的主服務器。主服務器負責維護該區域的權威數據,并且可以對區域文件進行修改。
3. file "fanxiang.zone";
file:用于指定該區域對應的區域文件的名稱。
"fanxiang.zone":這是反向 DNS 區域的區域文件,BIND 服務器會在 options 塊中 directory 選項指定的目錄下查找該文件。這個文件會包含 192.168.72.0/24 這個 IP 地址段的反向 DNS 記錄。
?2、編寫區域數據文件
注意:上面正向解析是寫完整的,真正配置有時候并不需要寫完整。
[root@dns ~]# vim /var/named/fanxiang.zone
$TTL 1D
@ IN SOA @ admin.demo.com. (0 1D 2H 2W 2D)
IN NS ns
ns IN A 192.168.72.135
135 IN PTR www.demo.com.詳細解釋:
1. $TTL 1D
$TTL 是 Time-To-Live 的縮寫,代表生存時間。它指定了 DNS 記錄在 DNS 緩存服務器中可被緩存的時長。
1D 表示 1 天,即 86400 秒。這意味著當其他 DNS 服務器或客戶端查詢該反向解析區域的記錄時,若查詢到結果,結果會在本地緩存 1 天,1 天后會重新向權威 DNS 服務器查詢。
2. @ IN SOA @ admin.demo.com. (0 1D 2H 2W 2D)
@:在區域文件中,@ 是一個占位符,代表當前的域名。在這里,結合前文配置,它代表的是 72.168.192.in-addr.arpa。
IN:表示 Internet 類,是最常見的 DNS 記錄類別。
SOA:即 Start of Authority(授權開始),是每個 DNS 區域文件必須有的記錄,它提供了該域名區域的權威信息。
第一個 @:代表主域名服務器的名稱,這里實際是 ns.72.168.192.in-addr.arpa。
admin.demo.com.:該域名區域管理員的郵箱地址,在 DNS 中用 . 替代郵箱地址里的 @,所以實際的郵箱地址是 admin@demo.com。
括號內的數字參數:
0:序列號,每次區域文件有修改時,該序列號要遞增,以便讓從服務器知曉區域文件有更新。
1D:刷新時間,從服務器每隔 1 天(86400 秒)會向主服務器查詢區域文件是否有更新。
2H:重試時間,若從服務器在刷新時失敗,會在 2 小時(7200 秒)后重試。
2W:過期時間,若從服務器在 2 周(1209600 秒)內都無法從主服務器獲取更新,就會認為該區域文件無效。
2D:最小 TTL,當 DNS 記錄沒有單獨指定 TTL 時,就使用這個最小 TTL 值。
3. IN NS ns
IN:Internet 類。
NS:即 Name Server(名稱服務器),用于指定該域名的權威 DNS 服務器。
ns:表示 ns.72.168.192.in-addr.arpa 是 72.168.192.in-addr.arpa 這個反向解析區域的權威 DNS 服務器。
4. ns IN A 192.168.72.135
ns:主機名,完整的域名是 ns.72.168.192.in-addr.arpa。
IN:Internet 類。
A:Address(地址)記錄,將主機名映射到對應的 IPv4 地址。
192.168.72.135:ns.72.168.192.in-addr.arpa 對應的 IPv4 地址。
5. 135 IN PTR www.demo.com.
135:在反向解析區域中,這里代表 IP 地址 192.168.72.135 的最后一段。因為反向解析是從 IP 地址的最后一段開始,結合區域名 72.168.192.in-addr.arpa,完整的反向解析域名是 135.72.168.192.in-addr.arpa。
IN:Internet 類。
PTR:Pointer(指針)記錄,用于反向域名解析,將 IP 地址映射到對應的域名。
www.demo.com.:表示 IP 地址 192.168.72.135 對應的域名是 www.demo.com。
3.嚴重區域配置文件語法
named-checkzone 72.168.192.in-addr.arpa /var/named/fanxiang.zone
zone 72.168.192.in-addr.arpa/IN: loaded serial 0
OK
4.重啟named服務
[root@dns ~]# systemctl restart named
5. 功能檢查
dig -x 192.168.72.135 @192.168.72.135
dig 是一個在 Linux 和其他類 Unix 系統中常用的 DNS 診斷工具,用于查詢 DNS 服務器并獲取域名或 IP 地址的相關信息。
dig -x 192.168.72.135 @192.168.72.135 命令各部分含義如下:
-x:這是 dig 命令的一個選項,專門用于反向 DNS 查詢。反向 DNS 查詢是將 IP 地址解析為對應的域名,與正向查詢(將域名解析為 IP 地址)相反。
192.168.72.135:這是你要進行反向查詢的 IP 地址。也就是說,你希望知道這個 IP 地址對應的域名是什么。
@192.168.72.135:@ 符號用于指定要查詢的 DNS 服務器地址。這里指定使用 192.168.72.135 這個 IP 地址對應的 DNS 服務器來進行查詢。
可能的輸出及含義
1. 成功查詢
如果反向 DNS 配置正確,并且?192.168.72.135
?對應的 DNS 服務器中存在該 IP 地址的反向解析記錄,你可能會看到類似如下的輸出:
; <<>> DiG 9.16.23-RH <<>> -x 192.168.72.135 @192.168.72.135
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4321
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;135.72.168.192.in-addr.arpa. IN PTR;; ANSWER SECTION:
135.72.168.192.in-addr.arpa. 86400 IN PTR www.demo.com.;; Query time: 1 msec
;; SERVER: 192.168.72.135#53(192.168.72.135)
;; WHEN: Fri Apr 11 16:30:00 CST 2025
;; MSG SIZE rcvd: 98
status: NOERROR
:表示查詢沒有錯誤,即成功查詢到結果。ANSWER SECTION
:這部分給出了查詢的答案。135.72.168.192.in-addr.arpa
?是將 IP 地址?192.168.72.135
?轉換為反向 DNS 查詢的域名格式,PTR
?記錄顯示該 IP 地址對應的域名是?www.demo.com
。
如果?192.168.72.135
?對應的 DNS 服務器中沒有該 IP 地址的反向解析記錄,你可能會看到如下輸出:
; <<>> DiG 9.16.23-RH <<>> -x 192.168.72.135 @192.168.72.135
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 4321
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;135.72.168.192.in-addr.arpa. IN PTR;; Query time: 1 msec
;; SERVER: 192.168.72.135#53(192.168.72.135)
;; WHEN: Fri Apr 11 16:30:00 CST 2025
;; MSG SIZE rcvd: 98
status: NXDOMAIN
:表示未找到該域名對應的記錄,即沒有為?192.168.72.135
?配置反向解析記錄。ANSWER SECTION
?為空:說明沒有返回任何答案。
3. 其他錯誤
如果 DNS 服務器出現問題,如無法訪問、配置錯誤等,可能會出現其他錯誤狀態碼,如?SERVFAIL
(服務器故障)等,同時會有相應的錯誤提示信息。
主從服務
配置主服務器
1、修改主機名
[root@dns ~]# hostnamectl hostname master
2、安裝bind軟件
[root@master ~]# dnf install bind -y
3、修改核心配置文件
[root@master ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.72.135; };
directory "/var/named";
};
zone "web.com" IN {
type master;
file "web.com.zone";
};
zone "72.168.192.in-addr.arpa" IN {
type master;
file "web.com.arpa";
};
4、編寫區域數據文件
正向解析
[root@master ~]# vim /var/named/web.com.zone
$TTL 1D
@ IN SOA web.com. admin.web.com. (0 1D 1H 1W 1D)
IN NS ns1.web.com.
IN NS ns2
ns1 IN A 192.168.72.135
ns2 IN A 192.168.72.132
www IN A 192.168.72.135反向解析
[root@master ~]# vim /var/named/web.com.arpa
$TTL 1D
@ IN SOA @ admin.web.com. (0 1D 1H 1W 1D)
IN NS ns1
IN NS ns2
ns1 IN A 192.168.72.135
ns2 IN A 192.168.72.132
135 IN PTR www.web.com.
132 IN PTR www.web.com.詳細解釋:
1. $TTL 1D
$TTL 代表 Time-To-Live(生存時間),用于規定 DNS 記錄在 DNS 緩存服務器中可被緩存的時長。
1D 表示 1 天,也就是 86400 秒。這意味著當其他 DNS 服務器或客戶端查詢該區域的記錄時,若查詢到結果,結果會在本地緩存 1 天,1 天后會重新向權威 DNS 服務器查詢。2. @ IN SOA web.com. admin.web.com. (0 1D 1H 1W 1D)
@:在區域文件里是占位符,代表當前域名,即 web.com。
IN:表示 Internet 類,是常見的 DNS 記錄類別。
SOA:即 Start of Authority(授權開始),是每個 DNS 區域文件必備的記錄,它給出了該域名區域的權威信息。
web.com.:主域名服務器的名稱。
admin.web.com.:該域名區域管理員的郵箱地址,DNS 中用 . 替代郵箱地址里的 @,實際郵箱地址是 admin@web.com。
括號內的數字參數:
0:序列號,每次區域文件有修改時,該序列號要遞增,以便讓從服務器知曉區域文件有更新。
1D:刷新時間,從服務器每隔 1 天(86400 秒)會向主服務器查詢區域文件是否有更新。
1H:重試時間,若從服務器在刷新時失敗,會在 1 小時(3600 秒)后重試。
1W:過期時間,若從服務器在 1 周(604800 秒)內都無法從主服務器獲取更新,就會認為該區域文件無效。
1D:最小 TTL,當 DNS 記錄沒有單獨指定 TTL 時,就使用這個最小 TTL 值。3. IN NS ns1.web.com. 和 IN NS ns2
IN:Internet 類。
NS:即 Name Server(名稱服務器),用于指定該域名的權威 DNS 服務器。
ns1.web.com.:明確 ns1.web.com 是 web.com 域名的權威 DNS 服務器之一。
ns2:完整域名是 ns2.web.com,它也是 web.com 域名的權威 DNS 服務器之一。4. ns1 IN A 192.168.72.135 和 ns2 IN A 192.168.72.132
ns1 和 ns2:分別是主機名,完整域名是 ns1.web.com 和 ns2.web.com。
IN:Internet 類。
A:Address(地址)記錄,將主機名映射到對應的 IPv4 地址。
192.168.72.135 和 192.168.72.132:分別是 ns1.web.com 和 ns2.web.com 對應的 IPv4 地址。5. www IN A 192.168.72.135
www:主機名,完整域名是 www.web.com。
IN:Internet 類。
A:Address 記錄,將主機名映射到 IPv4 地址。
192.168.72.135:www.web.com 對應的 IPv4 地址。反向解析區域文件 /var/named/web.com.arpa
1. $TTL 1D
含義與正向解析區域文件中的 $TTL 1D 相同,即默認的 DNS 記錄緩存時間為 1 天。2. @ IN SOA @ admin.web.com. (0 1D 1H 1W 1D)
@:代表當前的反向解析區域,這里推測可能是 72.168.192.in-addr.arpa(根據前面的 IP 地址推測)。
其他部分含義與正向解析區域文件中的 SOA 記錄相同。3. IN NS ns1 和 IN NS ns2
表示 ns1 和 ns2(完整域名分別是 ns1.72.168.192.in-addr.arpa 和 ns2.72.168.192.in-addr.arpa)是該反向解析區域的權威 DNS 服務器。4. ns1 IN A 192.168.72.135 和 ns2 IN A 192.168.72.132
含義與正向解析區域文件中的類似,分別給出了 ns1 和 ns2 對應的 IPv4 地址。5. 135 IN PTR www.web.com. 和 132 IN PTR www.web.com.
135 和 132:在反向解析區域中,分別代表 IP 地址 192.168.72.135 和 192.168.72.132 的最后一段。完整的反向解析域名分別是 135.72.168.192.in-addr.arpa 和 132.72.168.192.in-addr.arpa。
IN:Internet 類。
PTR:Pointer(指針)記錄,用于反向域名解析,將 IP 地址映射到對應的域名。
www.web.com.:表示 IP 地址 192.168.72.135 和 192.168.72.132 對應的域名都是 www.web.com。
配置從服務器
1.修改主機名
[root@dns ~]# hostnamectl hostname slave
2.按照bind?
[root@slave ~]# dnf install bind -y
3.修改核心配置文件
[root@slave ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.72.132; };
directory "/var/named";
};
zone "web.com" IN {
type slave;
masters { 192.168.72.135; };
file "slaves/web.com";
};
zone "72.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.72.135; };
file "slaves/web.arpa";
};詳細解釋:
全局選項部分(options 塊)options {listen-on port 53 { 192.168.72.132; };directory "/var/named";
};listen-on port 53 { 192.168.72.132; };:
listen-on 用于指定 DNS 服務器監聽的 IP 地址和端口。
port 53 表明監聽的是標準的 DNS 服務端口。
{ 192.168.72.132; } 意味著該 DNS 服務器僅在 IP 地址 192.168.72.132 上監聽來自客戶端的 DNS 查詢請求。
directory "/var/named";:
此選項定義了 DNS 區域文件的存儲目錄。BIND 服務器會在該目錄下查找和存儲相關的區域文件。
正向解析區域部分(zone "web.com" 塊)zone "web.com" IN {type slave;masters { 192.168.72.135; };file "slaves/web.com";
};
zone "web.com" IN:
zone 關鍵字用于定義一個域名區域。
"web.com" 是要管理的域名。
IN 表示 Internet 類,是最常見的域名區域類型。
type slave;:
type 用于指定該區域的類型。
slave 表示該 DNS 服務器是 web.com 域名區域的從服務器。從服務器會從主服務器(Master Server)同步區域文件,以確保數據的一致性。
masters { 192.168.72.135; };:
masters 用于指定該從服務器從哪個主服務器同步區域文件。
{ 192.168.72.135; } 表明主服務器的 IP 地址是 192.168.72.135。
file "slaves/web.com";:
此選項指定了 web.com 域名區域的區域文件名稱。BIND 服務器會在 directory 選項指定的目錄(即 /var/named)下的 slaves 子目錄中查找名為 web.com 的文件,該文件將存儲從主服務器同步過來的 web.com 域名的 DNS 記錄。反向解析區域部分(zone "72.168.192.in-addr.arpa" 塊)zone "72.168.192.in-addr.arpa" IN {type slave;masters { 192.168.72.135; };file "slaves/web.arpa";
};
zone "72.168.192.in-addr.arpa" IN:
定義了一個反向解析區域,對應的 IP 地址范圍是 192.168.72.0/24。
IN 同樣表示 Internet 類。
type slave;:
表明該服務器是 72.168.192.in-addr.arpa 反向解析區域的從服務器。
masters { 192.168.72.135; };:
指出該反向解析區域的主服務器 IP 地址為 192.168.72.135。
file "slaves/web.arpa";:
指定了反向解析區域的區域文件名稱,BIND 服務器會在 /var/named/slaves 目錄下查找名為 web.arpa 的文件,該文件將存儲從主服務器同步過來的反向解析記錄。
4.啟動服務
[root@master ~]# systemctl start named
[root@slave ~]# systemctl start named查看從服務器是否從主服務器接受了區域文件
[root@slave ~]# ls /var/named/slaves/
5.關閉防火墻?
[root@master ~]# systemctl stop firewalld
[root@slave ~]# systemctl stop firewalld關閉后重啟服務
[root@master ~]# systemctl restart named
[root@slave ~]# systemctl restart named然后在看是否有文件
[root@slave slaves]# ls
web.arpa web.com
6.出現錯誤
比如只有一個正向解析的文件,查看日志
tail /var/log/messages在從服務器和主服務器分別查詢以下IP與之前不同,但相匹配
主服務器
[root@master named]# tail /var/log/messages
Apr 11 17:14:30 localhost dnf[34560]: Updating Subscription Management repositories.
Apr 11 17:14:30 localhost dnf[34560]: Unable to read consumer identity
Apr 11 17:14:30 localhost dnf[34560]: This system is not registered with an entitlement server. You can use subscription-manager to register.
Apr 11 17:14:30 localhost dnf[34560]: Metadata cache refreshed recently.
Apr 11 17:14:30 localhost systemd[1]: dnf-makecache.service: Deactivated successfully.
Apr 11 17:14:30 localhost systemd[1]: Finished dnf makecache.
Apr 11 17:16:29 localhost named[34492]: client @0x7f773000d238 192.168.153.8#34471: received notify for zone 'web.com'
Apr 11 17:16:29 localhost named[34492]: client @0x7f772c009e08 192.168.153.8#56315 (153.168.192.in-addr.arpa): transfer of '153.168.192.in-addr.arpa/IN': AXFR started (serial 0)
Apr 11 17:16:29 localhost named[34492]: client @0x7f772c009e08 192.168.153.8#56315 (153.168.192.in-addr.arpa): transfer of '153.168.192.in-addr.arpa/IN': AXFR ended: 1 messages, 8 records, 233 bytes, 0.001 secs (233000 bytes/sec) (serial 0)
Apr 11 17:16:29 localhost named[34492]: client @0x7f7714000cc8 192.168.153.8#52655: received notify for zone '153.168.192.in-addr.arpa'從服務器
[root@slave ~]# tail /var/log/messages
Apr 11 17:16:31 tomcat2 named[33970]: network unreachable resolving './DNSKEY/IN': 2001:500:2f::f#53
Apr 11 17:16:31 tomcat2 named[33970]: network unreachable resolving './DNSKEY/IN': 2001:dc3::35#53
Apr 11 17:16:31 tomcat2 named[33970]: network unreachable resolving './DNSKEY/IN': 2001:7fe::53#53
Apr 11 17:16:32 tomcat2 named[33970]: resolver priming query complete
Apr 11 17:16:32 tomcat2 named[33970]: checkhints: b.root-servers.net/A (170.247.170.2) missing from hints
Apr 11 17:16:32 tomcat2 named[33970]: checkhints: b.root-servers.net/A (199.9.14.201) extra record in hints
Apr 11 17:16:32 tomcat2 named[33970]: checkhints: b.root-servers.net/AAAA (2801:1b8:10::b) missing from hints
Apr 11 17:16:32 tomcat2 named[33970]: checkhints: b.root-servers.net/AAAA (2001:500:200::b) extra record in hints
Apr 11 17:16:32 tomcat2 named[33970]: managed-keys-zone: Key 20326 for zone . is now trusted (acceptance timer complete)
Apr 11 17:16:32 tomcat2 named[33970]: managed-keys-zone: Key 38696 for zone . is now trusted (acceptance timer complete)
功能測試
從服務器測試[root@slave ~]# dig -t A www.web.com @192.168.72.135
命令整體功能
該命令的主要功能是向指定的 DNS 服務器查詢域名 www.web.com 的 A 記錄。A 記錄是 DNS 中最基本的記錄類型之一,它的作用是將域名映射到對應的 IPv4 地址。
命令各部分詳細解釋
dig:這是命令的主體,它是一個強大的 DNS 查詢工具,可用于執行各種類型的 DNS 查詢操作。
-t:這是 dig 命令的一個選項,-t 后面需要跟上要查詢的 DNS 記錄類型。在這個例子中,-t A 表示要查詢的是 A 記錄。除了 A 記錄,常見的 DNS 記錄類型還有 MX(郵件交換記錄)、NS(名稱服務器記錄)、CNAME(規范名稱記錄)等。
www.web.com:這是你要查詢的目標域名。你希望通過 DNS 查詢獲取這個域名對應的 IPv4 地址。
@192.168.72.135:@ 符號用于指定要查詢的 DNS 服務器地址。這里指定使用 IP 地址為 192.168.72.135 的 DNS 服務器來進行查詢。如果不指定 @ 及后面的 DNS 服務器地址,dig 會默認使用系統配置的 DNS 服務器進行查詢。
可能的輸出及含義
1. 成功查詢
如果查詢成功,并且 www.web.com 在 192.168.72.135 這個 DNS 服務器上有對應的 A 記錄,你可能會看到類似如下的輸出:; <<>> DiG 9.16.23-RH <<>> -t A www.web.com @192.168.72.135
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4321
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.web.com. IN A;; ANSWER SECTION:
www.web.com. 86400 IN A 192.168.72.100;; Query time: 1 msec
;; SERVER: 192.168.72.135#53(192.168.72.135)
;; WHEN: Fri Apr 11 18:30:00 CST 2025
;; MSG SIZE rcvd: 98
status: NOERROR:表示查詢沒有錯誤,即成功查詢到結果。
ANSWER SECTION:這部分給出了查詢的答案。www.web.com 的 A 記錄顯示該域名對應的 IPv4 地址是 192.168.72.100。86400 是該記錄的 TTL(Time-To-Live)值,單位為秒,意味著該記錄可以在緩存中保留 86400 秒(也就是 1 天)。
2. 未找到記錄
如果 www.web.com 在 192.168.72.135 這個 DNS 服務器上沒有對應的 A 記錄,你可能會看到如下輸出:; <<>> DiG 9.16.23-RH <<>> -t A www.web.com @192.168.72.135
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 4321
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.web.com. IN A;; Query time: 1 msec
;; SERVER: 192.168.72.135#53(192.168.72.135)
;; WHEN: Fri Apr 11 18:30:00 CST 2025
;; MSG SIZE rcvd: 98status: NXDOMAIN:表示未找到該域名對應的記錄,即 www.web.com 在這個 DNS 服務器上沒有 A 記錄。
ANSWER SECTION 為空:說明沒有返回任何答案。
3. 其他錯誤
如果 DNS 服務器出現問題,如無法訪問、配置錯誤等,可能會出現其他錯誤狀態碼,如 SERVFAIL(服務器故障)等,同時會有相應的錯誤提示信息。
綜上所述,通過這個 dig 命令,你可以驗證 www.web.com 在指定 DNS 服務器上的 A 記錄是否正確配置,以及能否正常查詢到對應的 IPv4 地址。
這里主服務器IP為192.168.153.129 從服務器IP為192.168.153.8
[root@slave ~]# dig -t A www.web.com @192.168.153.8; <<>> DiG 9.16.23-RH <<>> -t A www.web.com @192.168.153.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10356
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 4b7dfd010087c3e80100000067f8f77a684ced536baa38aa (good)
;; QUESTION SECTION:
;www.web.com. IN A;; ANSWER SECTION:
www.web.com. 86400 IN A 192.168.153.129;; Query time: 0 msec
;; SERVER: 192.168.153.8#53(192.168.153.8)
;; WHEN: Fri Apr 11 19:05:30 CST 2025
;; MSG SIZE rcvd: 84
關閉主服務器
[root@master ~]# systemctl stop named
[root@slave ~]# dig -t A www.web.com @192.168.72.132
; <<>> DiG 9.16.23-RH <<>> -t A www.web.com @192.168.72.132
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18916
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL:
1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: ef3b256908dd241c0100000067f66a9ae2b6942436a43cc1 (good)
;; QUESTION SECTION:
;www.web.com. IN A
;; ANSWER SECTION:
www.web.com. 86400 IN A 192.168.72.135
;; Query time: 0 msec
;; SERVER: 192.168.72.132#53(192.168.72.132)
;; WHEN: Wed Apr 09 20:39:54 CST 2025
;; MSG SIZE rcvd: 84你關閉了主 DNS 服務器(named 服務),但從從服務器 192.168.72.132 對 www.web.com 的 A 記錄查詢結果來看,仍然能正常獲取到域名對應的 IP 地址。下面為你詳細解釋這一現象。
1. 從服務器正常響應的原因
從服務器在主服務器關閉的情況下仍能響應查詢,是因為從服務器之前已經從主服務器同步了 web.com 區域的 DNS 數據。從服務器會定期從主服務器同步區域文件,將這些數據存儲在本地的區域文件中(在你之前的配置里,正向解析文件為 /var/named/slaves/web.com)。所以,即使主服務器停止運行,從服務器依然可以根據本地存儲的區域文件來響應客戶端的 DNS 查詢。
轉發服務
需求:
配置A服務器
# 1. 修改主機名
[root@slave ~]# hostnamectl hostname A
# 2. 修改核心配置文件
[root@A ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.72.132; };
directory "/var/named";
forward only;
forwarders { 192.168.72.135; }; # 要轉發的服務器地址
};1. forward only;
此指令告知 DNS 服務器(這里指 named),當它收到 DNS 查詢請求時,僅將該請求轉發給 forwarders 字段所指定的 DNS 服務器,而不會自行嘗試解析該查詢。若 forwarders 字段里的所有服務器都無法響應查詢,那么該 DNS 服務器就會返回查詢失敗的結果。2. forwarders { 192.168.72.135; };
forwarders 指令用于指定一個或多個 DNS 服務器的 IP 地址,當本 DNS 服務器收到查詢請求時,會把這些請求轉發給 forwarders 中指定的服務器進行解析。在你給出的配置里,192.168.72.135 就是要轉發查詢請求的目標 DNS 服務器的 IP 地址。
配置B服務器
# 1. 修改主機名
[root@master ~]# hostnamectl hostname B
# 2. 修改核心配置文件
[root@B ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.72.135; };
directory "/var/named";
};
zone "web.com" IN {
type master;
file "web.com.zone";
};
zone "72.168.192.in-addr.arpa" IN {
type master;
file "web.com.arpa";
};
編寫區域文件
# 3. 編寫區域數據文件
正向解析文件
[root@B ~]# vim /var/named/web.com.zone
$TTL 1D
@ IN SOA web.com. admin.web.com. (0 1D 1H 1W 1D)
IN NS ns1.web.com.
IN NS ns2
ns1 IN A 192.168.72.135
ns2 IN A 192.168.72.132
www IN A 192.168.72.135反向解析文件
[root@B ~]# vim /var/named/web.com.arpa
$TTL 1D
@ IN SOA @ admin.web.com. (0 1D 1H 1W 1D)
IN NS ns1
IN NS ns2
ns1 IN A 192.168.72.135
ns2 IN A 192.168.72.132
135 IN PTR www.web.com.
132 IN PTR www.web.com.PTR:Pointer(指針)記錄,用于反向域名解析,將 IP 地址映射到對應的域名。
www.demo.com.:表示 IP 地址 192.168.72.135 對應的域名是 www.demo.com。
啟動A和B服務器
[root@B ~]# systemctl start named[root@A ~]# systemctl start named
功能測試
[root@A ~]# dig -t NS web.com @192.168.72.132
; <<>> DiG 9.16.23-RH <<>> -t NS web.com @192.168.72.132
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41517
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL:
3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 85ae1e7026ec807d0100000067f66e29885716aa701f1267 (good)
;; QUESTION SECTION:
;web.com. IN NS
;; ANSWER SECTION:
web.com. 86400 IN NS ns2.web.com.
web.com. 86400 IN NS ns1.web.com.
;; ADDITIONAL SECTION:
ns1.web.com. 86400 IN A 192.168.72.135
ns2.web.com. 86400 IN A 192.168.72.132
;; Query time: 0 msec
;; SERVER: 192.168.72.132#53(192.168.72.132)
;; WHEN: Wed Apr 09 20:55:05 CST 2025
;; MSG SIZE rcvd: 132
可能結果稍有不同,但是你要查找的NS信息要有。(我剛開始也沒有一下消息,可以重啟試試,原因多種多樣)
?;; ADDITIONAL SECTION:
ns1.web.com. 86400 IN A 192.168.72.135
ns2.web.com. 86400 IN A 192.168.72.132
這部分是額外信息
DNS 協議的額外信息機制:DNS 協議規定,當 DNS 服務器在響應查詢時,如果它知道與答案部分(ANSWER SECTION
)中的某些記錄相關的其他有用信息(如?NS
?記錄對應的?A
?記錄),并且這些信息可以在不額外進行查詢的情況下提供,那么它會將這些信息放在?ADDITIONAL SECTION
?中返回。
詳細介紹:
1. 命令部分
plaintext
[root@A ~]# dig -t NS web.com @192.168.72.132dig:這是一個用于查詢 DNS 信息的工具。
-t NS:指定查詢的記錄類型為 NS(名稱服務器記錄)。
web.com:要查詢的域名。
@192.168.72.132:指定向 IP 地址為 192.168.72.132 的 DNS 服務器發起查詢。
2. 全局選項和查詢信息
plaintext
; <<>> DiG 9.16.23-RH <<>> -t NS web.com @192.168.72.132
;; global options: +cmd
; 開頭的行是注釋行,顯示了使用的 dig 版本和具體的查詢命令。
global options: +cmd 表明啟用了命令行模式。
3. 響應頭部信息
plaintext
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41517
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3
Got answer: 表示成功收到了 DNS 服務器的響應。
opcode: QUERY:表明查詢操作碼為標準查詢。
status: NOERROR:意味著查詢沒有錯誤,正常返回結果。
id: 41517:是查詢的唯一標識符。
flags: qr aa rd ra:
qr(Query Response):表示這是一個響應消息。
aa(Authoritative Answer):表示該 DNS 服務器是所查詢域名的權威服務器。
rd(Recursion Desired):表示查詢時請求遞歸解析。
ra(Recursion Available):表示 DNS 服務器支持遞歸查詢。
QUERY: 1:表示查詢的記錄數量為 1 條。
ANSWER: 2:表示響應中包含 2 條答案記錄。
AUTHORITY: 0:表示響應中沒有權威記錄。
ADDITIONAL: 3:表示響應中包含 3 條額外信息記錄。
4. EDNS 偽部分
plaintext
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 85ae1e7026ec807d0100000067f66e29885716aa701f1267 (good)
EDNS(Extension Mechanisms for DNS):是 DNS 的擴展機制,這里版本為 0。
udp: 1232:表示 UDP 數據包的最大大小為 1232 字節。
COOKIE:用于防止 DNS 反射攻擊,這里顯示 good 表示驗證通過。
5. 查詢問題部分
plaintext
;; QUESTION SECTION:
;web.com. IN NS
這部分顯示了查詢的問題,即查詢 web.com 的 NS 記錄。
6. 答案部分
plaintext
;; ANSWER SECTION:
web.com. 86400 IN NS ns2.web.com.
web.com. 86400 IN NS ns1.web.com.
web.com.:查詢的域名。
86400:記錄的 TTL(Time-To-Live)值,單位為秒,這里表示 86400 秒(即 1 天)。
IN:表示使用 Internet 類的 DNS 記錄。
NS:記錄類型為名稱服務器記錄。
ns2.web.com. 和 ns1.web.com.:是 web.com 的名稱服務器。
7. 額外信息部分
plaintext
;; ADDITIONAL SECTION:
ns1.web.com. 86400 IN A 192.168.72.135
ns2.web.com. 86400 IN A 192.168.72.132
這部分提供了答案部分中名稱服務器對應的 A(地址)記錄。
ns1.web.com. 和 ns2.web.com.:名稱服務器的域名。
86400:記錄的 TTL 值。
IN:Internet 類的 DNS 記錄。
A:記錄類型為地址記錄。
192.168.72.135 和 192.168.72.132:分別是 ns1.web.com 和 ns2.web.com 對應的 IPv4 地址。
8. 其他信息
plaintext
;; Query time: 0 msec
;; SERVER: 192.168.72.132#53(192.168.72.132)
;; WHEN: Wed Apr 09 20:55:05 CST 2025
;; MSG SIZE rcvd: 132
Query time: 0 msec:表示查詢耗時為 0 毫秒。
SERVER: 192.168.72.132#53(192.168.72.132):表示查詢的 DNS 服務器地址和端口。
WHEN: Wed Apr 09 20:55:05 CST 2025:表示查詢的時間。
MSG SIZE rcvd: 132:表示收到的 DNS 消息大小為 132 字節。
可能出現的問題:
可能有人不會出現問題,但可能也有問題,先查看日志/var/log/messages
一下展示IP不一樣但是操作相對應
DNS 服務器返回了 SERVFAIL 狀態
[root@A yum.repos.d]# dig -t NS web.com @192.168.153.129; <<>> DiG 9.16.23-RH <<>> -t NS web.com @192.168.153.129
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 49789
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 32b30e0077a88d270100000067fb862914dc6c996c12d786 (good)
;; QUESTION SECTION:
;web.com. IN NS;; Query time: 45 msec
;; SERVER: 192.168.153.129#53(192.168.153.129)
;; WHEN: Sun Apr 13 17:38:49 CST 2025
;; MSG SIZE rcvd: 64DNS 服務器返回了 SERVFAIL 狀態
可能原因:
可能的原因
1. 轉發服務器問題
你在 named.conf 里配置了 forward only 和 forwarders {192.168.153.8;};,這表明 DNS 服務器會把所有查詢請求轉發給 192.168.153.8。若該轉發服務器出現故障、配置有誤或者不可達,就會導致查詢失敗。
2. DNSSEC 驗證問題
之前的日志顯示存在 DNSSEC 驗證失敗的情況,例如無法驗證根區域的 DNSKEY 集合以及在解析根區域 NS 記錄時簽名驗證失敗。DNSSEC 驗證失敗可能會使 named 服務器拒絕接受查詢結果,從而返回 SERVFAIL。
3. 網絡連接問題
雖然之前 ping 測試顯示 192.168.153.8 可達,但網絡連接可能存在不穩定或者防火墻限制了 DNS 流量的情況。
4. named 服務配置問題
named 服務的配置文件(如 /etc/named.conf)可能存在錯誤,例如區域配置錯誤、權限設置不當等,這也會影響 DNS 查詢的正常處理。
解決方法?
第二個問題應該是大部分人在正常操作下依然會出現的問題,檢查日志也會有提示。
解決建議
1. 檢查轉發服務器
測試轉發服務器的 DNS 服務:使用 dig 命令直接向 192.168.153.8 查詢 web.com 的 NS 記錄:
dig -t NS web.com @192.168.153.8
若該命令也失敗,就需要檢查 192.168.153.8 這臺服務器的 DNS 配置和運行狀態。2. 處理 DNSSEC 問題
暫時禁用 DNSSEC:在 /etc/named.conf 中添加或修改以下內容:options {dnssec-enable no;dnssec-validation no;
};
然后重啟 named 服務:
systemctl restart named
再次執行 dig 查詢,查看是否能正常獲取結果。如果禁用 DNSSEC 后查詢成功,就說明問題可能出在 DNSSEC 配置上,你需要進一步檢查和修正。3. 檢查網絡連接和防火墻
檢查防火墻規則:確保防火墻允許 DNS 流量通過。如果你使用的是 firewalld,可以添加以下規則:sudo firewall-cmd --add-service=dns --permanent
sudo firewall-cmd --reload
測試網絡穩定性:可以使用 traceroute 命令查看網絡路徑是否存在問題:traceroute 192.168.153.84. 檢查 named 服務配置
檢查配置文件語法:使用 named-checkconf 命令檢查 /etc/named.conf 文件的語法是否正確:named-checkconf /etc/named.conf若有錯誤信息,根據提示進行修正。
檢查區域文件:確保區域文件(通常位于 /var/named 目錄下)的配置正確,并且 named 服務對這些文件有讀寫權限。
第二項解決方法詳解
在 DNS 服務器(如 BIND 軟件的 named 服務)的配置文件(通常是 /etc/named.conf)中,options 塊里的 dnssec-enable no; 和 dnssec-validation no; 這兩個配置項的作用如下:
dnssec-enable no;:
dnssec-enable 用于控制是否啟用 DNSSEC(DNS Security Extensions,DNS 安全擴展)功能。當設置為 no 時,表示在該 DNS 服務器上禁用 DNSSEC 功能。
DNSSEC 的主要目的是通過使用數字簽名來驗證 DNS 數據的來源和完整性,防止 DNS 欺騙和緩存投毒等攻擊。禁用 dnssec-enable 意味著服務器不會生成或處理 DNSSEC 相關的記錄(如 DNSKEY、RRSIG 等),也不會使用 DNSSEC 來驗證查詢結果的真實性。
dnssec-validation no;:
dnssec-validation 用于控制是否對 DNS 查詢結果進行 DNSSEC 驗證。設置為 no 時,DNS 服務器不會對從其他 DNS 服務器獲取的查詢結果進行 DNSSEC 驗證。
即使 DNSSEC 功能在服務器上已啟用(dnssec-enable yes),如果 dnssec-validation 設置為 no,服務器也不會檢查接收到的 DNS 記錄是否帶有有效的數字簽名,而是直接使用這些記錄。這在某些情況下可能是有用的,例如當你信任所有的 DNS 數據源,或者當 DNSSEC 驗證出現問題(如密鑰管理復雜、驗證失敗等)而你希望暫時繞過驗證時。
?DNS和Nginx

配置 DNS
1、修改主機名
[root@B ~]# hostnamectl hostname dns
2、安裝bind
[root@dns ~]# dnf install bind -y
3、修改核心配置文件
[root@dns ~]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.72.135; };
directory "/var/named";
};
zone "web.com" IN {
type master;
file "web.named";
};
4、編寫區域配置文件
[root@dns ~]# vim /var/named/web.named
$TTL 1D
@ IN SOA @ admin.web.com. (0 1D 1H 1W 1D)
IN NS ns
ns IN A 192.168.72.135
www IN A 192.168.72.132 # 指定nginx服務器的IP地址
5、關閉防火墻
[root@dns ~]# systemctl stop firewalld?
6、啟動named服務?
[root@dns ~]# systemctl start named
配置nginx
1.修改主機名
[root@A ~]# hostnamectl hostname web
2、安裝nginx
[root@web ~]# dnf install nginx -y
3、配置nginx
[root@web ~]# vim /etc/nginx/conf.d/web.conf
server {
listen 80;
server_name www.web.com;
root /usr/share/nginx/html;
}
4、修改DNS地址?
[root@web ~]# ping www.web.com
PING www.web.com (162.159.133.36) 56(84) bytes of data.
64 bytes from 162.159.133.36 (162.159.133.36): icmp_seq=1 ttl=128
time=188 ms
^C64 bytes from 162.159.133.36: icmp_seq=2 ttl=128 time=192 ms
--- www.web.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 188.275/189.898/191.522/1.623 ms
[root@web ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]: 223.5.5.5
# 將dns地址修改為我們自己的DNS服務器地址
[root@web ~]# nmcli c mod ens160 ipv4.dns 192.168.72.135
[root@web ~]# nmcli c up ens160
Connection successfully activated (D-Bus active path:
/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@web ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]: 192.168.72.135
[root@web ~]# ping www.web.com -c 3
PING www.web.com (192.168.72.132) 56(84) bytes of data.
64 bytes from web (192.168.72.132): icmp_seq=1 ttl=64 time=0.032 ms
64 bytes from web (192.168.72.132): icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from web (192.168.72.132): icmp_seq=3 ttl=64 time=0.040 ms
--- www.web.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.032/0.035/0.040/0.003 ms
詳細解釋:
初始 ping 操作:
bash
[root@web ~]# ping www.web.com
PING www.web.com (162.159.133.36) 56(84) bytes of data.
64 bytes from 162.159.133.36 (162.159.133.36): icmp_seq=1 ttl=128
time=188 ms
^C64 bytes from 162.159.133.36: icmp_seq=2 ttl=128 time=192 ms
--- www.web.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 188.275/189.898/191.522/1.623 msping 命令用于測試網絡連通性,ping www.web.com 是向域名 www.web.com 發送 ICMP 回顯請求數據包。
(162.159.133.36) 表示當前解析到的 www.web.com 對應的 IP 地址,這是通過系統當前配置的 DNS 服務器(后續查看為 223.5.5.5)解析得到的。
icmp_seq=1 等表示 ICMP 數據包的序號,ttl(Time To Live,生存時間)為 128,time=188 ms 等表示數據包往返的時間。
^C 表示用戶手動終止了 ping 操作。
最后的統計信息顯示發送了 2 個數據包,接收了 2 個數據包,沒有丟包,并且給出了最小、平均、最大往返時間(rtt)和時間偏差(mdev)。
查看當前 DNS 配置:
bash
[root@web ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]: 223.5.5.5nmcli 是一個用于控制 NetworkManager 的命令行工具。nmcli d show ens160 用于顯示網絡設備 ens160 的詳細信息,| grep DNS 是通過管道將輸出內容過濾,只顯示包含 DNS 的行。這里顯示當前網絡設備 ens160 使用的 IPv4 DNS 服務器地址為 223.5.5.5,這是一個常見的公共 DNS 服務器(阿里云的公共 DNS)。
修改 DNS 服務器地址:
bash
[root@web ~]# nmcli c mod ens160 ipv4.dns 192.168.72.135nmcli c mod ens160 ipv4.dns 192.168.72.135 命令用于修改網絡連接配置文件(針對設備 ens160),將 IPv4 的 DNS 服務器地址設置為 192.168.72.135。這意味著后續系統在進行域名解析時,將首先向這個地址的 DNS 服務器發送請求。
激活網絡連接:
bash
[root@web ~]# nmcli c up ens160
Connection successfully activated (D-Bus active path:
/org/freedesktop/NetworkManager/ActiveConnection/4)nmcli c up ens160 用于激活網絡連接 ens160,使剛才修改的 DNS 配置生效。提示 Connection successfully activated 表示連接激活成功。
再次查看 DNS 配置:
bash
[root@web ~]# nmcli d show ens160 | grep DNS
IP4.DNS[1]: 192.168.72.135再次查看網絡設備 ens160 的 DNS 配置,確認已經成功修改為 192.168.72.135。
再次 ping 操作:
bash
[root@web ~]# ping www.web.com -c 3
PING www.web.com (192.168.72.132) 56(84) bytes of data.
64 bytes from web (192.168.72.132): icmp_seq=1 ttl=64 time=0.032 ms
64 bytes from web (192.168.72.132): icmp_seq=2 ttl=64 time=0.034 ms
64 bytes from web (192.168.72.132): icmp_seq=3 ttl=64 time=0.040 ms
--- www.web.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.032/0.035/0.040/0.003 msping www.web.com -c 3 表示向 www.web.com 發送 3 個 ICMP 回顯請求數據包(-c 3 參數指定數據包數量)。
此時解析到的 www.web.com 的 IP 地址變為 192.168.72.132,這是通過新設置的 DNS 服務器 192.168.72.135 解析得到的。
同樣給出了每個數據包的序號、ttl 值、往返時間,以及最終的統計信息,顯示沒有丟包且往返時間明顯變短(相比之前使用公共 DNS 服務器的情況),說明使用新的 DNS 服務器解析后,網絡連接情況有所不同。
5、啟動nginx服務
[root@web ~]# systemctl start nginx
6、測試?
[root@web ~]# echo "welcome nginx" > /usr/share/nginx/html/index.html
[root@web ~]# curl www.web.com
welcome nginx
整體流程分析:
整體工作流程
1. 前期配置階段
DNS 服務器配置
修改主機名:將服務器主機名修改為 dns,方便管理和識別,確保在網絡環境中服務器標識清晰。
安裝 Bind:安裝 bind 軟件包,這是一款廣泛使用的 DNS 服務器軟件,為服務器提供 DNS 服務能力。
修改核心配置文件:在 /etc/named.conf 中,指定 DNS 服務器監聽的 IP 地址和端口(通常是 53 端口),定義 DNS 區域文件存儲目錄,并配置特定域名(如 web.com)的區域信息,表明該服務器是該域名的權威 DNS 服務器。
編寫區域配置文件:在 /var/named/web.named 中,設置域名記錄的生存時間(TTL),定義起始授權記錄(SOA),指定域名服務器(NS)記錄,以及將域名(如 www.web.com)映射到對應的 IP 地址(如 192.168.72.132)。
關閉防火墻:為避免防火墻規則阻礙 DNS 服務的正常通信,關閉防火墻或者開放相應的端口(如 UDP 和 TCP 的 53 端口)。
啟動 named 服務:啟動 named 進程,使 DNS 服務器開始監聽并處理 DNS 查詢請求。
Nginx 服務器配置
修改主機名:將服務器主機名修改為 web,便于識別該服務器為 Web 服務器。
安裝 Nginx:安裝 nginx 軟件包,使服務器具備提供 Web 服務的能力。
配置 Nginx:在 /etc/nginx/conf.d/web.conf 中,配置 nginx 監聽的端口(通常是 80 端口),指定服務器對應的域名(如 www.web.com),并設置網站的根目錄。
修改 DNS 地址:將客戶端(或 nginx 服務器自身)的 DNS 服務器地址修改為之前配置好的 DNS 服務器地址(如 192.168.72.135),確保后續的域名解析請求發送到該 DNS 服務器。
啟動 Nginx 服務:啟動 nginx 進程,使 Web 服務器開始監聽并處理 HTTP 請求。
2. 請求處理階段
用戶發起請求:用戶在瀏覽器中輸入 http://www.web.com,瀏覽器會首先向操作系統配置的 DNS 服務器發送 DNS 查詢請求,請求解析 www.web.com 對應的 IP 地址。
DNS 解析過程:
操作系統將查詢請求發送到配置的 DNS 服務器(如 192.168.72.135)。
DNS 服務器接收到查詢請求后,根據其區域配置文件(如 web.named),查找 www.web.com 對應的 IP 地址(如 192.168.72.132),并將該 IP 地址返回給操作系統。
HTTP 請求與響應:
操作系統將獲取到的 IP 地址(192.168.72.132)返回給瀏覽器,瀏覽器根據該 IP 地址和端口 80 向 nginx 服務器發送 HTTP 請求。
nginx 服務器接收到 HTTP 請求后,根據配置文件(如 web.conf)中的 server_name 匹配到 www.web.com,并從 root 指定的目錄(如 /usr/share/nginx/html)中查找對應的網頁文件(如 index.html)。
nginx 服務器將找到的網頁文件內容作為 HTTP 響應返回給瀏覽器,瀏覽器將其渲染并顯示給用戶。
DNS 服務器和 Nginx 服務器的重要作用
DNS 服務器的作用
域名解析:DNS 服務器是整個流程的關鍵環節,它將用戶輸入的域名(如 www.web.com)轉換為對應的 IP 地址(如 192.168.72.132)。由于 IP 地址是數字形式,不便于用戶記憶和輸入,而域名更符合人類的認知習慣,因此 DNS 服務器的域名解析功能使得用戶可以通過域名方便地訪問互聯網上的資源。
負載均衡與故障轉移:在更復雜的網絡環境中,DNS 服務器可以實現負載均衡,將不同用戶的請求分配到多個服務器上,提高系統的性能和可用性。同時,當某個服務器出現故障時,DNS 服務器可以將請求重定向到其他可用的服務器,實現故障轉移。
權威管理:作為特定域名(如 web.com)的權威 DNS 服務器,它負責管理該域名的所有 DNS 記錄,確保記錄的準確性和一致性。當域名的配置發生變化時,只需在 DNS 服務器上更新相應的記錄,即可使全網的用戶訪問到最新的資源。
Nginx 服務器的作用
Web 服務提供:nginx 服務器是 Web 應用的核心,它負責接收客戶端的 HTTP 請求,并根據配置文件提供相應的網頁內容。用戶在瀏覽器中看到的網頁就是由 nginx 服務器從指定的目錄中讀取并返回的。
反向代理:nginx 可以作為反向代理服務器,將客戶端的請求轉發到后端的應用服務器上,并將應用服務器的響應返回給客戶端。這樣可以隱藏后端服務器的真實 IP 地址,提高系統的安全性,同時還可以實現負載均衡和緩存等功能。
靜態資源處理:nginx 對靜態資源(如 HTML、CSS、JavaScript、圖片等)的處理非常高效,它可以快速地讀取和返回這些資源,減輕后端應用服務器的負擔,提高系統的整體性能。
HTTP 協議處理:nginx 支持多種 HTTP 協議和特性,如 HTTP/1.1、HTTP/2 等,能夠處理復雜的 HTTP 請求和響應,包括請求頭、響應頭、Cookie 等,確保 Web 應用的正常運行。