寫在前面的話node
網上關於 DNS 的文章其實一搜索一大把,可是看別人的文檔通常都會有個問題,亂,不講究,全是 ctrl c + ctrl v,我我的是看不下去的。頭皮發麻。因此決定本身來寫寫這方面的東西,固然不少概念性的東西仍是來源於網絡。至於寫這篇的目的其實算是作個總結。對於 DNS 這個東西。它可能不是你工做的必須,可是有它可以解決你不少公司內網中複雜問題。咱們後面提到的企業級,可能更多的仍是說公司內網這樣的環境,至於生產環境,人有多大膽,地有多大產吧。數據庫
DNS 概念性東西緩存
FQDN:徹底限定域名,即每一個域在全球惟一,域不是域名,google.com 是域,www.google.com 是域名。服務器
域能夠分爲根域(.)和頂級域(TLD)網絡
頂級域又能夠分爲三類:session
1. 通用頂級域(.com 商業機構,.org 非營利性組織,.net 網絡服務機構等)測試
2. 國家頂級域(.cn 中國,.uk 英國,.us 美國,.jp 日本)google
3. 反向域(基礎建設頂級域,.arpa)spa
DNS 查詢方式包含遞歸和迭代:.net
1. 遞歸是客戶端發起一次請求給 DNS 服務器,經過屢次查找返回正確解析。
2. 迭代是發出屢次請求查詢不一樣的 DNS 服務器。
解析方式包含正向解析和反向解析:正向解析指代將 FQDN 轉換成 IP,反向則相反。
通常 DNS 的服務器類型包含:主從 DNS 服務器,緩存服務器,轉發服務器。
主從好理解,就是從自動更新同步主的配置,做爲 backup 存在。
緩存的服務器做用在於使用遞歸查詢,將查詢到的結果返回客戶端,並緩存查詢的結果。
轉發服務器做用在於當發現查詢不是本機的時候則將請求轉發出去。
DNS 監聽 TCP 和 UDP 都是 53 端口。
如下是一次完整的請求大體過程:
從客戶機到服務器以前採用得是遞歸查詢,而服務器之間則是採用迭代查詢。
DNS 記錄類型:DNS 域名數據庫由資源記錄和區文件指令組成。
SOA 記錄:起始受權機構記錄,SOA 備註說明了衆多 NS(name server)記錄中誰是主名稱服務器,不參與功能,可是不能缺乏。
NS 記錄:域受權記錄,當請求到達根域的時候,經過 NS 記錄找到對應的域。
A 記錄:當經過 NS 記錄到達域之後,好比訪問 www.baidu.com,經過 NS 咱們找到了 baidu.com,此時就須要經過 A 記錄找到 www。
MX:將該域下的全部郵件服務器地址指向郵件服務器。
AAAA 記錄:A 記錄處理 IPV4,AAAA 處理 IPV6。
PTR 記錄:反向解析,將 IP 解析成域名。
CNAME:別名記錄,容許多個名字映射到另一個域名。好比咱們 ping 百度的時候能夠發現返回實際上是 www.a.shifen.com 這個域名返回。全部 www.baidu.com 實際上是個別名。
搭建單臺 DNS
咱們這裏準備了三臺虛擬機:
IP | 系統 | 說明 |
---|---|---|
192.168.100.111 | CentOS Linux release 7.5 | DNS 服務器,主機名:demo-node1 |
192.168.100.112 | CentOS Linux release 7.5 | 客戶機,主機名:demo-node2 |
192.168.100.113 | CentOS Linux release 7.5 | 客戶機,主機名:demo-node3 |
1. DNS 服務器安裝 bind 服務:
yum -y install bind-utils bind bind-devel bind-libs
2. 配置主配置文件:/etc/named.conf
options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; 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"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; recursion yes; dnssec-enable yes; dnssec-validation yes; bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key";
forwarders { 202.96.128.166;8.8.8.8; }; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
最終內容以下,紅色部分爲咱們修改的。
3. 追加域名解析入口配置:/etc/named.rfc1912.zones
zone "dylan.com" IN { # 測試用的域是 dylan.com type master; file "dylan.com.zone"; # 配置文件爲 dylan.com.zone,該文件目錄爲 /var/named/ 下 };
4. 配置單獨的解析文件:
/var/named/
cp named.localhost dylan.com.zone
chown named.named dylan.com.zone
修改配置:dylan.com.zone
$TTL 1D ;TTL 修改配置生效時間,默認爲一天 @ IN SOA @ rname.invalid. ( 0 ; serial,配置編號,每次改完配置 +1,這樣從服務器就知道更新配置 1D ; refresh,從服務器刷新時間,默認一天刷新一次 1H ; retry,若是刷新失敗,默認1小時重試一次 1W ; expire,緩存過時時間,一週 3H ) ; minimum NS @ A 127.0.0.1 AAAA ::1 www IN A 192.168.100.112
咱們新加了個 www.dylan.com 的 A 記錄。
4. 啓動服務測試:
systemctl start named
systemctl enable named
查看端口:
netstat -tlunp | grep 53
結果如圖:
咱們看到除了服務自己的 53 端口外,還監聽了 953,這是 dns 服務的一個插件,如今咱們先無論。
本機測試解析:
dig @127.0.0.1 www.dylan.com
查看結果:
另外介紹兩種檢查配置的方法:
# 檢查主配置 named-checkconf /etc/named.conf # 檢查 zone 配置 named-checkzone dylan.com /var/named/dylan.com.zone
結果以下:
咱們在客戶端修改 DNS 配置測試,修改網卡 DNS 配置重啓網卡:
主從 DNS 服務搭建
1. 主從 DNS 的搭建開始的時候實際上是和單機搭建同樣的,咱們修改主服務器的配置文件:/etc/named.rfc1912.zones
將咱們以前的配置進行修改:
zone "dylan.com" IN { # 測試用的域是 dylan.com type master; file "dylan.com.zone"; # 配置文件爲 dylan.com.zone,該文件目錄爲 /var/named/ 下 allow-update { 192.168.100.113; }; allow-transfer { 192.168.100.113; }; # 容許同步DNS的輔助服務器IP also-notify { 192.168.100.113; }; notify yes; # 啓用變動通告,當主文件變動,通知從進行比較同步 };
紅色部分是咱們新加的,並指定了從的地址,重啓服務
systemctl restart named
2. 從服務器也安裝 bind 並將 /etc/named.conf 配置拷貝過來。
接着也是配置:/etc/named.rfc1912.zones,此時就能體現主從的不一樣:
zone "dylan.com" IN { type slave; file "slaves/dylan.com.zone"; masters { 192.168.100.111; }; # 指定主服務器的 IP masterfile-format text; # 指定區域文件的格式爲text,不指定有可能會爲亂碼 };
咱們不須要再去配置 dylan.com.zone 文件,由於咱們須要去主同步。全部直接啓動從的 dns 服務。
systemctl start named
systemctl enable named
重啓成功後咱們會發現,在從服務器的 /var/named/slaves 目錄下,dylan.com.zone 已經同步成功。
3. 修改主配置測試同步狀況:
咱們修改主服務器的 dylan.com.zone,新加解析的同時,修改配置編號,讓從可以探測到變化。
此時咱們重啓主服務器,會發現從服務器就可以同步成功。
順便值得一提的是,我這裏使用 reload named 服務並無使配置生效。
小結
值得一提的是,咱們在域名解析過程當中,還會遇到某些特殊狀況:
1. @ 能夠引用當區域名字,好比直接訪問 baidu.com 就是這樣的解析
2. 同一名字經過不一樣的名字定義多條記錄,此時 DNS 會輪詢響應。
3. 同一值能夠多個名字。
4. * 泛域名解析,好比配置 *.baidu.com 指向某個 IP,那麼若是你訪問 a.baidu.com 這種沒有配置的會默認走這個配置。