域名解析系統 —— DNS服務
阿新 • • 發佈:2019-08-18
前言:
最近整理一些以前的學習筆記。
過去都是儲存在本地,此次傳到網路留待備用。
DNS
- 域名系統(Domain Name System)
- 作為將域名和IP地址相互對映的一個分散式資料庫,能夠使人更方便地訪問網際網路
- 目前,每一級域名長度的限制是63個字元,域名總長度則不能超過253個字元
- 協議: TCP/UDP
- 預設埠: 53
- DNS伺服器的功能:
- 正向解析:根據註冊的域名查詢對應的ip地址
- 反向解析:根據ip地址查詢對應的註冊域名,不常用
-
FQDN(Full Qualified Domain Name),完整合格域名
- 網站名 = 伺服器名.域名字尾
- www.pku.edu.cn = 站點名.***.二級域.一級域
-
所有完整的域名都會以 .(點) 結尾:
根域 . ┌─────┬─────┼─────┬─────┬─────┬──────┬─ .com .cn .us .tw .kr .hk ....... #一級DNS伺服器 ┌─────┴────┬─────────┬─────────┬─ .com.cn .net.cn .org.cn .edu.cn #二級DNS伺服器 ├─────────────────┬───────────────┬─ .lala.com.cn .haha.com.cn .xixi.com.cn #三級DNS伺服器 ├─────────────────────┬─ web1.lala.com.cn tts.lala.com.cn #完整主機名
-
常見的頂級域名/一級域名:
國家/地區域 .cn .us .kr .hk .tw ... 組織域 .com .net .edu .org .gov ...
DNS解析庫
-
資源記錄:rr(resource record),有型別的概念;用於此記錄解析的屬性。
| 資源記錄 | 名稱 | 意義 | | ------------ | ------------ | ------------ | A | Address地址 IPv4 | 此記錄列出特定主機名的 IP 地址 AAAA | Address地址 IPv6 | NS | Name Server域名伺服器 | 此記錄指定負責給定區域的名稱伺服器 SOA | Start of Authority授權狀態 | MX | Mail Exchanger郵件交換 | 此記錄列出了負責接收發到域中的電子郵件的主機 CNAME | Canonical Name規範名 | 此記錄指定標準主機名的別名 PTR | Pointer指標 |
DNS查詢過程
-
DNS查詢機制:
- 遞迴查詢(Recursive Query)
- 首選DNS伺服器,跑到相應其他DNS伺服器上,將詢問的最終結果帶回來的過程
- 客戶端與首選DNS伺服器互動
- 預設開啟遞迴查詢( recursion yes|no )
- 迭代查詢(Iterative Query)
- 首選DNS伺服器與其他DNS伺服器互動
- 遞迴查詢(Recursive Query)
-
DNS的查詢順序:
1、本地hosts檔案 2、本地DNS快取 3、本地DNS伺服器 4、發起迭代查詢
BIND域名服務
- Berkeley Internet Name Domain , 伯克利因特網域名服務
- 是目前世界上使用最為廣泛的DNS伺服器軟體,支援各種unix平臺和windows平臺
- 官網: https://www.isc.org/
- 軟體:
- bind , 域名服務包
- bind-chroot , 提供虛擬根支援,依賴bind
- 系統服務: named
- 協議埠: TCP/UDP 53
- 執行時的虛擬根路徑: /var/named/chroot
- 主配置檔案: /etc/named.conf //設定負責本機解析的域名
- 地址庫檔案: /var/named //主機名與ip地址的對應關係
一、搭建基本的DNS伺服器
svr7.test.cn ---> 192.168.4.7
pc207.test.cn ---> 192.168.4.207
www.test.cn ---> 192.168.4.100
服務端(192.168.4.7)
1.安裝軟體包
]# yum -y install bind bind-chroot
2.修改配置檔案
]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.4.7; }; #監聽伺服器的地址和埠
directory "/var/named"; #預設,指定地址庫檔案存放路徑
allow-query { any; }; #允許任何客戶機查詢
};
zone "test.cn" IN { #指定本機負責解析的域名
type master; #指定本機為權威的主DNS伺服器
file "test.cn.zone"; #指定地址庫檔案為test.cn.zone
};
]# named-checkconf /etc/named.conf #檢查配置檔案語法
3.建立地址區域檔案
]# cd /var/named/ #準備模板檔案
]# cp -p named.localhost test.cn.zone #許可權屬性不變拷貝模板
]# ls -l test.cn.zone
-rw-r----- 1 root named 152 6月 21 2007 test.cn.zone
]# vim test.cn.zone #編輯區域檔案
$TTL 1D ;TTL=Time To Live=生存時間
@ IN SOA @ rname.invalid. ( ;SOA=Start Of Authority=授權資訊開始,@區域名
0 ; serial,序列號 ;分號; 開始的部分表示註釋
1D ; refresh,重新整理時間
1H ; retry,重試時間間隔
1W ; expire,過期時間
3H ) ; minimum,無法解析時否定答案的TTL值
test.cn. NS svr7 ;NS=NameServer,宣告test.cn.域名的DNS伺服器為svr7.test.cn.
svr7 A 192.168.4.7 ;指定svr7.test.cn.的ip地址為192.168.4.7
www A 1.1.1.1
ftp A 2.2.2.2
]# named-checkzone test.cn test.cn.zone #檢查配置檔案,命令 區域名 配置檔案
zone test.cn/IN: loaded serial 0
OK #檢查結果ok
4.啟服務
]# systemctl restart named
]# systemctl enable named
客戶端
1.設定DNS伺服器
]# echo 'nameserver 192.168.4.7 > /etc/resolv.conf'
2.檢測域名解析
- host
]# host svr7.test.cn svr7.test.cn has address 192.168.4.7
- nslookup
]# nslookup www.test.cn Server: 192.168.4.7 Address: 192.168.4.7#53 Name: www.test.cn Address: 1.1.1.1
二、多區域DNS服務
1.修改配置檔案(接上例192.168.4.7)
]# vim /etc/named.conf #追加新的區域
zone "qq.com" IN {
type master;
file "qq.com.zone";
};
2.編輯區域檔案
]# cp -p /var/named/test.cn.zone /var/named/qq.com.zone
]# vim qq.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
qq.com. NS svr7
svr7 A 192.168.4.7
www A 3.3.3.3
ftp A 4.4.4.4
3.重啟服務
]# systemctl restart named
4.客戶端測試
]# nslookup www.qq.com
Server: 192.168.4.7
Address: 192.168.4.7#53
Name: www.qq.com
Address: 3.3.3.3
三、特殊的解析記錄
接上例
1.基於DNS域名的負載均衡:
#服務端
]# vim qq.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
qq.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.11 ;配置www的負載均衡
www A 192.168.4.12
www A 192.168.4.13
ftp A 4.4.4.4
]# systemctl restart named
#客戶端測試
]# nslookup www.qq.com
Server: 192.168.4.7
Address: 192.168.4.7#53
Name: www.qq.com
Address: 192.168.4.12
Name: www.qq.com
Address: 192.168.4.13
Name: www.qq.com
Address: 192.168.4.11
2.泛域名解析:
伺服器:
]# cd /var/named
]# vim qq.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
qq.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.11
www A 192.168.4.12
www A 192.168.4.13
ftp A 4.4.4.4
* A 1.2.3.4 ;泛域名解析
]# systemctl restart named
客戶端:
]# host ftp.qq.com
ftp.qq.com has address 4.4.4.4
]# host fan.qq.com
fan.qq.com has address 1.2.3.4
3.有規律的泛域名解析:
web1.qq.com------》192.168.10.1
web2.qq.com------》192.168.10.2
web3.qq.com------》192.168.10.3
web4.qq.com------》192.168.10.4
......
web50.qq.com------》192.168.10.50
函式: $GENERATE 生成連續範圍的數字
伺服器:
]# cd /var/named/
]# vim qq.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
qq.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.11
www A 192.168.4.12
www A 192.168.4.13
ftp A 4.4.4.4
* A 1.2.3.4 ;泛域名解析
$GENERATE 1-50 web$ A 192.168.10.$ ;使用$GENERATE函式生成有規律的泛域名解析
]# systemctl restart named
#客戶端
]# host web.qq.com
web.qq.com has address 1.2.3.4
]# host web1.qq.com
web1.qq.com has address 192.168.10.1
]# host web11.qq.com
web11.qq.com has address 192.168.10.11
]# host web50.qq.com
web50.qq.com has address 192.168.10.50
四、DNS的子域授權
接上例
父域 www.test.cn 總公司 svr7 伺服器 192.168.4.7
子域 www.bj.test.cn 北京分公司 pc207 伺服器 192.168.4.207
-
父域主機配置子域授權(192.168.4.7)
]# cd /var/named ]# vim test.cn.zone test.cn. NS svr7 bj.test.cn. NS pc207.bj ;指定子域的DNS伺服器 svr7 A 192.168.4.7 pc207.bj A 192.168.4.207 www A 1.1.1.1 ftp A 2.2.2.2 ]# systemctl restart named
-
子域主機配置(192.168.4.207)
]# yum -y install bind bind-chroot #安裝軟體 ]# vim /etc/named.conf #修改配置檔案 options { directory "/var/named"; }; zone "bj.test.cn" IN { ;解析子域域名 type master; file "bj.test.cn.zone"; }; ]# cd /var/named ]# cp -p named.localhost bj.test.cn.zone ]# vim bj.test.cn.zone #編輯區域檔案 $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum bj.test.cn. NS pc207 ;設定域伺服器 pc207 A 192.168.4.207 www A 11.12.13.14 ]# systemctl restart named #重啟服務 ]# systemctl enable named
-
測試
]# nslookup www.bj.test.cn 192.168.4.207 Server: 192.168.4.207 Address: 192.168.4.207#53 Name: www.bj.test.cn Address: 11.12.13.14
五、快取DNS
-
作用:加速解析過程,讓客戶端最快得到解析結果。
-
軟體包:bind bind-chroot
-
方式
-
全域性轉發:
- 將請求轉發給指定的公共DNS(其他快取DNS),請求遞迴服務。
-
根域迭代:
- 依次向根、一級、二級...域的DNS伺服器迭代。
-
-
例項:
- 思路:192.168.4.254作為快取DNS伺服器,真正的DNS是172.40.1.10
1.安裝軟體包
]# yum -y install bind bind-chroot
2.編輯配置檔案
]# cat /etc/resolv.comf nameserver 172.40.1.10 ]# vim /etc/named.conf options { directory "/var/named"; forwarders { 172.40.1.10; }; #當本地快取中沒有對應的解析時指定去172.40.1.10解析 }; ]# systemctl restart named
3.客戶端.虛擬機器使用解析
]# nslookup www.360.com 192.168.4.254
六、Split分離解析
- 讓客戶端訪問網路中最近的伺服器。
- 當不同類別的客戶機請求解析同一個域名時,得到不同的解析結果(Ip)。
- 當收到客戶機的DNS查詢請求的時候,能夠區分客戶機的來源地址,為不同類別的客戶機提供不同的解析結果(IP地址)。
BIND的view檢視
-
根據源地址集合將客戶機分類,不同客戶機獲得不同結果(待遇有差別)。
- 注意:客戶機分類得當(所有的客戶端都要找到對應的分類)
- 注意:由上到下匹配,匹配即停止
- 注意:所有的zone都必須在view欄位中
-
格式:
view "檢視名" { match-clients { IP; } //匹配客戶端地址 zone "解析的域名" { ... 地址庫1; } };
view "nsd" { match-clients { 192.168.4.207; } #匹配客戶端的地址 zone "test.cn" { ...... 地址庫1; }; }; view "abc" { match-clients { any; } zone "test.cn" { ...... 地址庫2; }; };
-
例項,環境及需求:
- 權威DNS:svr7.test.cn 192.168.4.7
- 負責區域:test.cn
- A記錄分離解析 —— 以 www.test.cn 為例
- 客戶機的解析結果:
- 192.168.4.207 -----> 192.168.4.100
- 其他地址 ----------> 1.2.3.4
操作步驟 虛擬機器A 1.修改配置檔案/etc/named.conf view "nsa" { match-client { 192.168.4.207; }; zone "test.cn" { type master; file "test.cn.nsd"; }; }; view "abc" { match-client { any; }; zone "test.cn" { type master; file "test.cn.abc"; }; }; 2.建立地址庫檔案 ]# vim /var/named/test.cn.nsd test.cn. NS svr7 svr7 A 192.168.4.7 www A 192.168.4.100 ]# vim /var/named/test.cn.abc test.cn. NS svr7 svr7 A 192.168.4.7 www A 1.2.3.4 3.重啟named服務 ]# systemctl restart named 4.在虛擬機器A、B分別測試解析
七、DNS快取使用變數
]# vim /etc/named.conf
options {
directory "/var/named";
};
acl 變數名 { 地址1; 地址2; 地址3; 地址4;...};
view "nsd" {
match-clients { 變數名; };
zone "test.cn" {
type master;
file "test.cn.nsd";
};
};
view "abc" {
match-clients { any; };
zone "test.cn" {
type master;
file "test.cn.abc"