名字解析的作用: TCP/IP網路中,設備之間的通信依賴IP地址來實現,但是IP地址不好記憶,所以就將每一臺設備用一個名字來進行標識,但是這個名字電腦不能解析。所以就需要藉助名字解析服務來實現將名字解析為IP地址。 主機名和功能變數名稱的聯繫 主機名: 主機名:電腦的名字,用於唯一標識一臺設備 功能變數名稱: ...
名字解析的作用:
TCP/IP網路中,設備之間的通信依賴IP地址來實現,但是IP地址不好記憶,所以就將每一臺設備用一個名字來進行標識,但是這個名字電腦不能解析。所以就需要藉助名字解析服務來實現將名字解析為IP地址。
主機名和功能變數名稱的聯繫
主機名:
主機名:電腦的名字,用於唯一標識一臺設備
功能變數名稱:
功能變數名稱:domain name,是由一串用點分隔的名字,表示互聯網上的一臺或者一組設備。
完全限定功能變數名稱:FQDN
FQDN:full qualified domain name,完全限定功能變數名稱。FQDN=主機名+功能變數名稱
一個域下麵就包含了很多主機。比如baidu.com這個功能變數名稱下麵可能就包含了www.baidu.com,mail.baidu.com等主機名。
例如:如www.baidu.com. 就是一個完全限定功能變數名稱(註意最後有一個點,預設結尾點可以省略不寫。最末尾的點所有名稱的最上級的根)。
在查看完全限定功能變數名稱時,主機名通常位於功能變數名稱之前。
主機名錶示用於將用戶傳送到某個地址或位置的網路或系統。
功能變數名稱代表用戶正在訪問的站點或項目。
比如www.baidu.com就告訴我們,baidu.com這個域中,有一臺名叫www的機器.
常見的www就是主機名,標識的對應主機,還有blog、study等都是主機名。
#www
www:World Wide Web,萬維網。由www客戶端和www服務端組成。
#www客戶端指的是設備上的瀏覽器。
#www服務端指的是伺服器(存放資源的主機)。
#www經常被簡稱作web,所以www客戶端、www服務端又叫web客戶端、web服務端
#www的作用就是:web客戶端訪問web服務端
#所以www表示訪問指定web伺服器上面的資源,故www表示的是一臺主機。
範例
#www.baidu.com
. #根域
|
|
gov edu com net org cn #頂級域:最初只有七個
|
|
360 baidu google sougou #二級域
|
|
www #主機
功能變數名稱的分類
-
根域
-
頂級域
-
二級域
-
....
-
最多可達到127級功能變數名稱
#常見的頂級功能變數名稱
com(商業公司)、
net(互聯網組織)、
edu(教育)、
org(非營利性組織)、
int(internet)、
mil(軍事)、
gov(政府)、
cn(國家地區功能變數名稱,cn表示中國)
DNS:Domain Name Server
利用名稱分散式的特性,在每一級域都搭建對應的DNS伺服器,每個DNS伺服器只負責一部分名稱和ip的解析。
DNS伺服器存放的是它的下級域DNS的名稱和IP。如果一個DNS的下級是主機,就存放主機的名稱和ip
DNS查詢的類型
-
遞歸查詢
-
迭代查詢
遞歸查詢:一般客戶機和本地DNS伺服器之間屬於遞歸查詢,即當客戶機向DNS伺服器發出請求後, 若DNS伺服器本身不能解析,則會向另外的DNS伺服器發出查詢請求,得到最終的肯定或否定的結
果後轉交給客戶機。此查詢的源和目標保持不變,為了查詢結果只需要發起一次查詢
迭代查詢:一般情況下(有例外)本地的DNS伺服器向其它DNS伺服器的查詢屬於迭代查詢,如:若對
方不能返回權威的結果,則它會向下一個DNS伺服器(參考前一個DNS伺服器返回的結果)再次發起
進行查詢,直到返回查詢的結果為止。此查詢的源不變,但查詢的目標不斷變化,為查詢結果一般需要發起多次查詢.
DNS名稱請求的流程
1.客戶端需要解析一個名稱會先查詢hosts文件,如無對應內容就下一步
2.查詢本地的緩存(linux預設沒有設置緩存,windows預設設置了緩存)
3.向指定的DNS伺服器發起請求,如果這個DNS伺服器沒找到就像根查找,然後進行迭代查詢,找到結果以後由這個DNS返回給客戶端
#權威DNS:存放要訪問的功能變數名稱和ip的對應關係的伺服器就叫做權威DNS伺服器
緩衝和緩存
緩存:Cache,為了提升性能開闢一塊空間,緩存是將反覆使用的數據存儲起來,在有效期之內供系統去調用。
緩衝:Buffer,緩衝的作用是協調上下層應用之間的性能差異。
#比如A-->B,A的流量大速度快,但是B的流量小速度慢,A-->B的時候B接收不了這麼多的數據,所以中間加一個緩衝區,A把數據放在緩衝區,B再到緩衝區去拿數據。解決了兩這性能不一樣的問題。
範例:
#瀏覽器輸入一個功能變數名稱回車以後背後所作的工作:
名稱解析為ip地址:DNS工作過程
連接到對應的主機:TCP三次握手
數據傳輸:HTTP工作過程
linux DNS服務的實現
提供DNS伺服器軟體:bind,powerdns,dnsmasq,unbound,coredns(主要用在k8s環境中)
bind實現DNS服務
1.安裝bind軟體
yum install bind bind-utils
bind-utils是bind的一個管理工具(客戶端)。
BIND的相關程式包:yum list all bind*
BIND包相關文件: rpm -ql bind
bind的配置文件:/etc/named.conf
可以通過rpm -ql bind來查看他的對應文件。
配置文件的格式
由三部分組成:
-
選項:配置相關功能
-
日誌:(基本不用改)
-
區域:本機能夠為哪些zone進行解析(域下麵就有很多區域)
/var目錄:var:variable(變數、可變的)。目錄存放的就是可變的數據
/etc/services文件是記錄網路服務名和它們對應使用的埠號及協議的對應關係(相當於一個手冊,記錄大部分服務使用的預設埠,不用更改)
/etc/services文件:四個欄位組成:服務名稱”、“使用埠”、“協議名稱”以及“別名
查看dns是否生效: /etc/reslve文件
/etc/resolv.conf是DNS客戶機的配置文件,用於設置DNS伺服器的IP地址及DNS功能變數名稱
dns服務基礎配置實現互聯網訪問
只需要正確安裝bind這個軟體包,修改配置文件的一下內容即可。
options {
listen-on port 53 { localhost; }; #需要監聽的指定地址埠,可以直接註釋掉表示所有iplocalhost表示監聽本地所有地址的53埠
......
allow-query { any; }; #允許誰查詢 any:代表所有的ip,所有的ip都可以查(包括遠程的ip) 註釋掉這一行也表示所有ip都能訪問
}
#dns配置文件中的:localhost:表示本機配置的所有ip
#hosts中的localhost表示的是127.0.0.1這個地址
#dns務基礎配置實現互聯網訪問:註釋掉allow-query和listen-on 表示預設允許所有
DNS服務的管理工具 rndc
rndc 監聽埠: 953/tcp
#命令格式:
rndc COMMAND
COMMAND:
status: 查看狀態
reload: 重載主配置文件和區域解析庫文件
reload zonename: 重載區域解析庫文件
retransfer zonename: 手動啟動區域傳送,而不管序列號是否增加
notify zonename: 重新對區域傳送發通知
reconfig: 重載主配置文件
querylog: 開啟或關閉查詢日誌文件/var/log/message
trace: 遞增debug一個級別
trace LEVEL: 指定使用的級別
notrace:將調試級別設置為 0
flush:清空DNS伺服器的所有緩存記錄
DNS解析服務的測試和診斷工具
由bind-utils這個客戶端提供。於測試dns系統,不會查詢hosts文件進行解析
-
dig
-
host
-
nslookup
例如:查詢dns能否正常解析:www.baidu.com
dig www.baidu.com
host www.baidu.com
nslookup www.baidu.com
#查詢指定的DNs伺服器能否正常解析:www.baidu.com
dig www.baidu.com @10.10.0.11 #伺服器的ip地址
搭建私有DNS實現正向解析dns服務(正向主伺服器)
需要實現正向解析:FQDN-->IP ,就需要配置對應的區域。
域是一個概念,比如baidu就是一個域,在這個域之下還有區域
bind區域的配置方法
-
在主配置文件中定義區域
-
定義區域解析庫文件(區域資料庫),由一條條資源記錄(RR)組成。
搭建DNS正向主伺服器,實現web伺服器基於FQDN的訪問
環境配置:
關閉SElinux
關閉防火牆
時間同步
設備:
需要三台主機
DNS服務端:10.0.0.8
web伺服器:10.0.0.7
DNS客戶端:10.0.0.6
修改住配置文件,定義需要解析得區域:
zone "redhat.org" IN { #redhat.org:表示需要管理的域的功能變數名稱
type master; #DNS的類型 master slave frawalld
file "magedu.org.zone"; #指定定義區域資料庫的文件
#區域資料庫配置
$TTL 1D #表示有效時間 1D:表示1D內有效
@ IN SOA @ admin.redhat.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.26.129 #需要解析的區域
www A 192.168.26.130 #需要解析的區域
資源記錄的格式及類型
資源記錄的格式:name [TTL] IN rr_type value
資源記錄的類型:
-
SOA:說明當前這個區域解析庫為哪一個區域所用,由誰負責
-
A:作用是把FQDN解析成為IPV4的IP地址
-
NS:name server 專用於標識當前區域的DNS伺服器
-
MX:Mail eXchanger,郵件交換器
-
CNAME: Canonical Name,別名記錄
-
PTR:作用是把IP解析成為FQDN,反向解析
#SOA name [ttl] in rr_type value
(1)name:表示的是當前這個區域解析庫的功能變數名稱。用@可表示當前區域的名字
(2)TTL:表示緩存過期的時間
(3)IN:代表internet,沒有實際意義,可以當做固定格式
(4)SOA:表示資源記錄的類型為SOA
(5)value: 當前這個域的DNS伺服器是誰,可以直接寫區功能變數名稱字,會自動把功能變數名稱補齊。
#使用value指定當前域的DNS伺服器以後,還要使用A這種類型來指定這個DNS伺服器的IP地址。
#SOA記錄與其它記錄不同的是就是value部分,SOA的value部分由很多的欄位組成
value:由以下三部分組成:
1.負責當前這個域的主(master)DNS伺服器是誰。 可以是FQDN,也可以是當前 域 的名字(用@可表示當前 域的名字),這個名字隨便起,但是需要配置A來指定它的ip地址。
2.當前區域管理員的郵箱地址,但是地址不能有@符號,一般用.來代替,例如15069028007.163.com
3.(主從伺服器協調屬性的定義以及否定的答案的統一的TTL)
#例如:
10235.com 86400 IN SOA ns1.abc.com. root.ns1.abc.com. (
2007061402 ; serial
3600 ; refresh (1 hour)
900 ; retry (15 minutes)
1209600 ; expire (2 weeks)
3600 ; minimum (1 hour)
)
10235.com:代表當前區域的功能變數名稱,可以用@代替(因為在配置文件中定義區域的時候就定義了功能變數名稱)
86400:代表86400秒後緩存過期
ns1.abc.com.:指定當前域的主DNS SERVER #主DNS:master,這個名字可以隨便起,下麵還需要使用A這種類型的資源記錄來指定主DNS的ip地址 d
root.ns1.abc.com.:管理員郵箱(@使用.代替),等同於[email protected].
Serial :數值Serial代表這個Zone的序列號。供Slave DNS判斷是否從Master DNS獲取新數據。每次Zone文件更新,都需要修改Serial數值
refresh:數值Refresh設置Slave DNS多長時間與Master Server進行Serial核對。目前Bind的notify參數可設置每次Master DNS更新都會主動通知Slave DNS更新
retry:數值Retry設置當Slave DNS試圖獲取Master DNS Serial時,如果Master DNS未響應,多長時間重新進行檢查
expire:數值Expire將決定Slave DNS在沒有Master DNS的情況下權威地提供功能變數名稱解析服務的時間長短
minimum:否定答案的TTL,當伺服器沒有解析到功能變數名稱時,設置客戶端緩存時間
配置文件檢查
-
named-checkconf
-
named-checkzone
#檢查配置文件
named-checkconf #檢查的是named.conf這個配置文件
named-checkzone xxx.org /var/named/redhat.org.zone # 功能變數名稱 功能變數名稱對應的區域資料庫文件
資源記錄的類型詳解
NS記錄定義規則
-
name: 當前功能變數名稱(通過定義區域規則的時候指定的功能變數名稱)。用來標識當前的功能變數名稱中那些是DNS
-
value: 當前區域的某DNS伺服器的名字,例如: ns.redhat.org.
#value的名字是隨便起的。只需要添加A這種資源記錄的時候,對應上指定的ip地址就可以了。
1. 相鄰的兩個資源記錄的name相同時,後續的可省略。#會自動繼承上一條記錄的一些信息
2. 對NS記錄而言,任何一個ns記錄後面的伺服器名字,都應該在後續有一個A記錄
#表示當前區域中誰是DNS伺服器,因為可能存在多個dns伺服器,soa只標識了主dns伺服器
3. 一個域可以有多個NS記錄(一個功能變數名稱可以有多個dns伺服器)
範例:
redhat.org. IN NS ns1.redhat.org. #前面的FQDN可以只寫主機名,功能變數名稱會自動補全
NS ns2.redhat.org. #完整:redhat.org. IN NS ns2.redhat.org.會自動繼承上面的內容
A記錄定義規則
-
name: 某主機的FQDN,例如:www.redhat.org.
-
value: 主機名對應主機的IP地址
www.redhat.org. IN A 1.1.1.1
www.redhat.org. IN A 2.2.2.2
mx1.redhat.org. IN A 3.3.3.3
mx2.redhat.org. IN A 4.4.4.4
$GENERATE 1-254 HOST$ IN A 1.2.3.$
*.redhat.org. IN A 5.5.5.5 #表示輸入任何的子功能變數名稱都可以解析。例如 wwwwwwwww.redhat.com
redhat.org. IN A 6.6.6.6 #直接輸入功能變數名稱便可解析
#註意:如果有和DNS的IP相同的多個同名的A記錄,優先返回DNS的本機IP
#避免用戶寫錯名稱時給錯誤答案,可通過泛功能變數名稱解析進行解析至某特定地址
CNAME別名記錄
-
name: 別名的FQDN
-
value: 真正名字的FQDN
例如:www.magedu.org. IN CNAME websrv.magedu.org.
PTR記錄
name: IP,有特定格式,把IP地址反過來寫,1.2.3.4,要寫作4.3.2.1;
而有特定尾碼:in-addr.arpa.,所以完整寫法為:4.3.2.1.in-addr.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.org.
#如1.2.3為網路地址,可簡寫成:
4 IN PTR www.magedu.org.
#註意:網路地址及尾碼可省略;主機地址依然需要反著寫
反向解析的實現
反向區域:即將IP反向解析為FQDN
區功能變數名稱稱:網路地址反寫.in-addr.arpa.
www.baidu.com. 從上到下對應的為:.--com--baidu--www
172.16.100.10 --> 10.100.16.172.in-addr.arpa.
#功能變數名稱:172.16.100. --> 100.16.172.in-addr.arpa.
定義區域
zone "ZONE_NAME" IN {
type {master|slave|forward};
file "網路地址.zone"
};
zone "26.168.192.in-addr.arpa." IN {
type master;
file "192.168.26.zone";
};
定義解析庫:
[root@CentOS8 named]# cat 192.168.26.zone
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master IN A 10.0.0.10
10 PTR www.redhad.com
20 PTR www.tom.com
30 PTR www.bob.com
啟用DNS客戶端緩存功能
客戶端啟用DNS緩存功能,可以大幅減輕DNS伺服器的壓力,同時也能提高DNS客戶端名稱解析速度。
nscd
CentOS 預設沒有啟用DNS客戶端緩存,安裝nscd(Name Service Cache Daemon,名稱服務緩存守護進
程)包可以支持DNS緩存功能
ubuntu 預設會啟用DNS客戶端緩存
[root@ubuntu1804 ~]#systemctl status systemd-resolved.service
#清空緩存
[root@ubuntu1804 ~]#systemd-resolve --flush-caches
[root@centos7 ~]#yum -y install nscd
[root@centos7 ~]#systemctl enable --now nscd
#查看緩存統計信息
[root@centos7 ~]#nscd -g
#清除DNS客戶端緩存
[root@centos7 ~]#nscd -i hosts
從伺服器的實現
DNS的類型:
-
主伺服器
-
從伺服器
-
轉發伺服器
從伺服器:
(1)時間和主伺服器要同步(ntp)
(2)主伺服器的區域解析庫文件有一條NS資源記錄指向從伺服器
(3)從伺服器只需要定義區域,而無須提供解析庫文件(放置於/var/named/slaves/目錄)
(4)主伺服器需要允許從伺服器作區域傳送
從伺服器區域的定義
zone "ZONE_NAME" IN {
type slave; #定義伺服器類型
masters { MASTER_IP; }; #定義使用的主伺服器
file "slaves/ZONE_NAME.zone"; #定義區域文件
};
範例:搭建從伺服器實現冗餘功能
主伺服器配置:
配置文件:
//#只允許從伺服器進行區域傳輸,如果不寫預設所有的伺服器都能進行傳輸
allow-transfer { 10.0.0.12;};
區域資料庫:
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
NS slave
master IN A 10.0.0.10
slave IN A 10.0.0.12 #指定slave伺服器的ip地址
www IN A 10.0.0.11
blog IN A 10.0.0.110
mail IN A 10.0.0.111
從伺服器配置:
//#不允許其它主機進行區域傳輸,不寫就預設所有的主機都可以
allow-transfer { none;};
#指定區域
zone "redhad.com" IN { #功能變數名稱和主伺服器的一樣
type slave; #DNS的類型
masters {10.0.0.10;}; #指定主伺服器
file "slaves/redhad.com"; #指定同步過來的資源記錄存放位置
};
驗證:
查看slaves/redhad.com中是否存在數據(亂碼)
停止掉主伺服器,指定從伺服器為測試及其的DNS,測試能否正常訪問www.redhad.com等。
DNS實現子域
子域委派授權
子域委派授權:將子域委派給其它主機管理,實現分散式DNS資料庫。
父域DNS配置:
#父域中指定子域的DNS伺服器和IP地址。然後再子域的DNS伺服器上面定義對應的解析規則就行了。
這樣通過父域的DNS地址也能找到子域的對應解析。
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS master
shanghai IN NS shanghais #指定子域的區域使用的DNS伺服器名字
master IN A 10.0.0.10
shanghais IN A 10.0.0.11 #子域DNS對應的IP地址
www IN A 10.0.0.11
子域DNS配置:
zone "shanghai.heyongshen.com" IN {
type master;
file "shanghai.heyongshen.zone";
};
#在子域中定義相應的解析規則
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS master
master IN A 10.0.0.11
www IN A 10.0.0.10
測試:
[root@CentOS8 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none
NAME=ens160
DEVICE=ens160
ONBOOT=yes
IPADDR=10.0.0.12
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.10 #指定DNS伺服器
[root@CentOS8 ~]# ping www.heyongshen.com
[root@CentOS8 ~]# ping www.shanghai.heyongshen.com
DNS轉發(forward)(緩存)伺服器
將用戶的DNS請求,轉發至指定的DNS服務,而非預設的根DNS伺服器,並將指定
伺服器查詢的返回結果進行緩存,提高效率
#建議關閉加密驗證
dnssec-enable no;
dnssec-validation no;
全局轉發:對非本機所負責解析區域的請求,全轉發給指定的伺服器
Options {
forward first|only;
forwarders { ip;};
};
特定區域轉發:僅轉發對特定的區域的請求,比全局轉發優先順序高
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
兩種轉發類型:
-
first:先轉發至指定DNS伺服器,如果無法解析查詢請求,則本伺服器再去根伺服器查詢
-
only: 先轉發至指定DNS伺服器,如果無法解析查詢請求,則本伺服器將不再去根伺服器查詢
範例:實現DNs伺服器的轉發功能
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; }; 允許查詢的主機
緩存伺服器主要配置:
#關閉加密驗證:
dnssec-enable no;
dnssec-validation no;
#配置轉發規則
forward first; #轉發規則
forwarders {10.0.0.10; }; #主伺服器
主伺服器主要配置:
#關閉加密驗證:
dnssec-enable no;
dnssec-validation no;
#定義區域
zone "heyongshen.com" IN {
type master;
file "heyongshen.zone";
};
#配置規則
$TTL 1D
@ IN SOA master rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.10
www IN A 10.0.0.2
智能DNS的實現
GSLB:
-
GSLB:Global Server Load Balance 全局負載均衡
-
GSLB是用戶發起請求後判斷由哪個地點的伺服器來提供服務
-
GSLB主要的目的:是在整個網路範圍內將用戶的請求定向到最近的節點(或者區域)
CND服務
CDN: (Content Delivery Network)內容分髮網絡
工作原理
1. 用戶向瀏覽器輸入www.a.com這個功能變數名稱,瀏覽器第一次發現本地沒有dns緩存,則向網站的DNS伺服器請求
2. 網站的DNS功能變數名稱解析器設置了CNAME,指向了www.a.tbcdn.com,請求指向了CDN網路中的智能DNS負載均衡系統
3. 智能DNS負載均衡系統解析功能變數名稱,把對用戶響應速度最快的IP節點返回給用戶;
4. 用戶向該IP節點(CDN伺服器)發出請求
5. 由於是第一次訪問,CDN伺服器會通過Cache內部專用DNS解析得到此功能變數名稱的原web站點IP,向原站點伺服器發起請求,併在CDN伺服器上緩存內容
6. 請求結果發給用戶
CDN服務商
-
服務商:阿裡,騰訊,藍汛,網宿,帝聯等
-
智能DNS: dnspod dns.la