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級域名
權威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)
#/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
在高併發的伺服器場景中,對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
ubuntu 預設會啟用DNS客戶端快取
[root@ubuntu1804 ~]#systemctl status systemd-resolved.service
windows自帶dns客戶端快取
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.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
僅轉發對特定的區域的請求,比全域性轉發優先順序高
zone "ZONE_NAME" IN { type forward; forward first|only; forwarders { ip;}; };
first:先轉發至指定DNS伺服器,如果無法解析查詢請求,則本伺服器再去根伺服器查詢
only: 先轉發至指定DNS伺服器,如果無法解析查詢請求,則本伺服器將不再去根伺服器查詢
9.2 CDN (Content Delivery Network)內容分發網路
對使用者來說,只要把網站地址改個別名(比如阿里域名解析設定別名),指向cdn供應商地址即可
9.2.3 CDN 案例
使用以下連結測試訪問上面圖片連結
站長之家
https://tool.chinaz.com/speedtest
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.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"; };