DNS作為互聯網服務的一個基礎型服務,了解和掌握DNS服務的原理和配置將是每一個運維人員必備的技能,這就如同闖蕩江湖的俠客不但要有的招式,還要懂的運用這些招式的心法一樣,接下來我將從DNS的正反向解析、主從同步、子域授權以及Bind view這四個方面來揭開它神秘的面紗。
正反向解析:
首先,任何一臺服務器要想提供服務必須要有對應的服務應用程序,安裝bind
yum install -y bind bind--libs bind-utils
安裝之后我們有必要認識一下bind安裝之后的文件,這樣有助于我們管理和配置這臺服務器
1)服務腳本:/etc/rc.d/init.d/named
2)主配置文件:/etc/name.con
/etc/named.rfc1912.zones
/etc/rndc.hey
3)解析庫文件:/var/named/*.ZONE
配置一臺DNS服務器,就是通過修改配置文件以及定義我們需要的解析庫來實現的,這里我先定義主服務器實現正反向解析
主DNS服務器:ns1.zhang.com 192.168.45.144
從DNS服務器:ns2.zhang.com 192.168.45.140
定義主配置文件:/etc/named.conf
options { listen-on port 53 { 192.168.45.144; 127.0.0.1; }; ##定義監聽端口以及監聽地址 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; ##以下幾行是DNS的安全,通常情況下關閉此功能 // dnssec-validation yes; // dnssec-lookaside auto; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; 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";
定義解析區域:/etc/named.rfc1912.zones
zone "zhang.com" IN { type master; file "zhang.com.zone"; allow-update { none; }; }; zone "45.168.192.in-addr.arpa" IN { type master; file "192.168.45.zone"; };
創建區域解析庫文件:zhang.com.zone
$TTL 86400 $ORIGIN zhang.com. @ IN SOA ns1.zhang.com. admin.zhang.com ( ##定義SOA記錄 201512151943 ##序列號 1H ##刷新時間 5M ##重試時間 7D ##過期時長 1D ) ##否定答案的TTL值 IN NS ns1 ##NS記錄 IN NS ns2 IN MX 10 mx1 ##MX記錄以及優先級 IN MX 20 mx2 ns1 IN A 192.168.45.144 ##A記錄 ns2 IN A 192.168.45.140 mx1 IN A 192.168.45.142 mx2 IN A 192.168.45.143 www IN A 192.168.45.141 pop IN CNAME www ##別名記錄 smtp IN CNAME www ftp IN CNAME www zhang.com. IN A 192.168.45.144 * IN A 192.168.45.141
正向解析測試命令:
dig -t A zhang.com @192.168.45.144 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A zhang.com @192.168.45.144 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54496 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;zhang.com. IN A ;; ANSWER SECTION: zhang.com. 86400 IN A 192.168.45.144 ;; AUTHORITY SECTION: zhang.com. 86400 IN NS ns1.zhang.com. zhang.com. 86400 IN NS ns2.zhang.com. ;; ADDITIONAL SECTION: ns1.zhang.com. 86400 IN A 192.168.45.144 ns2.zhang.com. 86400 IN A 192.168.45.140
反向解析測試命令:
dig -x 192.168.45.141 @192.168.45.144 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -x 192.168.45.141 @192.168.45.144 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56229 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;141.45.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 141.45.168.192.in-addr.arpa. 86400 IN PTR www.zhang.com. ;; AUTHORITY SECTION: 45.168.192.in-addr.arpa. 86400 IN NS ns1.zhang.com. 45.168.192.in-addr.arpa. 86400 IN NS ns2.zhang.com. ;; ADDITIONAL SECTION: ns1.zhang.com. 86400 IN A 192.168.45.144 ns2.zhang.com. 86400 IN A 192.168.45.140
測試命令dig總結:
dig [-t type] name [@SERVER] [query options]
dig用于測試dns系統,因此,不會查詢hosts文件進行解析;
查詢選項:
+[no]trace:跟蹤解析過程
+[no]recurse:進行遞歸解析
測試反向解析:
dig -x IP @SERVER
主從復制:
要實現主從同步,必須滿足以下要求:
1、從服務器應該為一臺獨立的名稱服務器;
2、主服務器的區域解析庫文件中必須有一條NS記錄是指向從服務器;
3、從服務器只需要定義區域,而無須提供解析庫文件;解析庫文件應該放置于/var/named/slaves/目錄中;
4、主服務器必須允許從服務器作區域傳送;可使用dig -t axfr ZONE_NAME @SERVER_NAME測試主服務器是否可以做區域傳送
5、主從服務器時間應該同步,可通過ntp進行;
6、bind程序的版本應該保持一致;否則,應該從服務器高,主服務器低;
定義主配置文件:/etc/named.conf
options { listen-on port 53 { 192.168.45.140; 127.0.0.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; // dnssec-lookaside auto; /* Path to ISC DLV key */ // bindkeys-file "/etc/named.iscdlv.key"; // managed-keys-directory "/var/named/dynamic"; }; 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";
定義解析區域:/etc/named.rfc1912.zones
zone "zhang.com" IN { type slave; masters { 192.168.45.144; }; file "slaves/zhang.com.zone"; };
此時我們的從服務器就只需執行:
rndc reload ##重載主配置文件和區域解析庫文件
從服務器就能從主服務器同步解析庫文件;
執行測試命令:
dig -t A zhang.com @192.168.45.140 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A zhang.com @192.168.45.140 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7672 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;zhang.com. IN A ;; ANSWER SECTION: zhang.com. 86400 IN A 192.168.45.144 ;; AUTHORITY SECTION: zhang.com. 86400 IN NS ns2.zhang.com. zhang.com. 86400 IN NS ns1.zhang.com. ;; ADDITIONAL SECTION: ns1.zhang.com. 86400 IN A 192.168.45.144 ns2.zhang.com. 86400 IN A 192.168.45.140
子域授權:
每個域的名稱服務器,都是通過上級名稱服務器在解析庫中進行授權,類似根域授權tld一樣,那如何定義一個子域那?
首先定義主服務器解析庫文件:/var/named/zhang.com.zone
$TTL 86400 $ORIGIN zhang.com. @ IN SOA ns1.zhang.com. admin.zhang.com ( 201512151943 1H 5M 7D 1D ) IN NS ns1 IN NS ns2 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 192.168.45.144 ns2 IN A 192.168.45.140 mx1 IN A 192.168.45.142 mx2 IN A 192.168.45.143 www IN A 192.168.45.141 pop IN CNAME www smtp IN CNAME www ftp IN CNAME www zhang.com. IN A 192.168.45.144 * IN A 192.168.45.141 ops IN NS ns1.ops ops IN NS ns2.ops ns1.ops IN A 192.168.45.140 ns1.ops IN A 192.168.45.142
然后編輯子域服務器解析區域:/etc/named.rfc1912.zones
zone "ops.zhang.com" IN { type master; file "ops.zhang.com.zone"; };
同時一定別忘記創建解析庫文件:/var/named/ops.zhang.com.zone
$TTL 1D $ORIGIN ops.zhang.com. @ IN SOA ns1.ops.zhang.com. admin.ops.zhang.com. ( 201515160000 1H 10M 3D 1D ) IN NS ns1 IN NS ns2 ns1 IN A 192.168.45.144 ns2 IN A 192.168.45.141 www IN A 192.168.45.141 www IN A 192.168.45.141
同步主配置文件以及解析庫文件:rndc reload
執行測試命令:
dig -t A www.ops.zhang.com @192.168.45.140 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.4 <<>> -t A www.ops.zhang.com @192.168.45.140 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11650 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.ops.zhang.com. IN A ;; ANSWER SECTION: www.ops.zhang.com. 86400 IN A 192.168.45.141 ;; AUTHORITY SECTION: ops.zhang.com. 86400 IN NS ns1.ops.zhang.com. ops.zhang.com. 86400 IN NS ns2.ops.zhang.com. ;; ADDITIONAL SECTION: ns1.ops.zhang.com. 86400 IN A 192.168.45.144 ns2.ops.zhang.com. 86400 IN A 192.168.45.141
bind view:
一個bind服務器可定義多個view,而這個view就相當于bind的一個子容器,這個子容器能夠提供比服務器自身更靈活更小一部分配置的功能,每個view中可定義一個或多個zone;每個view用一來匹配一組客戶端;多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件;
view定義的方法:
view VIEW_NAME {
match-clients {};
};
注意:(1) 一旦啟用了view,所有的zone都只能定義在view中;
(2) 僅有必要在匹配到允許遞歸請求的客戶所在view中定義根區域;
(3) 客戶端請求到達時,是自上而下檢查每個view所服務的客戶端列表;
首先定義主配置文件/etc/named.conf;為了方便定義解析區域,我將本地地址定義到localnet這個acl中,同時由于一旦啟用view功能,所有的zone都只能定義到view中,所以我將這里定義的根區域注釋掉,而是定義到/etc/named.rfc1912.zone中;
options { listen-on port 53 { 192.168.45.144; 127.0.0.1; }; 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; acl localnet { 192.168.45.0/24; 127.0.0.0/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";
其次在/etc/named.rfc1912.zone中定義我們的view
view internal { match-clients { localnet; }; allow-recursion { localnet; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; zone "zhang.com" IN { type master; file "zhang.com.zone"; allow-update { none; }; }; zone "45.168.192.in-addr.arpa" IN { type master; file "192.168.45.zone"; }; }; view external { match-clients { any; }; zone "zhang.com" IN { type master; file "zhang.com.external"; allow-update { none; }; }; };
最后創建我們定義的解析區域文件zhang.com.external
$TTL 86400 $ORIGIN zhang.com. @ IN SOA ns1.zhang.com. admin.zhang.com ( 201512151943 1H 5M 7D 1D ) IN NS ns1 IN NS ns2 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 192.168.45.144 ns2 IN A 192.168.45.140 www IN A 2.2.2.1 * IN A 2.2.2.1
重啟服務后,我們就可以通過本機以及通過非本機網絡使用dig命令發現,同樣解析一個域名在不同的網絡中解析,得到的解析地址也不一樣
以上就是bind服務器的四個基本應用,理解和使用這個網絡基礎服務對我們網絡運維工作中有很多的好處,歡迎有興趣的朋友一起討論DNS服務器的其他一下應用。
原創文章,作者:zhang,如若轉載,請注明出處:http://www.www58058.com/10102
清晰詳細,堅持加油