DNS協議效能最佳化與引流實踐

DNS協議

一、DNS:域名名稱系統

主機解析
正向解析:將計算機名轉換成IP地址
反向解析:將IP地址轉換成計算機名
FQDN(Fully Qualified Domain Name)完全合格域名/全稱域名

DNS查詢的具體工作原理

1. 使用者輸入網址

當你在瀏覽器中輸入一個網址,比如 www.example.com,瀏覽器首先需要知道這個域名對應的IP地址。因為計算機只能透過IP地址進行通訊,所以DNS的作用就是將域名轉換為IP地址。

2. 本地快取查詢

瀏覽器會先查詢自己本地的DNS快取。每次你訪問一個網站,作業系統和瀏覽器都會快取DNS查詢結果。這樣,當你再次訪問相同的網站時,系統就可以直接從快取中提取IP地址,而無需重新進行DNS查詢。
如果快取中有對應的記錄,瀏覽器就直接使用這個IP地址進行訪問。

3. 作業系統查詢DNS伺服器

如果快取中沒有相關記錄,作業系統就會查詢配置的DNS伺服器。通常,作業系統會使用ISP(Internet Service Provider,網際網路服務提供商)提供的DNS伺服器,或者你自己設定的第三方DNS(比如Google的8.8.8.8,Cloudflare的1.1.1.1等)。

4. 遞迴查詢過程

如果本地DNS伺服器也沒有域名的記錄,它會開始一個遞迴查詢的過程。這個過程涉及多個DNS伺服器的逐級查詢。
  • 根DNS伺服器:首先,DNS請求會被髮送到根DNS伺服器。根DNS伺服器是DNS系統的頂級伺服器,管理著所有頂級域(如 .com.org.net 等)。
  • 頂級域名伺服器(TLD):根伺服器會根據請求的域名(如 example.com),將查詢請求指向對應的TLD伺服器(例如 .com 域的TLD伺服器)。
  • 權威DNS伺服器:TLD伺服器會返回指定域名的權威DNS伺服器地址。這個權威伺服器擁有該域名的確切記錄,可以返回最終的IP地址。

5. 獲取IP地址

一旦查詢到權威DNS伺服器,它會返回對應域名的IP地址。這個地址可以是IPv4(如 192.0.2.1)或IPv6(如 2001:db8::1)格式。
返回結果後,DNS查詢過程就結束了,作業系統將會把這個IP地址返回給瀏覽器,瀏覽器就可以透過這個IP地址連線到目標網站的伺服器,獲取網站的內容。

6. 本地快取

為了提高效率,DNS伺服器和作業系統都會快取結果。這樣,當再次訪問相同的網站時,就不需要重新進行整個查詢過程,而是直接從快取中取出IP地址。

DNS查詢過程圖解

瀏覽器請求域名解析 →

作業系統查詢本地快取 →

快取命中:直接使用快取的

IP

地址(如果有)。

未命中:查詢DNS伺服器 →

DNS

伺服器查詢根DNS伺服器 →

根DNS伺服器返回TLD伺服器地址 →

TLD

伺服器返回權威DNS伺服器地址 →

權威DNS伺服器返回最終的

IP

地址 →

瀏覽器訪問

IP

地址,載入網頁內容。

DNS

的型別

A記錄(Address Record):將域名對映到IPv4地址。

AAAA

記錄:將域名對映到IPv6地址。

CNAME

記錄(Canonical Name):將一個域名別名對映到另一個域名。

MX

記錄(Mail Exchange):定義郵件交換伺服器,用於處理電子郵件。

NS

記錄(Name Server):指示負責某一域的權威DNS伺服器。

TXT

記錄:儲存文字資訊,常用於驗證域名所有權等用途。

配置dns伺服器

1.安裝bind包

[root@web01 network-scripts]# yum install -y bind

2.啟動named服務

[root@web01 network-scripts]# systemctl enable named.service --now

3.注意事項

dns服務儘量reload,因為restart會清空dns快取

3.檢視埠

[root@web01 network-scripts]# netstat -tunpl |grep -w 53

tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3617/named

tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2032/dnsmasq

tcp6 0 0 ::1:53 :::* LISTEN 3617/named

udp 0 0 127.0.0.1:53 0.0.0.0:* 3617/named

udp 0 0 192.168.122.1:53 0.0.0.0:* 2032/dnsmasq

udp6 0 0 ::1:53 :::* 3617/named

4.修改配置檔案

[root@web01 network-scripts]# vim /etc/named.conf

options {
# 設定 DNS 伺服器監聽的地址和埠。這裡限制僅在本地迴環地址上監聽。
listen-on port 53 { 127.0.0.1; }; # 只在 IPv4 本地地址上監聽 53 埠

listen-on-v6 port 53 { ::1; }; # 只在 IPv6 本地地址上監聽 53 埠
# 設定 DNS 資料儲存目錄,通常包含資料庫檔案、日誌檔案等。
directory "/var/named"; # 資料庫檔案儲存的預設目錄,通常是 Zone 檔案所在位置。
# 設定快取轉儲檔案的路徑,用於除錯和分析快取資料。
dump-file "/var/named/data/cache_dump.db"; # 快取轉儲檔案,記錄當前快取內容
# 設定統計資訊儲存檔案路徑,用於記錄 DNS 查詢統計資訊。
statistics-file "/var/named/data/named_stats.txt"; # 儲存統計資料的檔案路徑
# 設定記憶體統計資訊檔案,用於記錄記憶體使用情況。
memstatistics-file "/var/named/data/named_mem_stats.txt"; # 儲存記憶體統計資訊的檔案路徑
# 設定安全根金鑰檔案,通常用於 DNSSEC(域名系統安全擴充套件)。
secroots-file "/var/named/data/named.secroots"; # 儲存根金鑰的檔案路徑
# 設定遞迴查詢過程中需要的檔案路徑,用於記錄遞迴查詢狀態。
recursing-file "/var/named/data/named.recursing"; # 儲存遞迴查詢過程中的檔案路徑
# 配置允許查詢的客戶端,只有 localhost(本地地址)可以查詢。
allow-query { localhost; }; # 只能本機查詢本機,可以設定為網段或者any

recursion yes; # 啟用遞迴查詢功能,表示此 DNS 伺服器是一個遞迴伺服器
};

zone "8.168.192.in-addr.arpa" IN {

type master; #主dns

file "named.yutianedu"; #指定zone解析檔案,絕對路徑/var/named

allow-update { none; }; #是否允許自動更新,none代表不允許

};

#

這是根dns的zone

zone "." IN {

type hint;

file "named.ca";

};

配置正向dns(許可權要注意)

[root@web01 named]# cat /etc/named.rfc1912.zones 在這個配置檔案中加一行

zone "myopenai.com" IN {

type master;

file "named.myopenai";

allow-update { none; };

};

[root@web01 named]# cp -p named.localhost named.myopenai 許可權問題

[root@web01 named]# cat named.myopenai

$

TTL 1D

@ IN SOA ns.myopenai.com. root.myopenai.com. (

0 ; serial

1D ; refresh

1H ; retry

1W ; expire

3H ) ; minimum

NS ns.myopenai.com.

ns A 192.168.5.11

www A 192.168.5.11

ftp A 192.168.5.12

web CNAME www.baidu.com.


#

配置檔案解析

$

TTL 1D

###生命週期,dns快取檔案最長時間
###SOA記錄:起始授權機構:Start of Authority Record

1D:每天主DNS與備DNS同步一次

1H: 如果主從同步不成功,則每小時重試一次

1W:每小時重試一次,1周內還未同步成功,則放棄

3H:失敗的解析保留3小時在快取中

0:序列號:每次備DNS主動詢問主DNS,你有記錄更新嗎?如果主DNS更新了記錄,需要增加序列號,備份DNS才會同步新的記錄

ns:name server 它用於指定一個域名所對應的 權威 DNS 伺服器,即負責管理該域名的 DNS 資訊的伺服器。

CNAME:別名

將database這個主機新增兩條A記錄,實現DNS輪詢


#

測試

[root@kvm ~]# nslookup

>

www.myopenai.com

Server: 192.168.5.101

Address: 192.168.5.101#53
Name: www.myopenai.com

Address: 192.168.5.11

配置反向解析

1.

[root@dns named]# cat /etc/named.rfc1912.zones

zone "5.168.192.in-addr.arpa" IN {

type master;

file "named.my";

allow-update { none; };

};

2.

[root@dns named]# cat named.my

$

TTL 1D

@ IN SOA ns.myopenai.com. root.myopenai.com. (

0 ; serial

1D ; refresh

1H ; retry

1W ; expire

3H ) ; minimum

NS ns.myopenai.com.

ns A 192.168.5.11

11 PTR www.myopenai.com. #PTR: Point Record 反向解析

#

配置檔案解析
3.測試

[root@kvm ~]# nslookup 192.168.5.11

11.5.168.192.in-addr.arpa name = www.myopenai.com.

DNS記錄

A:將一個主機名轉換為IPV4 Address

AAAA: 將一個主機名轉換為IPV6 Address

輔助dns搭建

搭建高可用叢集

主--->從

但從端不能同步給主端

從端DNS不能修改

只能由主端同步資料給從端
環境規劃

主dns:192.168.5.101

從dns:192.168.5.102
從dns配置:

1.修改配置檔案

[root@dns2 slaves]# cat /etc/named.conf

options {

listen-on port 53 { any; };

listen-on-v6 port 53 { any; };

directory "/var/named";

dump-file "/var/named/data/cache_dump.db";

statistics-file "/var/named/data/named_stats.txt";

memstatistics-file "/var/named/data/named_mem_stats.txt";

secroots-file "/var/named/data/named.secroots";

recursing-file "/var/named/data/named.recursing";

allow-query { any; };

[root@dns2 slaves]# cat /etc/named.rfc1912.zones

zone "myopenai.com" IN {

type slave;

file "slaves/named.myopai";

masters { 192.168.5.101; };

};

zone "5.168.192.in-addr.arpa" IN {

type slave;

file "slaves/myopai.zone";

masters { 192.168.5.101; };

};
2.測試

先斷開主dns

[root@dns ~]# systemctl stop named.service

[root@kvm ~]# nslookup www.myopenai.com

Server: 192.168.5.102 -----> 是備dns在工作

Address: 192.168.5.102#53
Name: www.myopenai.com

Address: 192.168.5.11

轉發dns

[root@web01 ~]

# vim /etc/named.conf

options {
listen-

on

port

53

{ any; };
listen-

on

-v6 port

53

{ any; };
directory

"/var/named"

;
dump-

file"/var/named/data/cache_dump.db"

;
statistics-

file"/var/named/data/named_stats.txt"

;
memstatistics-

file"/var/named/data/named_mem_stats.txt"

;
secroots-

file"/var/named/data/named.secroots"

;
recursing-

file"/var/named/data/named.recursing"

;
allow-query { any; };
forwarders {

192.168

.

8.254

; };

####轉發DNS

forward first;
forward only;則先透過DNS查詢,如果DNS能解析到,直接返回結果,如果解析不到,嘗試丟給轉發DNS來解析,如果轉發DNS能解析到,則返回給客戶端,如果轉發DNS也解析不到,則返回查詢失敗
forward first; 則先透過DNS查詢,如果DNS能解析到,直接返回結果,如果解析不到,嘗試丟給轉發DNS來解析,如果轉發DNS能解析到,則返回給客戶端,如果轉發DNS也解析不到,則從根DNS開始查詢
forwarders {

114.114

.

114.114

; };
forward only;

連結:https://www.cnblogs.com/cloudwangsa/p/18563730
                                                              (版權歸原作者所有,侵刪)

文末福利

即將步入2025年,不少小夥伴在考慮來年的工作方向。

僅目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。

為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套【2024最新運維資料高階運維工程師必備技能資料包(文末一鍵領取),內容有多詳實豐富看下圖!
共有 20 個模組
1.38張最全工程師技能圖譜
2.面試大禮包
3.Linux書籍
4.go書籍
······
6.自動化運維工具
18.訊息佇列合集
 以上所有資料獲取請掃碼
識別上方二維碼
備註:2024最新運維資料
100%免費領取
(是掃碼領取,不是在公眾號後臺回覆,別看錯了哦)


相關文章