關鍵詞: 正向解析 反向解析 主從複製 自域受權 視圖
1、DNS基本原理web
1.1 什麼是DNS?BIND又是什麼?
DNS:Domain Name Service,它是一個基於應用層的協議,是C/S構架的,監聽在 53/udp和 53/tcp。
BIND: Berkerley Internet Name Domain, 它是DNS域名解析的一種實現方式。數據庫
1.2 DNS發展
早期的域名解析方式:
可是隨着互聯網的普及,全世界的電腦太多了,要解析就很不容易,因此如今的互聯網是分層樹狀結構的去解析,結構圖以下
vim
2、DNS基本概念centos
2.1 DNS服務器的類型有哪些? 有主DNS服務器、輔助DNS服務器、緩存DNS服務器、轉發器 2.2 解析類型有哪些? 有正向區域解析和反向區域解析,正向解析爲name --> IP, 反向解析爲IP--> Name 2.3 主DNS服務器和從DNS服務器有什麼區別? 主DNS服務器:維護所負責解析的域內解析庫服務器;解析庫由管理員維護 從DNS服務器:從主DNS服務器或其餘的從DNS服務器那裏複製(區域傳遞)一份解析庫 2.4 區域傳送有哪些? 全量傳送:傳送整個解析庫 增量傳送:傳送解析庫變化的那部份內容 2.5 DNS查詢類型有哪些? 遞歸查詢: 一次請求就獲得正確答案 迭代查詢: 一次請求獲得一個答案,而後根據答案再去發送請求,通過屢次請求後獲得正確答案的過程 2.5 一次完整的查詢請求通過的流程 client --> hosts文件 --> dns service (local cache --> dns server)(recursion遞歸) --> server cache --> iteration(迭代) 2.6 bind是什麼? bind是dns協議的一種實現 2.7 bind如何進行解析? bind解析是經過區域解析庫來實現 2.8 區域解析庫是什麼? 區域解析庫表現形式是由衆多RR(Resource Record )組成,RR在配置文件中進行定義 2.9 資源記錄 2.9.1 資源記錄類型有哪些? 記錄類型有: A、AAAA、PTR、SOA、NS、CNAME、MX 2.9.2 資源記錄各種型含義? SOA: Start Of Authority, 起始受權記錄:一個區域解析庫有且僅能有一個SOA記錄,並且必須爲解析庫的第一條記錄。 A: internet Address, 做用就是提供正向解析: FQDN --> IP AAAA: ipv6地址正向解析: FQDN --> IPv6 PTR: PoinTeR, 反向解析:Ip --> FQDN NS: Name Server, 標明當前區域的DNS服務器 CNAME: Canonical Name, 別名記錄 MX:Mail eXchanger, 郵件服務器 2.9.3 資源記錄定義的格式及定義示例 語法: name [TTL] IN rr_type value 注意: a. TLL可從全局繼承 b. @可用於引用當前區域的名字 SOA: name: 當前區域的名字,如「baidu.com.」 value: 有多部分組成 1. 當前區域的主DNS服務器的FQDN,也可使用當前區域的名字 2. 當前區域管理員的遊戲地址,地址中不能使用@符號,通常用.替換,如 alen.chengkaihua.com 3. (主從服務協調屬性的定義以及否認的答案的統一TTL值) 例如: alen.com. IN SOA ns1.alen.com. nsadmin.alen.com. ( 2015042201 ; 序列號 2H ;刷新時間 10M ;重試時間 1W ; 過時時間 1D ;否認答案的TTL值 ) NS: name: 當前區域的名字 value: 當前區域的某DNS服務器的名字 注意: 一個區域能夠有多個NS記錄 例如: alen.com. IN NS ns1.alen.com. alen.com. IN NS ns2.alen.com. 注意:1.相鄰的兩個資源記錄的name相同時,後續的可省略 2. 對NS記錄而言,任何一個ns記錄後面的服務器名字,都應該在後續有一個A記錄 MX: name: 當前區域的名字 value: 當前區域的某郵件服務器的主機名 一個區域內,MX記錄可有多個;但每一個記錄的value以前應該有一個數字(0-99),表示此服務器的優先級,數字越小優先級越高。 例如: alen.com. IN MX 10 mx1.alen.com. alen.com. IN MX 20 mx2.alen.com 注意: 對MX記錄而言,每個MX記錄後面的服務器名字,都應該在後續有一個A記錄 A: name: 某主機的FQDN value: 主機名對應主機的IP地址 例如: ns1.alen.com. IN A 1.1.1.1 ns2.alen.com. IN A 1.1.1.2 MX1.alen.com. IN A 1.1.1.3 MX2.alen.com. IN A 1.1.1.4 注意: *.alen.com. IN A 1.1.1.5 避免用戶寫錯答案時給錯誤答案,可經過泛域名解析進行解析至某特定地址 AAAA: name: FQDN value: IPv6 PTR: name: IP,有特定格式,IP地址反過來寫,1.1.1.2要寫成2.1.1.1.in-addr.arpa. value: FQDN 例如: 4.3.2.1.in-addr.arpa. IN PTR www.alen.com. CNAME: name: 別名的FQDN value: 正式名字的FQDN 例如: web.alen.com. IN CNAME www.alen.com.
3、前期準備緩存
3.1 實驗目標
以域名alen.com.爲例,配置一臺主DNS服務器一臺從服務器:
192.168.1.102 主DNS服務器
192.168.1.103 從DNS服務器
實現正反向解析、主從同步功能安全
3.2 安裝包及配置文件 查看bind服務相關包,安裝所須要的包便可: # yum list bind* 安裝bind服務及其依賴包,主要安裝這三個包: bind、bind-libs、bind-utils # yum install bind bind-libs bind-utils bind相關配置文件: 服務腳本:/etc/rc.d/init.d/named 主配置文件: /etc/named.conf, /etc/named.rfc1912.zones 解析庫文件:/var/named/ZONE_NAME.ZONE(須要本身定義) 日誌文件: /var/log/messages
4、首先搭建一臺主DNS服務器服務器
4.1 主DNS實現正向解析和反向解析 4.1.1 配置緩存名稱服務器 4.1.1.1 監聽外部地址便可 4.1.1.2 dnssec: 建議測試時關閉dnssec cp /etc/named.conf{,.bak} vim /etc/named.conf options { // listen-on port 53 { 192.168.1.102; 127.0.0.1; }; //能夠設置ip也能夠直接註釋整行 // 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"; // allow-query { any; }; //能夠設置爲any也能夠直接註釋掉 recursion yes; //關閉dnssec // dnssec-enable yes; // dnssec-validation yes; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; 4.1.2 在緩存dns服務器的基礎上,配置主DNS服務器 cp /etc/named.rfc1912.zones{,.bak} vim /etc/named.rfc1912.zones 4.1.2.1 在最後一行添加正向解析區域和反向解析區域: zone "alen.com" IN { type master; // 正向區域類型 file "alen.com.zone"; //相對於/var/named而言,輸入區域相對路徑 }; zone "1.168.192.in-addr.arpa" IN { //反向解析區域 type master; file "192.168.1.zone"; }; 定義區域正向解析庫文件 在/var/named建立 alen.com.zone正向解析庫文件並配置 $TTL 86400 $ORIGIN alen.com. @ IN SOA ns1.alen.com. admin.alen.com. ( 2010010101 ;序列號 1H ;刷新時間 5M ;重試時間 7D ;七天過時 1D ) ;否認答案的統一TTL值 IN NS ns1 IN NS ns2 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 192.168.1.102 ns2 IN A 192.168.1.103 mx1 IN A 192.168.1.104 mx2 IN A 192.168.1.105 www IN A 192.168.1.102 www IN A 192.168.1.103 ftp IN CNAME www alen.com. IN A 192.168.1.102 * IN A 192.168.1.102 ;泛域名解析 定義區域反向解析庫文件 在/var/named目錄下建立 192.168.1.zone反向解析庫文件並配置 $TTL 1D $ORIGIN 1.168.192.in-addr.arpa. @ IN SOA ns1.alen.com. admin.alen.com. ( 2015041101 ;序列號 2H ;刷新時間 5M ;重試時間 1W ;過時時間一週 1D ) ;否認答案的統一TTL值 IN NS ns1.alen.com. IN NS ns2.alen.com. 102 IN PTR ns1.alen.com. 103 IN PTR ns2.alen.com. 102 IN PTR www.alen.com. 103 IN PTR www.alen.com. 104 IN PTR mx1.alen.com. 105 IN PTR mx2.alen.com.
5、測試網絡
5.1 測試工具介紹 5.1.1 dig的使用 dig [-t type] name [@SERVER] [query options] 用於測試DNS系統,不會查詢hosts文件進行解析 好比: dig -t A ns1.alen.com @192.168.1.102 查詢選項: +[no]trace: 跟蹤解析過程 +[no]recurse: 遞歸解析 測試反向解析: dig -x IP @SERVER 好比: dig -x 192.168.1.102 @ 192.168.1.102 模擬區域傳送: dig -t axfr ZONE_NAME @SERVER 5.1.2 host命令 host [-t type] name [SERVER] 好比: host -t A ns1.alen.com 192.168.1.102 5.1.3 nslookup命令 nsloopup [-option] [name | - ] [server] 交互式模式: server IP: 指明使用哪一個DNS server 進行查詢 set q=RR_TYPE: 指明查詢的資源記錄類型 NAME: 要查詢的名稱 好比: nsloopup > server 192.168.1.102 > set q=A > ns1.alen.come 5.2 測試 修改 alen.com.zone和192.168.1.zone文件屬組 # chown :named alen.com.zone # chown :named 1.168.192.zone 修改 alen.com.zone和192.168.1.zone權限 # chmod 640 alen.com.zone # chmod 640 192.168.1.zone 檢查區域配置文件有無錯誤: # named-checkconf //檢查主配置文件 # named-checkzone "alen.com" alen.com.zone # named-checkzone "1.168.192.in-addr.arpa" 192.168.1.zone 重啓named服務 # service named restart 測試資源記錄 # dig -t NS alen.com @192.168.1.102 # dig -t A ns1.alen.com @192.168.1.102 # dig -t A www.alen.com @192.168.1.102 # dig -t A pop.alen.com @192.168.1.102 # dig -t A alen.com @192.168.1.102 # host -t A ns2.alen.com 192.168.1.102 測試反向解析: # dig -x 192.168.1.102 @192.168.1.102 至此,一臺主DNS服務器就配置好了,且支持正反向解析功能。
6、主從複製架構
上面咱們配置了一臺主DNS服務器,下面把192.168.1.103這臺電腦做爲輔助DNS服務器,來實現兩臺電腦的主從架構 從服務器上進行配置: 1. 先模擬傳送測試是否能夠正常傳送 # dig -t axfr alen.com @192.168.1.102 2.若是能夠正常傳送,再進行配置從服務器 # yum install bind //centos6默認安裝了libs和utils包,因此只須要安裝bind包就能夠 3. 從服務只須要配置區域,不須要配置資源記錄 vim /etc/named.conf 配置緩存服務器,和上面同樣 options { listen-on port 53 { 192.168.1.103; 127.0.0.1; }; //監聽對外ip // 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"; allow-query { any; }; recursion yes; // dnssec-enable yes; // dnssec-validation yes; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; vim /etc/named.rfc1912.zones zone "alen.com" IN { type slave; masters { 192.168.1.102; }; file "slaves/alen.com.zone"; }; zone "1.168.192.in-addr.arpa" IN { type slave; masters { 192.168.1.102; }; file "slaves/192.168.1.zone"; }; 配置完後檢查語法錯誤 # named-checkconf 重載服務 # rndc reload 查看日誌 # tail /var/log/messages 傳送成功後在/var/named目錄下會自動建立一個192.168.1.zone文件和alen.com.zone文件 rndc工具總結 rndc COMMAND reload: 重載主配置文件和區域解析庫文件 reload zone: 重載區域解析庫文件 retransfer zone: 手動啓動區域傳送過程,而無論序列號是否增長 notify zone:從新對區域傳送發通知 reconfig:重載主配置文件 querylog:開啓或關閉查詢日誌,注意只在定位錯誤的時候開啓 trace:遞增debug使用的級別,生產環境中切莫開啓,很影響性能 trace LEVEL:指定使用的級別
7、子域受權tcp
1.1 自域受權架構
1.2 爲什麼要轉發? 從上面的架構圖中能夠看到:客戶端 --> ns1 客戶端請求解析的主機在alen域內的ns1主機, 客戶端給父域ops發送請求,可是ops是找不到alen域內的ns1的,它只會從根域進行迭代去找,因此這種狀況就要考慮轉發。從而讓客戶端能夠直接向alen域發送請求找到ns1主機。 1.3 如何定義轉發服務器: 7.3.1 所有轉發: 凡是對非本機全部負責解析的區域的請求,都轉發給指定服務器 options { forward { first|only } forwarders } 1.3.2 區域轉發:僅抓發對特定區域的請求至某服務器 zone "ZONE_NAME" IN { type forward; forward { first|only }; forwarders } 要點: first: 先轉發,沒有獲得響應結果就本身去尋找根域 only: 轉發後沒有響應結果就放棄繼續尋找根域 1.4 定義子域並實現轉發功能實例 1.4.1 定義子域 在父域(192.168.1.102)中: vim /var/named/alen.com.zone ops IN NS ns1.ops ns1.ops IN A 192.168.1.103 在子域(192.168.1.103)中: 添加子域: vim /etc/named.rfc1912.zones zone "ops.alen.com" IN { type master; file "ops.alen.com.zone"; }; 添加子域的資源記錄 vim /var/named/ops.alen.com.zone $TTL 1d $ORIGIN ops.alen.com. @ IN SOA ns1.ops.alen.com. admin.ops.alen.com. ( 2015041001 1H 10M 3D 1D ) IN NS ns1 ns1 IN A 192.168.1.103 www IN A 192.168.1.103 * IN A 192.168.1.103 1.4.2 實現轉發 1. 所有轉發 在 父域192.168.1.102上實現 vim /etc/named.conf 在options中添加兩行: forward first; forwarders { 192.168.1.1; }; 測試: # dig -t A www.baidu.com @192.168.1.102 注意: 關掉dnssec驗證機制 dnssec-enable no; dnssec-validation no /*include "/etc/named.root.key"; 此配置保存根域名服務器的私鑰文件,根域名解析服務器爲了防止DNS劫持,採用一種DNSSEC安全擴展技術,採用證書認證機制保證數據安全。 若是註釋此配置則DNS服務器與根域名服務器之間傳遞解析不須要通過認證。 若是開啓此配置若是根的私鑰不匹配則沒法正常解析,因此有時候咱們配置緩存轉發服務器的時候能夠選擇註釋此項。 2 區域轉發 在子域 192.168.1.103上實現 vim /etc/named.rfc1912.zones 在最後一行添加: zone "alen.com" IN { type forward; forward only; forwarders { 192.168.1.102; }; //子域指向父域 }; 關掉dnssec驗證機制 dnssec-enable no; dnssec-validation no 1.5 bind中安全相關的配置 acl: 把一個或多個ip地址歸併爲一個集合,並經過一個統一的名稱進行調用 示例: acl mynet { 192.168.1.102; 192.168.1.103; 192.168.1.0/24; } 1.5.1 bind中四個內置的acl none: 沒有一個主機 any: 任意主機 local: 本機 localnet: 本機的IP同掩碼運算後獲得的網絡地址 1.5.2 訪問控制的命令 allow-query {} : 容許查詢的主機,白名單,注意:定義在zone中只控制一個zone,定義在options中控制全部的zone allow-transfer {}: 容許區域傳送的主機: 白名單 allow-recursion {}: 容許遞歸的主機 allow-update {}: 容許更新區域數據庫的內容 1.5.3 實例: 1.5.3.1 192.168.1.102: vim /etc/named.conf 添加acl acl slaves { //定義訪問控制列表slaves 192.168.1.103; 192.168.1.102; 1127.0.0.1; } 在/etc/named.rfc1912.zones中: zone "alen.com" IN { type master; file "alen.com.zone"; allow-query { 127.0.0.1; }; //只容許本機查詢 }; # dig -t A www.alen.com @127.0.0.1 // 其餘任何ip都不能進行查詢 1.5.3.2 添加: allow-transfer { slaves; }; # dig -t axfr alen.com @192.168.1.103 //只容許本機及子域傳送 1.5.3 全局配置中: vim /etc/named.conf 註釋 recursion {}; 添加咱們本身定義的容許遞歸的主機 allow-recursion { 192.168.1.102; 127.0.0.1; }; //只容許本機進行遞歸 1.5.3.4 爲了安全,通常allow-update都設爲none vim /etc/named.rfc1912.zones zone "alen.com" IN { type master; file "alen.com.zone"; // allow-query { 127.0.0.1; }; //只容許本機查詢 allow-update { none; }; // 不容許任何主機更新 };
2、視圖
2.1 view是什麼? view是bind配置邏輯上的一個容器 2.2 爲何要使用視圖? 不一樣網絡(好比聯通和電信),或者不一樣區域(客戶的來源距離),爲了更好的客戶體驗,因此根據不一樣客戶來源進行不一樣的zone配置,進而獲得不一樣的請求結果。簡單點說,爲了實現不一樣客戶請求獲得不一樣的結果,因此用到view這個功能。 2.3 view的特色 一個bind服務器可定義多個view,每一個view中可定義一個或多個zone; 每一個view用來匹配一組客戶端 多個view內可能須要對同一個區域進行解析,但使用不一樣的區域解析庫文件 2.4 view的示例 view VIEW_NAME { match-clients { }; //匹配不一樣的客戶來源 zone; } 注意: 1. 一旦啓用了view,全部的zone都只能定義在view中 2. 僅有必要在匹配到容許遞歸請求的客戶所在view中定義根區域 3.客戶端請求到達時,是自上而下檢查每一個view所服務的客戶端列表 2.5 如何實現view的不一樣客戶來源 使用acl來實現: 好比:acl inet { 192.168.0.0/24; 127.0.0.1/8; };
至此,DNS基本知識點介紹這些。DNS的經常使用架構不僅僅是一個主一個從,還有其餘架構方式,應該在實際應用中視狀況選擇。