BIND為任意長掩碼的網段做反向解析

前言

當初做BIND實驗的時候在網上搜到的資料全部是以24位掩碼來做反向解析實驗的,搞得我一直以為BIND反向解析時只能使用24位掩碼。然而,事實上BIND支持任意長度掩碼的網段的反向解析。

本文將以16位掩碼為例子,演示配置過程。

實驗目的

使BIND可以正確為192.168.0.0/16網段做反向解析,並正確解析出192.168.10.254這個IP地址對應的域“www.ibadboy.net”。

配置方法

1、創建16位掩碼的反向解析區域

2018-06-21 09-48-19屏幕截圖.png

2、編輯反向解析數據庫文件

注意,這裏的254.10是10.254的倒寫!!!這裏是重點!必須倒寫!
2018-06-21 09-47-09屏幕截圖.png

3、驗證結果

如下圖,已經按照實驗預期通過192.168.10.254解析出了www.ibadboy.net。
2018-06-21 09-48-44屏幕截圖.png

配置rndc實現對BIND的管理

rndc介紹:
rndc是BIND安裝包提供的一種控制域名服務運行的工具,可以實現在不重啓BIND的情況下對zone及解析記錄等配置進行更新。
軟件包安裝:
首先要安裝BIND軟件包才可以使用rndc工具,rndc和BIND可以不在同一台服務器上部署。

[root@localhost ~]# yum install -y bind

rndc配置部分:
生成rndc的通信密鑰及配置文件,/dev/urandom是Linux下用來生成隨機數的一個文件,這裏使用-r選項調用它是為了生成通信密鑰。

[root@localhost ~]# rndc-confgen -r /dev/urandom > /etc/rndc.conf

編輯剛剛生成的配置文件。

[root@localhost ~]# vim /etc/rndc.conf

轉到第9行,其定義了要管理的BIND服務器的地址,按照需求對其進行修改,本實驗中我的BIND服務器的地址是192.169.1.101.

default-server 192.168.1.101;

BIND配置部分:
使用vim打開rndc的配置文件,轉到第十四行,此行直到末尾都是要加入到/etc/named.conf文件中的,加入後可以按照自己的需求進行修改,比如説第21行的inet選項是用來定義監聽本服務器的哪些接口的(當然是監聽和rndc相連的接口啦),如果想監聽所有接口則將其改為0.0.0.0。第22行是定義此BIND服務器允許接受哪些rndc的管理,將127.0.0.1改成運行rndc的設備的IP地址就行。最後別忘了把註釋去掉,否則配置文件是不生效的。

14 # Use with the following in named.conf, adjusting the allow list as needed:
15 # key "rndc-key" {
16 # algorithm hmac-md5;
17 # secret "YAkaS9u8kADIcBMslszUaw==";
18 # };
19 #
20 # controls {
21 # inet 127.0.0.1 port 953
22 # allow { 127.0.0.1; } keys { "rndc-key"; };
23 # };
24 # End of named.conf

以下是我的/etc/named.conf文件的完整配置(第40行到末尾是新增的配置),僅供參考,切勿複製。
運行BIND的服務器的IP:192.168.1.101
運行rndc的服務器的IP:192.168.1.100

  1 //
  2 // named.conf
  3 //
  4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
  5 // server as a caching only nameserver (as a localhost DNS resolver only).
  6 //
  7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
  8 //
  9
 10 options {
 11 listen-on port 53 { any; };
 12 listen-on-v6 port 53 { ::1; };
 13 directory "/var/named";
 14 dump-file "/var/named/data/cache_dump.db";
 15 statistics-file "/var/named/data/named_stats.txt";
 16 memstatistics-file "/var/named/data/named_mem_stats.txt";
 17 allow-query { any; };
 18 recursion yes;
 19
 20 dnssec-enable yes;
 21 dnssec-validation yes;
 22 dnssec-lookaside auto;
 23
 24 /* Path to ISC DLV key */
 25 bindkeys-file "/etc/named.iscdlv.key";
 26
 27 managed-keys-directory "/var/named/dynamic";
 28 };
 29
 30 logging {
 31 channel default_debug {
 32 file "data/named.run";
 33 severity dynamic;
 34 };
 35 };
 36
 37 include "/etc/named.rfc1912.zones";
 38 include "/etc/named.root.key";
 39
 40 # Use with the following in named.conf, adjusting the allow list as needed:
 41 key "rndc-key" {
 42 algorithm hmac-md5;
 43 secret "YAkaS9u8kADIcBMslszUaw==";
 44 };
 45 #
 46 controls {
 47 inet 192.168.1.101 port 953
 48 allow { 192.168.1.100; } keys { "rndc-key"; };
 49 };
 50 # End of named.conf

保存後重啓named服務器

[root@localhost ~]# server named restart

使用rndc連接BIND並進行管理
在使用rndc連接BIND前一定要確保兩台Linux服務器的時間同步,否則會報錯(我做實驗的時候卡在這個坑裏整整一天)
可以手工修改系統時間也可以與NTP服務器同步,若你的實驗用機器無法鏈接外網,又不想手工配置時間,則可以參考下面這篇文章,將其中一台機器配置為NTP,供另一台機器同步。

CentOS 6下配置NTP網絡時間服務器


啓動rndc並連接BIND。

[root@localhost ~]# rndc status
WARNING: key file (/etc/rndc.key) exists, but using default configuration file (/etc/rndc.conf)
version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6
CPUs found: 1
worker threads: 1
number of zones: 19
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

可以看到,上面的輸出信息中包含了一條警告,這個其實沒什麼影響的,如果你有強迫症可以使用下面這條命令開啓動rndc,這樣就不會看到那條警告了。

[root@localhost ~]# rndc -c /etc/rndc.conf status

rndc常用管理命令:

status                    #顯示bind服務器的工作狀態
reload                    #重新加載配置文件和區域文件
reload zone_name          #重新加載指定區域
reconfig                  #重讀配置文件並加載新增的區域
querylog                  #關閉或開啓查詢日誌
dumpdb                    #將高速緩存轉儲到轉儲文件 (named_dump.db)
freeze                    #暫停更新所有動態zone
freeze zone [class [view]]#暫停更新一個動態zone
flush [view]              #刷新服務器的所有高速緩存
flushname name            #為某一視圖刷新服務器的高速緩存
stats                     #將服務器統計信息寫入統計文件中
stop                      #將暫掛更新保存到主文件並停止服務器
halt                      #停止服務器,但不保存暫掛更新
trace                     #打開debug, debug有級別的概念,每執行一次提升一次級別
trace LEVEL               #指定 debug 的級別, trace 0 表示關閉debug
notrace                   #將調試級別設置為 0
restart                   #重新啓動服務器(尚未實現)
addzone zone [class [view]] { zone-options } #增加一個zone
delzone zone [class [view]]                  #刪除一個zone
tsig-delete keyname [view]#刪除一個TSIG key
tsig-list                 #查詢當前有效的TSIG列表
validation newstate [view]#開啓/關閉dnssec

CentOS 6下使用BIND配置簡單DNS服務器

介紹:
BIND是linux/unix下的開源免費DNS服務器,也是全世界應用最廣泛的DNS服務器軟件。
軟件安裝:

yum install -y bind

主要配置文件介紹:

/etc/named.conf                 //BIND主配置文件
/etc/named.rfc1912.zones        //DNS解析區域配置文件
/etc/named.localhost            //正向解析模板文件
/etc/named.loopback             //反向解析模板文件

BIND配置:
編輯主配置文件

vim /etc/named.conf

將如下如紅色箭頭所指的兩處的值均改為“any”,第一處定義bind服務監聽的本地網卡地址,默認僅監聽迴環地址,改為any後監聽所有網卡。第二處定義的是允許查詢DNS的主機,默認只有本地可以查詢,改為any後允許所有主機進行DNS查詢。

修改後如下圖。

主配置文件的配置至此結束,接下來編輯DNS解析區域配置文件。

vim /etc/named.rfc1912.zones

此部分為正向解析區域配置模板,這裏稍微囉嗦一下什麼是正向解析什麼是反向解析:正向解析就是通過域名解析出IP地址,反向解析就是通過IP地址來解析出域名。

此部分為IPv6反向解析區域配置模板。

此部分為反向解析區域配置模板

這裏,我們添加一個正向解析區域和一個反向解析區域。
直接在模板基礎上修改即可,如下圖,第一個“it7e.com”是要解析的域名,第二個“it7e.com”是正向解析配置文件的文件名。
默認情況下,所有的解析配置文件都存放在/var/named/目錄下。

再添加一個反向解析區域,其中”1.168.192″是要進行反向解析的網段”192.168.1″的倒寫,而圖中的“192.168.1”則是反向解析配置文件的文件名。

最後,分別編輯兩個解析區域的解析配置文件向其中添加解析即可。
先根據正向解析配置文件模板”named.localhost”創建正向解析配置文件”it7e.com”。

cp -p /var/named/named.localhost /var/named/it7e.com

再根據反向解析配置文件模板“named.loopback”創建反向解析配置文件“192.168.1”。

cp -p /var/named/named.loopback /var/named/192.168.1

編輯正向解析配置文件“it7e.com”

vim /var/named/it7e.com

通常情況下,只需要編輯紅框部分,向其中添加解析即可,其餘地方不用更改。

例如:

上圖中需要特殊説明的是MX記錄後面的5是MX優先級。記錄值中填的“@”代表本域,本實驗中是“it7e.com”,注意如果這樣寫,那麼就必須保證有“it7e.com”對應的解析記錄,本實驗中其對應的記錄在第九行。在主機位上填的“@”代表“空”,也可以真的留空,什麼都不寫,就像第九行的那條解析記錄一樣。另外,記錄值中的域名都以“.”結尾,IP則不用。
最後需要注意的是MX記錄要寫在其值的CNAME記錄的前面,例如上圖中,“@   MX 5 mail.it7e.com”記錄寫在了“mail CNAME it7e.com”記錄的前面,否則會出現異常。
關於DNS解析記錄類型的介紹參考此篇文章:

DNS解析記錄類型詳解

再來編輯反向解析文件。

vim /var/named/192.168.1

依然是沒有特殊需求就只編輯紅框內的內容即可。

例如:

上圖中,“ A 127.0.0.1”這個記錄不可刪除,否則報錯。因為NS記錄值是“@”,也就是“it7e.com”,若刪除了“ A 127.0.0.1”這條記錄,則“it7e.com”沒有對應的A記錄,NS記錄會拋出錯誤。
服務測試:
測試前需要將本機或客户機的DNS修改為DNS服務器的IP地址。
CentOS 6下DNS的修改方法參考此篇文章,Windows下不做介紹。

CentOS 6下正確配置DNS的方法

測試DNS解析使用nslookup命令,如果發現系統中沒有nslookup這個命令是因為沒有安裝bind工具包,執行以下命令安裝。

yum install -y bind-utils

啓動nslookup。

nslookup

執行命令後在“>”符號後面輸入要測試解析的域名即可。

例如下圖,其中藍色框內是DNS服務器信息,紅框內是域名解析信息。

可以通過“set type=”來設置解析類型。
例如,測試MX解析記錄: 
或者,測試TXT記錄。

再來測試下反向解析。

最後,退出nslookup工具,只需要在“>”符號後面輸入“exit”即可。

CentOS 6下正確配置DNS的方法

本來配置DNS是比較簡單的東西,沒想專門寫一篇文章的。但後來我發現這裏還是有一個大坑的,很有必要單獨拿出來對其進行説明。
我看到網上很多教程都推薦大家通過編輯/etc/resolv.conf這個文件來修改系統的DNS。
但經過實測,用此方法修改DNS,在某些情況下會發生明明編輯了/etc/resolv.conf文件,但重啓網絡後文件又恢復到之前的狀態的情況。
經過一翻搜索之後,發現。原來是因為CentOS 6使用NetworkManager來管理網絡,當在/etc/resolv.conf中配置了DNS時,/etc/sysconfig/network-scripts/ifcfg-eth*文件中並沒有DNS信息或還是之前的DNS信息,而NetworkManager會用/etc/sysconfig/network-scripts/ifcfg-eth*中的DNS信息來覆蓋/etc/resolv.conf中的信息。
正確配置DNS的方法:

vim /etc/sysconfig/network-scripts/ifcfg-eth*(*是什麼依據實際情況來定)

按照如下格式添加DNS。

DNS1=
DNS2=
DNS3=
……

例如下圖,其中“114.114.114.114”是國內著名的DNS服務,“8.8.8.8”是谷歌的DNS服務,也可以根據自身需求更改為其他DNS地址。

最後重啓網絡即可。

service network restart

DNS解析記錄類型詳解

A記錄:將域名指向一個IPv4地址(例如:10.10.10.10)。
CNAME記錄:如果將域名指向一個域名,實現與被指向域名相同的訪問效果。
MX記錄:建立電子郵箱服務,將指向郵件服務器地址。
NS記錄:域名解析服務器記錄,如果要將子域名指定某個域名服務器來解析。
TXT記錄:可任意填寫(可為空),通常用做SPF記錄(反垃圾郵件)使用。
AAAA記錄:將主機名(或域名)指向一個IPv6地址(例如:ff03:0:0:0:0:0:0:c1)。
SRV記錄:記錄了哪台計算機提供了哪個服務。格式為:服務的名字.協議的類型(例如:_example-server._tcp)。
顯性URL:將域名指向一個http(s)協議地址,訪問域名時,自動跳轉至目標地址(例如:將www.tianidc.cn顯性轉發到www.ibadboy.net後,訪問www.tianidc.cn時,地址欄顯示的地址為:www.ibadboy.net)。
隱性URL:與顯性URL類似,但隱性轉發會隱藏真實的目標地址(例如:將www.tianidc.cn隱性轉發到www.ibadboy.net後,訪問www.tianidc.cn時,地址欄顯示的地址仍然為:www.tianidc.cn)。