1. 程式人生 > >每日一記:DNS服務器

每日一記:DNS服務器

帶寬 聯機 nec 還原 ESS forward htm days only

主機名控制者: DNS 服務器
在私有網域內部,最好將所有的私有IP與主機名對應都寫入 /etc/hosts 檔案中
DNS是一種因特網的通訊協議名稱,而Bind則是提供這個DNS服務的軟件

完整主機名(Fully Qualified Domain Name)FQDN :由主機名和域名組成

每個上一層的DNS服務器所記錄的信息,其實只有其下一層的主機名而已
至於再下一層,則直接授權給下層的某部主機來管理

DNS使用的端口是:53
DNS查詢的時候,先是與udp查詢(較快),使用udp沒有辦法查詢到完整的信息時,就會再次的以tcp來重新查詢
啟動DNS的daemon是: named, 啟動DNS時會同時啟動tcp及udp的port 53 ,記得防火墻要放行tcp與udp port 53

DNS記錄信息重點有兩個:
一個是記錄服務器所在的NS(NameServer)標誌;
另一個則是記錄主機名對應的A(Address)標誌;

DNS數據庫的記錄:正解、反解、Zone的意義
從主機名查詢到IP的流程稱為:正解
從IP反解析到主機名的流程稱為:反解
不管是正解還是反解,每個領域的記錄就是一個區域(zone)

正解zone具有如下標誌:
SOA :就是開始驗證(Start of Authority)的縮寫
NS : 就是名稱服務器(NameServer)的縮寫,後面記錄的數據是DNS服務器的意思
A :就是地址(Address)的縮寫,後面記錄的是IP的對應(最重要)

反解需要向直屬上層ISP申請才行,需要上層來設定

反解的設定權以及DNS反解zone記錄的標誌:
除了必備的NS以及SOA之外;還有如下
PTR :就是指向(PoinTeR)的縮寫,後面記錄的數據就是反解到主機名

每部DNS都需要的正解zone : hint ,就是 . 的zone類型,稱為hint類型,是每個DNS服務器都知道的zone
需要正反解成對需求的大概僅有mail server 才需要

DNS數據庫的類型: hint ,master/slave 架構
master/slave :用來解決不同DNS服務器上面的數據同步問題

master/slave 的插敘優先權:先搶到先贏的原則
master/slave數據的同步化過程:
主從DNS的數據庫都會有一個代表該數據庫新舊的[序號],根據序號新舊來處理同步化

兩種方式:Master主動告知、Slave提出同步化要求
多久執行數據庫的同步與SOA的標誌有關
要加上主從DNS服務器架構時,需要兩部主機自己都能掌控才行

DNS客戶端的設定:
相關的幾個配置文件:
/etc/hosts :最早的hostname 對應IP 的檔案;
/etc/resolv.conf :是ISP的DNS服務器記錄檔案;
/etc/nsswitch.conf :這個檔案決定先要使用/etc/hosts還是/etc/resolv.conf的設定
預設是以/etc/hosts優先,查看/etc/nsswitch.conf檔案的hosts: 項目
其中: files 代表使用/etc/hosts , dns 代表使用/etc/resolv.conf

/etc/resolv.conf文件中可設定多個DNS地址備用,建議設2個即可,一個主,一個備用;
使用DHCP時,可在網卡配置文件內增加一行: PEERDNS=no ,放置DNS總是還原重置
建議關閉 CentOS的NetworkManager服務

DNS的正、反解查詢指令:host、nslookup、dig
host指令:
host [-a] FQDN [server]
host -l domain [server]
選項與參數:
-a : 代表列出該主機所有的相關信息,包括IP、TTL與除錯信息等等
-l :若後面接的那個domain設定允許allow-transfer 時,則列出該domain所管理的所有主機名對應數據;此參數需用在自己的DNS服務器上,否則會出現不允許查詢的提示信息
server :可有可無的參數,當要利用非 /etc/resolv.conf內的DNS主機來查詢主機名與IP的對應時,就可以利用這個參數
例如:host www.baidu.com 查出百度主機的IP
host -a www.baidu.com 查出百度主機的所有重要參數
host www.baidu.com 139.175.10.20 強制以指定的DNS來查詢百度主機

nslookup指令:
nslookup [FQDN] [server]
nslookup
選項與參數:
1、直接在nslookup加上待查詢的主機名或者是IP,[server]可有可無;
2、不加任何主機名或IP,那將進入nslookup的查詢功能(即nslookup的操作界面):
在nslookup的查詢功能中,輸入其他參數來進行特殊查詢,如:
set type=any :列出所有的信息[正解方面配置文件]
set type=mx :列出與mx相關的信息
例如:直接搜尋 www.baidu.com的IP信息
輸入 nslookup參數進入軟件界面:直接輸入 set type=ant|mx後,再輸入要查詢的IP或主機名,即可執行正解查詢,但是不能進行反解查詢,因為any或者是mx等等的標誌都是記錄在正解zone當中的緣故

dig指令(未來的主流):
dig [options] FQDN [@server]
選項與參數:
@server :如果不以/etc/resolv.conf的設定來作為DNS查詢,可在此填入其他的IP
options :相關的參數很多,主要有 +trace ,-t type 以及 -x 三者最常用
+trace :就是從 . 開始追蹤
--t type :查詢的數據type主要有mx,ns,soa等類型,
-x : 查詢的反解信息,非常重要的項目
例如:使用默認值查詢 www.baidu.com
dig www.baidu.com
查詢 www.baidu.com 的SOA相關信息
dig -t soa www.baidu.com
查詢 百度IP的反解信息
dig -x 61.135.169.125

查詢域名管理者相關信息:whois ;CentOS 6.X中whois指令是由jwhois 軟件提供的
whois [domainname] 可以查詢到當初註冊這個domain的用戶的相關信息
例如:whois baidu.com

DNS服務程序:BIND
安裝加上 bind-chroot 參數,表示將DNS鎖定在根目錄,防止系統被***後利用bind使壞
Cent0S 6.x 默認將bind 鎖在 /var/named/chroot 目錄中
主程序是bing,bind-chroot提供

BIND的默認路徑設定與chroot :
架設好BIND要處理的主要數據:
BIND本身的配置文件:主要規範主機的設定、zone file 的所在、權限的設定等;
正反解數據庫檔案(zone file):記錄主機名與IP的對應等;
BIND的配置文件為:/etc/named.conf
/etc/sysconfig/named :是否啟動chroot及額外的參數,就由這個檔案控制;
/var/named/ :數據庫檔案默認放置在這個位置
/var/run/named/ : named 這支程序執行時默認放置pid-file 在此目錄內

cache only DNS服務器的架設是為了系統安全,一般在防火墻上設cache only DNS服務器
實際設定cache-only DNS server :
不需要設定正反解的zone(只需要 . 的zone支持即可),只要設定named.conf主配置文件即可:
若設定具有forwarding的cache-only DNS服務器,則不會有zone(連 . 都沒有):
1、編輯主配置文件: /etc/named.conf
註意事項: 批註數據是放置在兩條斜線 // 後面接的數據;
每個段落之後都需要以分號 ; 來作為結尾;
小建議:修改任何軟件的配置文件前,最好都備份一下原始文件,重命名
vim /etc/named.conf
在options項目內設定,添加forwarding參數
forward only; //可暫時不設定
forwarders { //是重點
168.95.1.1; //先用這個DNS當上層
139.175.10.20; //再用這個DNS當上層,可設置多部上層DNS
};
options項目中:allow-transfer { none; };
是否允許來自slave DNS 對我的整個領域的數據進行傳送,這個設定值與master/slave DNS服務器之間的數據庫傳送有關。除非有slave DNS服務器,否則這裏不要開放,故設定為none
啟動name : systemctl start named
觀察端口:會啟動 UDP/TCP的 port 53 及一個tcp的port 953
其中 port 953 僅針對本機來監聽
port 953 端口是named的遠程控制功能提供的端口:遠程名稱解析服務控制功能(remote name daemon control,rndc),預設只有本機可以針對rndc來控制

/var/log/messsages 文件中的信息後面有接 [:數字]則代表某個檔案內的那行有問題
每次啟動DNS服務後,務必查看 /var/log/messages 檔案,因為即使port 53有啟動,但有可能DNS服務是錯誤的
目前默認的bind程序安裝時已經進行過chroot了
當DNS查詢時,若本身沒有數據庫檔案,則前往root(.)或forwarders服務器查詢;

正解文件資源記錄(Resource Record,RR)格式:
[domain] [ttl] IN [[RR type] [RR data]]
[待查數據] [暫存時間(秒)] IN [[資源類型] [資源內容]]
註意: [domain] 部分,盡量使用FQDN,就是主機名結尾加上一個小數點 .
ttl 就是time to live 的縮寫,即查詢後存在對方服務器快取中的時間,以秒為單位
ttl可由特定的參數來統一控管,同在RR的記錄格式中,ttl字段是可以忽略的

常見的正解文件RR記錄格式:
[domain] IN [[RR type] [RR data]]
主機名. IN A IPv4的IP地址
主機名. IN AAAA IPv6的IP地址
域名. IN NS 管理這個域名的服務器主機名字.
域名. IN SOA 管理這個域名的七個重要參數
域名. IN MX 順序數字 接受郵件的服務器主機名字
主機別名. IN CNAME 實際代表這個主機別名的主機名字.

A,AAAA :查詢IP的記錄
例如:dig [-t a] www.ksu.edu.tw 參數[-t a]可以不加
如果IP設定的是IPV6,查詢就得要使用aaaa類型才行

NS :查詢管理域名(zone)的服務器主機名,查詢結果經常出現 A 的標準,就是DNS服務器的IP
例如:dig -t ns ksu.edu.tw

SOA(Start Of Authority) :查詢管理域名的服務器管理信息
例如: dig -t soa ksu.edu.tw

SOA 主要是與域名有關,前面要寫域名,後面接七個參數:
1、Master DNS服務器主機名:主DNS是哪個
2、管理員的email : 由於@在數據庫檔案中有特別意義,這裏將郵件的@改寫成 . 了,例如:
[email protected] 改寫成 abusu.mail.ksu.edu.tw.
3、序號(Serial):代表這個數據庫檔案的新舊,序號越大代表越新;當修訂了數據庫內容時,要將這個數值放大才行;通常都是使用日期格式[YYYYMMDDNU]來記憶,例如:2010080369 表示2010/08/03 當天的第69次更新 ;序號不可大於2的32次方
4、更新頻率(Refresh):這個數值定義slave向master要求數據更新的時間,以秒為單位;
5、失敗重新嘗試時間(Retry): 此數值定義,slave對master聯機失敗時,過多久slave會重新嘗試聯機到master,以秒為單位;後續嘗試連接成功則恢復成Refresh的值
6、失效時間(Expire):如果slave向master聯機一直失敗,多長時間就不再繼續嘗試聯機,並且嘗試刪除這份下載的zone file信息,次數為 Expire值除Retry值,以秒為單位;不再嘗試聯機後,只能等待管理員手動處理
7、快取時間(Minumum TTL):如果這個數據庫zone file中,每筆RR記錄都沒有寫到TTL快取時間的話,那麽就以這個SOA的設定值為主;

如果DNS RR資料變更頻繁,上述數值可以設小一些;如果DND RR很穩定,為了節省帶寬,可以將Refresh設定的較大一些;
對這七個參數的限制:
Refresh >= Retry 2
Refresh + Retry < Expire
Expire >= Retry
10
Epire >= 7Days

CNAME : 設定某主機名的別名(alias)
只有一個主要主機名設定A,其他的標誌使用CNAME時,當IP更改時,只要修訂一個A的標誌,其他的CNAME就跟著改了

MX(Mail eXchanger郵件交換):查詢某領域名的郵件服務器主機名
領域設定一個MX,代表所有寄到這個領域的emai要送到後頭的email server主機名上
前面的數字代表,數字越小就越先手下郵件
例如:dig -t mx ksu.edu.tw
正解主機名的追蹤方式:
以 www.ksu.edu.tw. 來說: 從網域的概念看,越右邊出現的名稱代表網域越大,故
.(root) > tw > edu ,追蹤時,是由大範圍找到小範圍

反解文件記錄的RR數據:
為了配合 DNS從右邊向左邊查詢的方式:即由大範圍到小範圍的方式
反解的zone必須要將IP反過來寫,最後在結尾加上 .in-addr.arpa. 對的結尾字樣
例如:dig -x 120.114.100.101 顯示的反解結果是:
101.100.114.120. in-addr.arpa. 3600 IN PTR 120-114-100-101.ksu.edu.tw.
反解的標準最重要的就是 PTR;PTR後面接的就是主機名
網段的反寫可以省去主機位:
例如: 120.114.100.0/24網段的反解
100.114.120. in-addr .arpa.
反解的主機名盡量使用完整的FQDN,建議主機名的設定通通使用完整的FQDN

/var/named/named.ca 檔案記錄了全世界的13臺根DNS信息
設定 . (root)數據庫檔案是用到這個檔案,放置到正確目錄並改成自定義的檔名即可(cp)

正解數據庫檔案中的特殊符號:
1、所有設定數據一定要從行首開始,前面不可有空格符;若有空格符,則代表延續前一個domain的意思
2、@ 符號代表zone的意思,例如: 寫在 named.centos.vbird中, @代表centos.vbird.
如果寫在named.192.168.100檔案中,則@代表 100.168.192. in-addr.arpa. 的意思
3、 . 很重要,代表一個完整主機名(FQDN)而不是僅有hostname而已
4、; 代表批註符號,#也是批註符號,都能使用

參考 /var/named/* 內的檔案來設定正反解的數據庫文件
正解裏面有A ,反解裏面僅有PTR
slaves DNS服務器的的正反解文件不需要存在,是從master DNS獲取而來,獲取成功後會主動建立起來
網絡查詢時,master DNS 與 slave DNS的地位是一樣的,兩部服務器的相同domain的數據庫內容要完全一致才行;

$TTL :簡化每筆RR記錄的設定,將TTL挪到最前面統一設定
$ORIGIN : 這個設定值可以重新指定zone的定義,在預設的情況下,這個正反解數據庫檔案 中的zone是由named.conf 所指定的,就是zone參數的功能;通常這個設定值不會用到

DNS設定好後的測試:
修改/etc/resolv.conf 將自己配置的DNS服務器的IP放在第一行
主動更新正反解數據庫:加入RR標誌、更改zonefile的序號(Serial)、重新啟動named即可。

協同工作的DNS :Slave DNS 及子域授權設定
LAME Server 的問題:當我們的DNS服務器在向外面的DNS系統查詢某些正反解時,可能由於[對方]DNS主機的設定錯誤,導致無法解析到預期的正反解結果,這個時候就會發生所謂的lame server ,在系統日誌中 /var/log/messages 中會體現出來
請查看檔案: /usr/share/doc/bind-9.7.0/arm/Bv9ARM.ch06.html
解決 LAME Server 問題: 修改 /etc/named.conf 配置文件
加入這個參數:
logging {
category lame-servers { null; };
};
重新啟動bind即可

依據不同接口給予不同的DNS主機名:view功能的應用
要架設內外部不同DNS查詢功能,可以參考配置文件中 view 這個參數
view :就是讓不同來源的用戶,能夠取得自己的zone響應
1、編輯配置文件 vim /etc/named.conf
在options項目下增加:
acl intranet { 192.168.100.0/24; }; <==針對intranet給予的來源IP指定
acl internet { !192.168.100.0/24; any; }; <==加上!代表反向選擇的意思
view "lan" { <==lan只是一個名字,代表內網
match-clients { "intranet"; }; <==符合這個來源的才使用下面的zone
zone "." IN {
type hint;
file "named.ca";
};
zone "centos.vbird" IN {
type master;
file "named.centos.vbird";
allow-transfer { 192.168.100.10; };
};
zone "100.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.100";
allow-transfer { 192.168.100.10; };
};
};

view "wan" { <==wan只是一個名字,代表外網
match-clients { "internet"; }; <==代表的是外網的internet來源
zone "." IN {
type hint;
file "named.ca";
};
zone "centos.vbird" IN {
type master;
file "named.centos.vbird。inter"; <==檔名必須與原有的不同
};
//外網因為沒有使用到內網的IP,所以IP反解部分可以不寫於此
};

2、修改named.centos.vbird.inter 的數據:
cd /var/named
cp -a named.centos.vbird named.centos.vbird.inter
vim named.centos.vbird.inter

利用RNDC 指令管理DNS服務器:
登錄文件/var/log/messages 中的:command channel listening on 127.0.0.1#953 就代表有rndc服務
rndc :可以讓你管理自己的DNS服務器,包括可以檢查已經存在DNS快取當中的資料、重新更新某個zone而不需要重新啟動整個DNS,以及檢查DNS的狀態與統計資料等等

rndc的控管:經過rndc的設定來建立一支密鑰(rndc key),並將這支密鑰相關的信息寫入你的named.conf配置文件中,重新啟動DNS後,DNS就可以藉由rndc指令來管理了

新版distribution以及主動的建立好 rndc key 了,如果登錄檔中提示如下錯誤:
couldn‘t add command channel 127.0.0.1#953 :not found
就表示DNS的rndc key 沒有設定好,手動設定:
1、建立rndc key 的相關數據:
rndc-confgen
#Start of rndc.conf <==底下沒有#的第一部分復制到/etc/rndc.conf
#End of rndc.conf 下的key與controls部分,復制到named.conf 且解開 #
2、建立rndc.key檔案:
vim /etc/rndc.key
在這個檔案中,將原先的數據全部刪除,並將#Start of rndc.conf底下的參數粘貼上
3、修改named.conf
vim /etc/named.conf
在某個不被影響的角落粘貼上#End of rndc.conf底下的參數
4、啟動DNS,執行 rndc 指令,直接輸入rndc即可查詢該指令的用法
例如:將目前DNS服務器的狀態顯示出來
rndc status
將目前系統的DNS統計數據記錄下來
rndc stats ;此時,預設會在 /var/named/data/ 內產生新的檔案,類似 /var/named/data/named_stats.txt
rndc dumpdb ; 與stats類似,會將cache 的數據放置成為一個檔案,類似/var/named/data/cache_dump.db

出現rndc :connection to remote host closed 錯誤,就表示/etc/rndc.key與/etc/rndc.conf內密鑰的編碼不同所致;
用rndc 指令,就不需要每次都重新啟動named

架設動態DNS服務器(Dynamic DNS,DDNS):讓自己成為ISP
1、DDNS Server端的設定:
建立密鑰: dnssec-keygen -a [算法] -b [密碼長度] -n [類型] 名稱
選項與參數:
-a :後面接的[type]為演算方式的意思,主要有RSAMD5、RSA、DSA、DH與HMAC-MD5等,建議你可以使用常見的HMAC-MD5來演算密碼;
-b : 你的密碼長度是多少?通常給予512位的HMAC-MD5;
-n :後面接的則是客戶端能夠更新的類型,主要有底下兩種,建議給HOST即可:
ZONE : 客戶端可以更新任何標誌及整個ZONE ;
HOST : 客戶端僅可以針對他的主機名來更新
例如:1、cd /etc/named
2、dnssec-keygen -a HMAC-MD5 -b 512 -n HOST web
3、查看生成的公鑰(沒有以private結尾的): cat Kweb.+157+36124.key
4、復制數字後面的 密碼長度 字段到 /etc/named.conf 中,將私鑰傳給DNS主機
5、vim /etc/named.conf
//在任意地方加上Key的相關密碼信息
key "web" {
algorithm hmac-md5;
secret "生成的公鑰密碼長度的部分"

     };
     //將原本的zone加入底下這一段宣示
              zone  "centos.vbird" IN {
                    type master;
                    file  "named.centos.vbird";
                    allow-transfer { 192.168.100.10; };
                   update-policy {
                   grant web name web.centos.vbird.  A;
            ];
       };

6、 chmod g+w /var/named
chown named /var/named/named.centos.vbird
/etc/init.d/named restart
setsebool -P named_write_master_zones=1
grant 後面接的就是 key 的名稱,語法是: grant [key_name] name [hostname] 標簽
如此:DDNS主機端就設定好了

Client 端的更新:
1、由Server 端取得剛剛建立的兩個密鑰檔案,通過SSH的sftp傳送到客戶端的某個目錄
例如:cd /usr/local/ddns
nsupdate -k 剛才在Server端創建的公鑰(不帶.private後綴)

server DDNS的IP
update delete web.centos.vbird <==刪除原有的
update add web.centos.vbird 600 A 192.168.100.200 <==更新到最新的
send
在此按下 ctrl+D 即可

總結:正解的記(record)主要有:SOA,A,MX,NS,CNAME,TXT及HINFO等
反解的記錄主要有:SOA,PTR,NS等;
DNS查詢的指令主要有:host,nslookup,dig,whois等等
/etc/hosts裏的格式: IP 主機名 主機別名1 主機別名2 主機別名3 ..... ;裏面的默認行不要更改和刪除

每日一記:DNS服務器