域名系統DNS服務

战斗小人發表於2024-10-12

1 名字解析介紹和DNS

1.根域: 全球根伺服器節點只有13個,10個在美國,1個荷蘭,1個瑞典,1個日本
2.一級域名:Top Level Domain: tld
三類:組織域、國家域(.cn, .ca, .hk, .tw)、反向域
com, edu, mil, gov, net, org, int,arpa
3.二級域名:wang.org
4.三級域名:study.wang.org
5.最多可達到127級域名

1.2 DNS服務工作原理

權威dns: 存實際訪問網站的ip地址

公網dns

在阿里雲上域名解析,記錄型別 A 將域名執行一個IPV4地址,最為常用
主機記錄: <u>m49</u>.ldc.cn (FQDN開頭端)    記錄值: ip地址    TTL: 快取
注意: 域名需要備案(中國特色)

公司內部dns

最常用的是bind

#bind服務裝在 10.0.0.150
[root@rocky ~]# yum -y install bind
[root@rocky ~]# systemctl enable --now named
# 53埠 和 953埠(管理埠,不關注)   udp53查詢域名用  tcp53主從同步用(同步udp53也要用)

#檢視自己當前dns
[root@rocky ~]# cat /etc/resolv.conf
#把網路卡配置dns指向自己
[root@rocky ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
DNS1=127.0.0.1
[root@rocky ~]# nmcli connection reload
[root@rocky ~]# nmcli connection up ens33
#檢視是否生效
[root@rocky ~]# cat /etc/resolv.conf 
nameserver 127.0.0.1

#安裝完dns,自己就有了解析能力
[root@rocky ~]# ping www.baidu.com
PING www.a.shifen.com (36.155.132.3) 56(84) bytes of data.
64 bytes from 36.155.132.3: icmp_seq=1 ttl=128 time=17.8 ms

#修改監聽埠,讓其他主機也能使用本地的bind服務
[root@rocky ~]# vim /etc/named.conf
options {
    listen-on port 53 { localhost; };    #當前主機所有ip,也可把這一行刪了或//註釋
    ...
    allow-query     { localhost;any; };    #允許所有人,也可以註釋//相當於any

#檢查語法
[root@rocky ~]# named-checkconf
#重啟或透過rndc讓bind重新載入(透過953埠)
[root@rocky ~]# rndc reload

#另一臺機器可以透過配置dns為10.0.0.150,使用對方的dns服務即可訪問外網

設定內網域名

#nginx機器  10.0.0.152
[root@ubuntu ~]#apt update ;apt install nginx -y
[root@ubuntu ~]#vim /var/www/html/index.html
<h1>welcome to M49 website</h1>

#bind服務機器
#域名和資料檔案對應關係(資料檔案記錄了名稱ip的解析關係)
[root@rocky ~]# vim /etc/named.rfc1912.zones
zone "wang.org" IN {    #不要加www,那是主機名,這裡寫的是域名
        type master;    #型別(主伺服器)
        #檔案字尾名叫什麼無所謂,習慣性叫zone
        file "wang.org.zone";    #路徑在主配置named.conf中directory約定了,預設/var/named
};

[root@rocky ~]# cd /var/named
#寫入資源記錄(裡面對齊無所謂),參考下面資源記錄
[root@rocky named]# vim wang.org.zone
$TTL 86400
@     IN     SOA  dns.wang.org. admin.magedu.com ( 2024101215 3H 10M 1D 1W )
         NS     dns1
dns1     A     10.0.0.150
www      A     10.0.0.152
db         A     10.0.0.153

#修改許可權保證安全
[root@rocky named]# chmod 640 wang.org.zone
#給組許可權,因為bind是以named組啟動的
[root@rocky named]# chgrp named wang.org.zone
#透過域名檢查資料庫語法是否符合要求
[root@rocky named]# named-checkzone wang.org /var/named/wang.org.zone

#讓配置生效
[root@rocky ~]# rndc reload

#其他機器dns改成10.0.0.150,即可訪問 www.wang.org(window修改VMnet8的dns)

2.6 各種資源記錄

#/var/named/named.localhost為案例
記錄型別:A, AAAA, PTR, SOA, NS, CNAME, MX
1.SOA:Start Of Authority,起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄,必須位於解析庫的第一條記錄
2.A:internet Address,作用,FQDN --> IP
3.NS:Name Server,專用於標明當前區域的DNS伺服器
4.AAAA:FQDN --> IPv6
5.CNAME : Canonical Name,別名記錄

#資源記錄定義的
name     [TTL]                 IN         rr_type     value
        快取有效期(預設單位s)  固定寫法 型別        ip地址
例:
$TTL 86400    #開頭定義變數,下面TTL就不用在寫86400
#SOA的value: 伺服器名 郵箱名 (版本(主從透過該變化判斷資料改變) 從庫拉取主庫配置時間間隔 前面拉取失敗 重試時間間隔 同步一直失敗多久就失效 如果不存在的記錄快取一段時間)
#同步有兩種方式,一種主主動推到從(主資源版本變化),一種從定時從主拉資料
@(本域名簡寫,或寫wang.org.)     IN     SOA  dns.wang.org.(伺服器名,隨便寫) admin.magedu.com(管理者郵箱,沒用) ( 2024101215 3H 10M 1D 1W )
#@(上面寫了,這裡可省略)    IN(上面寫了,這裡可省略)    NS    dns1(dns伺服器名,下面要a記錄解成ip;如果2個,寫2行)
        NS    dns1
dns1    A    10.0.0.150
#www(簡寫,或寫www.wang.org.)    86400(可省略)    IN(上面寫了,這裡可省略)    A    10.0.0.150
www     A    10.0.0.152
db        A    10.0.0.153

把bind做成主從

#再準備一臺機器做備節點  10.0.0.156
[root@rocky ~]# yum -y install bind
#修改監聽埠,讓其他主機也能使用本地的bind服務
[root@rocky ~]# vim /etc/named.conf
options {
    listen-on port 53 { localhost; };    #當前主機所有ip,也可把這一行刪了或//註釋
    ...
    allow-query     { localhost;any; };    #允許所有人,也可以註釋//相當於any

#從節點也要維護和主節點一樣的域名
[root@rocky ~]# vim /etc/named.rfc1912.zones
zone "wang.org" IN {
        type slave;    #型別(從)
        masters {10.0.0.150;};
        #會自動複製過來
        file "slaves/wang.org.slave.zone";    #一般放在slaves下,檔名隨意
};

[root@rocky ~]# systemctl enable --now named

#檢視,已經從主節點複製過來(非文字檔案,無法檢視)
[root@rocky ~]# ll /var/named/slaves/
total 4
-rw-r--r-- 1 named named 284 Oct 12 17:35 wang.org.slave.zone

#此時其他機器可以透過從dns解析www.wang.org
[root@rocky ~]# dig www.wang.org @10.0.0.156

#在新的伺服器上    10.0.0.157
#修改dns配置,dns1和dns2分別對應一個主dns,一個從dns
[root@rocky ~]# dig www.wang.org
;; ANSWER SECTION:
www.wang.org.        86400    IN    A    10.0.0.152
;; AUTHORITY SECTION:
wang.org.        86400    IN    NS    dns1.wang.org.
;; ADDITIONAL SECTION:
dns1.wang.org.        86400    IN    A    10.0.0.150
;; Query time: 0 msec
;; SERVER: 10.0.0.150#53(10.0.0.150)
;; WHEN: Sat Oct 12 17:54:40 CST 2024
;; MSG SIZE  rcvd: 120

#此時把10.0.0.150的主dns關閉,再次測試
[root@rocky ~]# dig www.wang.org
;; QUESTION SECTION:
;www.wang.org.            IN    A
;; ANSWER SECTION:
www.wang.org.        86400    IN    A    10.0.0.152
;; AUTHORITY SECTION:
wang.org.        86400    IN    NS    dns1.wang.org.
;; ADDITIONAL SECTION:
dns1.wang.org.        86400    IN    A    10.0.0.150
;; Query time: 2 msec
;; SERVER: 10.0.0.156#53(10.0.0.156)    #從dns返回
;; WHEN: Sat Oct 12 17:56:34 CST 2024
;; MSG SIZE  rcvd: 120

#主節點修改    10.0.0.150
#主從同步還需要更改資源記錄,追加從dns
[root@rocky named]# vim wang.org.zone
$TTL 86400
@     IN     SOA  dns.wang.org. admin.magedu.com ( 2024101215 3H 10M 1D 1W )
         NS     dns1
         NS  dns2
dns2     A     10.0.0.156    #這裡上下順序無所謂
dns1     A     10.0.0.150
www      A     10.0.0.152
db         A     10.0.0.153

#讓配置生效
[root@rocky ~]# rndc reload

#現在只要修改wang.org.zone並修改版本號,從庫就會跟著變更配置

清除bind服務快取

[root@rocky ~]#rndc flush

4.8 啟用DNS客戶端快取功能

在高併發的伺服器場景中,對DNS的伺服器查詢效能有較高的要求,如果在客戶端啟用DNS快取功能,可以 大幅減輕DNS伺服器的壓力,同時也能提高DNS客戶端名稱解析速度

4.8.1 CentOS 啟用DNS客戶端快取

CentOS 預設沒有啟用DNS客戶端快取,安裝nscd(Name Service Cache Daemon,名稱服務快取守護進 程)包可以支援DNS快取功能

減少DNS伺服器壓力,提高DNS查詢速度

#這個軟體只要裝上,服務一啟,就不用管了,就可以做快取了

[root@centos7 ~]#yum -y install nscd
[root@centos7 ~]#systemctl enable --now nscd

#檢視快取統計資訊
[root@centos7 ~]#nscd -g

#清除DNS客戶端快取
[root@centos7 ~]#nscd -i hosts

4.8.2 Ubuntu 啟用DNS客戶端快取

ubuntu 預設會啟用DNS客戶端快取

[root@ubuntu1804 ~]#systemctl status systemd-resolved.service 

windows自帶dns客戶端快取

5 實現反向解析區域 (瞭解)

7 實現子域

wang.org父域
兩種情況:
wang.org    sh.wang.org        #子域和父域放在同一臺dns,節約成本
bj.wang.org        #把bj.wang.org單獨放在一個dns,從父域DNS告知子域DNS
#第一種情況,子域和父域放在同一臺dns (從邏輯上來講,只是一條記錄)
#主dns
[root@rocky ~]cd /var/named
[root@rocky named]# vim wang.org.zone
$TTL 86400
@     IN     SOA  dns.wang.org. admin.magedu.com ( 2024101215 3H 10M 1D 1W )
         NS     dns1
         NS  dns2
dns2     A     10.0.0.156
dns1     A     10.0.0.150
www      A     10.0.0.152
db         A     10.0.0.153
www.sh     A     1.1.1.1    #追加

[root@rocky ~]# rndc reload

#配了對應dns的客戶端檢視
[root@rocky ~]# dig www.sh.wang.org
www.sh.wang.org.    86400    IN    A    1.1.1.1
#第二種情況,父域和子域在不同DNS

#主伺服器上要做子域的委派,委派給另外的dns來管理
[root@rocky named]# vim wang.org.zone
$TTL 86400
@     IN     SOA  dns.wang.org. admin.magedu.com ( 2024101215 3H 10M 1D 1W )
         NS     dns1
         NS  dns2
bj         NS  bjdns    #分配給bjdns的dns
dns2     A     10.0.0.156
dns1     A     10.0.0.150
bjdns     A     10.0.0.158
www      A     10.0.0.152
db         A     10.0.0.153
www.sh     A     1.1.1.1

[root@rocky ~]# rndc reload

#在bjdns的dns搭建dns  10.0.0.158
[root@rocky ~]# bash install_dns.sh

#這裡客戶端查詢採用的是遞迴查詢的方式,父域dns去查子域dns獲取ip再返回客戶端

8 實現 DNS 轉發(快取)伺服器

8.2 轉發方式

8.2.1 全域性轉發

客戶端訪問一臺dns1,如果dns1沒有,它會轉發到dns2上,dns2上沒有,會去外網查,如果有返回dns1,dns1返回客戶端
如果dns2沒找到,告訴dns1沒有,dns1有兩種策略:
first: 選擇自己去外網查
only: 選擇放棄直接返回

#準備一臺機器作為dns2,裝dns    10.0.0.38

#在dns1上
#修改主配置檔案
[root@rocky named]# vim /etc/named.conf
options {
        forwarders { 10.0.0.38;};
        forward first;    #dns2查不到,它自己查
        #forward only;    #dns2查不到就算了
        ...
        dnssec-enable no;    #這兩項安全dns驗證用的,要關(不能註釋,預設為yes)
        dnssec-validation no;
        
[root@rocky named]#named-checkonf
[root@rocky named]#rndc reload

#客戶端測試
[root@centos7 ~]#dig www.x.com
#測試當中會有快取,兩臺bind服務上可以清下快取,看效果
[root@rocky named]# rndc flush

8.2.2 特定區域轉發

僅轉發對特定的區域的請求,比全域性轉發優先順序高

zone "ZONE_NAME" IN {
 type forward;
 forward first|only;
 forwarders { ip;};
};
first:先轉發至指定DNS伺服器,如果無法解析查詢請求,則本伺服器再去根伺服器查詢
only: 先轉發至指定DNS伺服器,如果無法解析查詢請求,則本伺服器將不再去根伺服器查詢

9 實現智慧 DNS

9.2 CDN (Content Delivery Network)內容分發網路

對使用者來說,只要把網站地址改個別名(比如阿里域名解析設定別名),指向cdn供應商地址即可

9.2.3 CDN 案例

使用以下連結測試訪問上面圖片連結

站長之家
https://tool.chinaz.com/speedtest

9.3 智慧DNS相關技術 (瞭解,正常都是花錢買)

9.3.1 bind中ACL

ACL:把一個或多個地址歸併為一個集合,並透過一個統一的名稱呼叫

注意:只能先定義後使用;因此一般定義在配置檔案中,處於options的前面

acl acl_name {
    ip;
    net/prelen;
    ……
};
#範例:
acl test_net {
    172.16.0.0/24;
    10.0.0.0/24;
};
acl test_net {
   192.168.10.0/24;
};

9.3.4 view 檢視

9.3.4.1 View:檢視,將ACL和區域資料庫實現對應關係,以實現智慧DNS

1.一個bind伺服器可定義多個view,每個view中可定義一個或多個zone
2.每個view用來匹配一組客戶端
3.多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫檔案
注意:
1.一旦啟用了view,所有的zone都只能定義在view中
2.僅在允許遞迴請求的客戶端所在view中定義根區域
3.客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表
#範例
view test_view {    #view名稱
    match-clients { test_net; };
    zone "wang.org" {    #這些可以寫到include配置中
        type master;
        file "wang.org.zone.bj"; 
    };
    include "/etc/named.rfc1912.zones.test";
};
view product_view {
    match-clients { product_net; };
    #zone "wang.org" {
    #    type master;
    #    file "wang.org.zone.sh"; 
    #};
    include "/etc/named.rfc1912.zones.product";
};

相關文章