推薦閱讀
BIND 官方配置項(xiàng)文檔
How To Configure BIND as a Private Network DNS Server on Ubuntu 14.04
BIND9 管理員參考手冊(cè)
BIND 相關(guān)資料
段海新的論文
DNS 簡(jiǎn)介
DNS 是 Domain Name System(域名系統(tǒng))的簡(jiǎn)稱瓣颅,DNS 是一個(gè)分層的分布式命名系統(tǒng)辨赐,用于連接到互聯(lián)網(wǎng)或?qū)S镁W(wǎng)絡(luò)的計(jì)算機(jī)锥累,服務(wù)或其他資源。它將各種信息與分配給每個(gè)參與實(shí)體的域名關(guān)聯(lián)起來(lái)。
簡(jiǎn)單來(lái)說(shuō)其最大的功能就是將域名翻譯成 IP 地址,例如實(shí)驗(yàn)樓的 IP 地址就是一串毫無(wú)規(guī)則的數(shù)字欧募,非常不好記憶,想得起實(shí)驗(yàn)樓但是想不起它的 IP 地址仆抵。但是域名與站點(diǎn)的意義是相關(guān)聯(lián)的跟继,便于記憶。想起實(shí)驗(yàn)樓镣丑,就能想起它的域名是 www.shiyanlou.com舔糖。
舉一個(gè)不恰當(dāng)?shù)睦樱伺c人之間通電話撥電話的時(shí)候莺匠,都是通過(guò)名字查找電話本中的電話號(hào)碼金吗,然后直接撥通,電話號(hào)碼是無(wú)邏輯的一串?dāng)?shù)字趣竣,名字是有意義的摇庙。
人的姓名是由姓氏與名字構(gòu)成的,同樣域名也是由多個(gè)部分構(gòu)成的遥缕。構(gòu)成域名的每個(gè)部分稱為一個(gè)區(qū)域(zone)卫袒,主要是這樣分級(jí)的:主機(jī)名.二級(jí)域名.頂級(jí)域名.
不同域直接通過(guò) . 來(lái)分割,域名與國(guó)外人命名一般单匣,名在前夕凝,姓在后宝穗,越是大的域越在后面。也就是說(shuō)靠前的是后面的子集码秉,最右邊的是根域可以忽略不寫(因?yàn)槠錈o(wú)名逮矛,nameless),在頂級(jí)域名的點(diǎn)后面转砖,根域緊接著的就是頂級(jí)域名(top-level domains)须鼎,緊跟著的就是二級(jí)域名(second-level)混狠,就這樣依次類推耍属,在 DNS 的配置時(shí)我們需要留著頂級(jí)域名后面的 .。
在平時(shí)使用的時(shí)候因?yàn)闉g覽器會(huì)幫助我們自動(dòng)填充倔喂,所以我們可以忽略不寫礁竞,例如 www.shiyanlou.com 不用寫成 www.shiyanlou.com.。
主機(jī)名:一般代表公司或者組織的主機(jī)名或者某個(gè)服務(wù)名杉辙,一般在最左邊模捂。例如 www.shiyanlou.com 中 www 是三級(jí)域名也是主機(jī)名了,一般這樣的比較常見(jiàn)
二級(jí)域名(second-level domains):一般代表公司或者組織的名字蜘矢。例如 www.shiyanlou.com 中的 shiyanlou狂男,例如 www.baidu.com 中的 baidu
頂級(jí)域名(top-level domains,TLDS):一般代表的是該公司或者組織在社會(huì)中的某個(gè)領(lǐng)域品腹,或者所說(shuō)的國(guó)家岖食。在頂級(jí)域名中包含兩種:
通用頂級(jí)域名(generic top-level domains,gTLDs):通用的頂級(jí)域名代表的便是在社會(huì)中的某個(gè)領(lǐng)域舞吭,例如 com 表示的是商業(yè)泡垃,edu 表示的教育機(jī)構(gòu),gov 表示的政府機(jī)構(gòu)羡鸥,org 表示的組織機(jī)構(gòu)(例如開(kāi)源組織什么的)
國(guó)家代碼頂級(jí)域名(country code top-level domains蔑穴,ccTLDs):國(guó)家代碼頂級(jí)域名顯然就是代表所屬國(guó)家了,例如 cn 代表的是中國(guó)惧浴,jp 代表的是日本存和,ca 代表的是加拿大等等
當(dāng)然 gTDLS 與 ccTLDs 不是說(shuō)只能用一個(gè),例如南開(kāi)大學(xué)的域名 www.nankai.edu.cn衷旅。
DNS 解析
上一節(jié)中我們了解到了域名是什么捐腿,域名的命名規(guī)則,接下來(lái)我們將簡(jiǎn)單地了解一下 DNS 是如何將一個(gè)域名解析成 IP 地址柿顶,使得我們的瀏覽器或者其他工具能夠訪問(wèn)到我們需要的服務(wù)茄袖。
我們通過(guò)下圖來(lái)了解整個(gè)過(guò)程:
瀏覽器首先查看其自己的解析記錄緩存:
若是緩存記錄中存在域名所對(duì)應(yīng)的 IP 地址,則直接使用該 IP 地址
若是緩存記錄中不存在該域名的相關(guān)記錄則進(jìn)入下一步
查找系統(tǒng)的 DNS 解析緩存嘁锯,因?yàn)?DNS 每次查詢的記錄都會(huì)記錄在緩存在中绞佩,以免再次查詢
在 Windows 中系統(tǒng)啟動(dòng)時(shí)便會(huì)加載位于 C:\windows\system32\drivers\etc\ 目錄中的 hosts 文件于 DNS 緩存中寺鸥,所以系統(tǒng)在查看 DNS 解析緩存時(shí)也等同于在查看 hosts 文件中的記錄(在 windows 中并不會(huì)直接查詢 hosts 文件,而是通過(guò)緩存的方式間接查看)
Linux 中的 hosts 文件位于 /etc/hosts品山,其與 Windows 中使用 hosts 類似胆建,但具體實(shí)現(xiàn)方式不同
注意:hosts 文件是 DNS 的前身,早期電腦的數(shù)量還很小肘交,一個(gè)文件列表中的域名與 IP 的對(duì)應(yīng)足以應(yīng)付笆载,只是到了后期不便更新維護(hù)以及數(shù)量大大增加,所以誕生了 DNS 分布式的數(shù)據(jù)庫(kù)涯呻。
若是在系統(tǒng)的 DNS 解析緩存中也未能找到相關(guān)的記錄凉驻,此時(shí)便會(huì)去請(qǐng)求系統(tǒng)中設(shè)置的 DNS 服務(wù)器(系統(tǒng)中設(shè)置的 DNS 服務(wù)器可能是路由器分配的默認(rèn),也可能是自己設(shè)置的權(quán)威機(jī)構(gòu)的复罐,也可以能運(yùn)營(yíng)商自己的)
部分路由器會(huì)有 DNS 解析的緩存涝登,此時(shí)會(huì)在路由器中查詢
若還是沒(méi)有便會(huì)將查詢的請(qǐng)求交給 ISP 的 DNS 緩存服務(wù)器
依舊沒(méi)有查詢到相關(guān)的記錄便會(huì)開(kāi)始遞歸搜索
由本地 DNS 服務(wù)器或者你配置的服務(wù)器將相關(guān)的請(qǐng)求轉(zhuǎn)發(fā)給根域服務(wù)器
根域服務(wù)器查詢相關(guān)的頂級(jí)域服務(wù)器,然后將請(qǐng)求轉(zhuǎn)發(fā)給相關(guān)的頂級(jí)域服務(wù)器
頂級(jí)域服務(wù)器查詢相關(guān)的二級(jí)域服務(wù)器效诅,然后將請(qǐng)求轉(zhuǎn)發(fā)相關(guān)的二級(jí)域服務(wù)器
最后將查詢結(jié)果返回給主機(jī)
若還是沒(méi)有相關(guān)記錄則訪問(wèn)失敗
注意:大部分的請(qǐng)求基本在運(yùn)營(yíng)商處可以得到滿足胀滚,在中國(guó)沒(méi)有 IPv4 的根域,只有鏡像乱投。
DNS 解析優(yōu)先級(jí)
在上文中我們提到早期沒(méi)有 DNS 服務(wù)器存在的時(shí)候使用的是 hosts 文件咽笼,到后期才出現(xiàn)了 DNS 服務(wù)器,新的服務(wù)方式提出并不代表老得服務(wù)方式被徹底替換戚炫,hosts 文件的方式因?yàn)榭焖俳P獭⑿∏啥槐A袅讼聛?lái)。
在 Linux 中我們可以通過(guò) /etc/nsswitch.conf 配置文件修改 DNS 查詢的順序双肤。
通過(guò) sudo vim /etc/nsswitch.conf 打開(kāi)該配置文件施掏,往下查看就可以看到這樣的配置:
#hosts: db files nisplus nis dns
hosts: files dns myhostname
這里的 files 代表的就是 /etc/hosts 文件,dns 代表的是系統(tǒng)配置的 DNS 服務(wù)器地址茅糜。所以在 Linux 中默認(rèn)是先查詢 hosts 文件中的記錄其监,然后再請(qǐng)求 DNS 服務(wù)器。
hosts 文件
因?yàn)?hosts 文件在本地相比于請(qǐng)求 DNS 服務(wù)器的方式快速限匣,所以得到保留抖苦。
我們通常會(huì)在 hosts 文件中存放常用的 DNS 記錄與開(kāi)發(fā)中測(cè)試使用的服務(wù)器記錄。
hosts 文件的記錄格式非常的簡(jiǎn)單:
IP 地址 域名或者 hostname
例如我們當(dāng)前機(jī)器中的 hosts 文件 cat /etc/hosts:
第二行中 ::1 是 IPv6 的本地地址表示方式米死,類似于 IPv4 中 127.0.0.1 后面緊跟著的就是主機(jī)名锌历。
后續(xù)的記錄中記錄著內(nèi)網(wǎng)中的地址與主機(jī)名的映射關(guān)系,我們可以將測(cè)試服務(wù)器的 IP 地址與測(cè)試域名映射關(guān)系存放于此峦筒,這種記錄是不會(huì)放在公共 DNS 服務(wù)器中究西,一般存放于本地 DNS 或者 hosts 中。
DNS 服務(wù)器配置文件
系統(tǒng)設(shè)定的 DNS 服務(wù)器配置文件位于 /etc/resolv.conf:
nameserver 后面對(duì)應(yīng)的便是內(nèi)網(wǎng)中的 DNS 服務(wù)器地址物喷,一般會(huì)配置兩個(gè)卤材,防止一個(gè)不可用而導(dǎo)致無(wú)法域名解析遮斥。
DNS 搭建
切的理論都是為了幫助我們更好的理解軟件中的各項(xiàng)配置,以及在出問(wèn)題時(shí)的進(jìn)行調(diào)試扇丛,但是僅僅只有理論是不夠的术吗,我們需要通過(guò) DNS 的搭建來(lái)進(jìn)一步的了解。
DNS 的選用
DNS 的使用方案有許多帆精,常見(jiàn)的開(kāi)源軟件有:
BIND:全名為 Berkeley Internet Name Domain较屿,是早在 1980 年左右有 Berkeley 大學(xué)公開(kāi)出來(lái)的 DNS 服務(wù)實(shí)現(xiàn),也是使用最為廣泛的方案卓练。后由 ISC 基于 BIND 重寫發(fā)布 BIND9
PowerDNS:PowerDNS 由 C++ 實(shí)現(xiàn)于 1990 年末隘蝎,起源一個(gè)商業(yè)軟件于 2002 年開(kāi)源,相對(duì)于 BIND 在數(shù)據(jù)庫(kù)選用上與集群上功能更多更靈活
CoreDNS:由 SkyDNS 進(jìn)化而來(lái)襟企,主要作為一種可插拔的中間件
DNSpod-sr:一款由國(guó)內(nèi)服務(wù)商開(kāi)源的一套 DNS 的實(shí)現(xiàn)
此次我們將選用最為成熟嘱么、擁有良好 License 的 BIND9 來(lái)搭建屬于我們自己的 DNS 服務(wù)器。
DNS 的安裝
安裝和配置 BIND
sudo apt-get update # update 可能會(huì)報(bào)兩個(gè)警告顽悼,可以忽略
sudo apt-get install -y bind9 bind9utils bind9-doc
激活 IPv4 Mode
在繼續(xù)配置 DNS 服務(wù)器之前曼振,先修改一下 bind9 service 參數(shù)文件,設(shè)置 BIND 為 IPv4 Mode:
sudo vi /etc/default/bind9
把 "-4" 添加到 OPTIONS 變量表蝙,如下所示:
OPTIONS="-4 -u bind"
確定主 DNS 服務(wù)器
一般都會(huì)設(shè)置兩個(gè) DNS 服務(wù)器拴测,一個(gè)主要的乓旗,一個(gè)備用的府蛇,這次的實(shí)驗(yàn)受實(shí)驗(yàn)環(huán)境的限制,我們只做主服務(wù)器屿愚。 首先查看本機(jī)的 ip 地址:
ifconfig -a
我的 ip 地址是192.168.42.5汇跨,每個(gè)人的是不一樣的。然后獲取幾個(gè)有效的內(nèi)網(wǎng) ip 妆距,可以試著去 ping 一下穷遂,我找的內(nèi)網(wǎng) ip 是 192.168.42.1。
ping -c 3 192.168.42.1
DNS 服務(wù)器的配置
BIND 的配置由多個(gè)文件組成娱据,這些文件包含在主配置文件中named.conf蚪黑。這些文件名以“named”開(kāi)頭,因?yàn)檫@是 BIND 運(yùn)行的進(jìn)程的名稱中剩。我們將開(kāi)始配置選項(xiàng)文件忌穿。
cat /etc/bind/named.conf
有關(guān)各配置詳細(xì)解釋可參考 BIND 官方配置項(xiàng)文檔
配置選項(xiàng)文件
打開(kāi)named.conf.options文件進(jìn)行編輯:
sudo vi /etc/bind/named.conf.options
在現(xiàn)有的文檔之上,添加一個(gè)新的 ACL 塊并命名 "trusted"结啼,我們把之前找到的內(nèi)網(wǎng) ip 添加到可信客戶端列表里掠剑,并稱為 ns1 ,只允許它們查詢 DNS 服務(wù)器郊愧,提高安全性朴译。
acl "trusted" {
192.168.42.5; # ns1 信任的名單
};
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
recursion yes; # enables resursive queries
allow-recursion { trusted; }; # allows recursive queries from "trusted" clients
listen-on { 192.168.42.5; }; # ns1 private IP address - listen on private network only
allow-transfer { none; }; # disable zone transfers by default
forwarders {
114.114.114.114; # 當(dāng)本地的 dns 服務(wù)器中找不到記錄時(shí)向上查詢
};
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
注意 ip 地址根據(jù)你自己的 ip 地址填寫井佑。
按 esc ,然后輸入 :wq 保存并退出 named.conf.options眠寿,通過(guò)上面的設(shè)置只有信任的主機(jī)才能查詢 DNS 服務(wù)器躬翁,其他主機(jī)不能。
上述配置詳解
從配置文件中我們可以看出配置文件的主要格式是:
聲明 {
配置參數(shù)澜公;
配置參數(shù) {
子配置項(xiàng)姆另;
子配置項(xiàng);
}
.......;
.......;
}
通過(guò)系統(tǒng)提供的配置文件模版來(lái)了解常用的配置參數(shù):
聲明的參數(shù)主要有這樣的一些配置:
options 的配置
在 options 中主要配置了一些全局的參數(shù)坟乾,例如監(jiān)聽(tīng)的端口迹辐、服務(wù)的目錄、保存文件的名字與路徑等等甚侣,在默認(rèn)的配置文件中主要分三個(gè)部分:
1.named 服務(wù)運(yùn)行上的配置
2.控制命令 rndc 運(yùn)行后產(chǎn)生文件的目錄配置:
3.named 服務(wù)運(yùn)行的安全問(wèn)題:
注意:DNSSEC 即 DNS Security Extension明吩,是 DNS 在安全上做的擴(kuò)展,以應(yīng)對(duì) DNS 欺騙攻擊殷费、緩存污染等一些現(xiàn)有的問(wèn)題印荔,其原理與產(chǎn)生原因推薦 段海新的論文,講解的非常詳細(xì)详羡。
logging 的配置
主要配置日志的日志類別與輸出通道仍律,日志類別能夠幫我們過(guò)濾出想要的部分日志,通道指定我們?nèi)罩据敵龅奈恢檬的ǔ7謩e使用 category水泉、channel。
在 channel 中:
file:定義錯(cuò)誤日志輸出的文件名與目錄
serverity:定義日志的級(jí)別
zone 的配置
域的定義窒盐,配置對(duì)于請(qǐng)求不同域的處理類型草则。
除此之外還有一些常用的聲明配置:
從上述的解釋中我們大概了解了默認(rèn)配置模板中各配置項(xiàng)的意思,每種聲明中都有非常多的子配置項(xiàng)蟹漓,可以非常靈活的配置炕横,我們不會(huì)注意講解其意思與部分高級(jí)用法,有興趣的同學(xué)可以查看推薦閱讀中的 BIND 官方配置項(xiàng)文檔
配置本地文件
打開(kāi) named.conf.local并編輯:
sudo vi /etc/bind/named.conf.local
我們修改配置文件葡粒,完成后如下份殿,在配置文件中添加了 正向解析和反向解析 的文件在系統(tǒng)中的位置,簡(jiǎn)單的說(shuō)嗽交,正向解析就是根據(jù)域名查 ip卿嘲,反向就是根據(jù) ip 查域名。
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "shiyanlou.example.com" {
type master;
file "/etc/bind/zones/db.shiyanlou.example.com"; # zone file path
};
zone "168.192.in-addr.arpa" {
type master;
file "/etc/bind/zones/db.192.168";
};
注意轮纫,反向區(qū)域名稱以 168.192 開(kāi)頭腔寡,即 192.168 反轉(zhuǎn)。
上述配置詳解
在 zone 中主要的配置項(xiàng)有:
其中 type 的四個(gè)值的意義是:
hint:當(dāng)本地找不到解析時(shí)可查詢根域名服務(wù)器
master:設(shè)置為主域名服務(wù)器
slave:設(shè)置為次域名服務(wù)器
forward:定義轉(zhuǎn)發(fā)的域名服務(wù)器
添加完成后掌唾,保存退出放前。這樣我們?cè)?BIND 我們就有了指定的文件忿磅,接下來(lái)我們就編寫正向解析和反向解析的域文件。
創(chuàng)建正向解析域文件
正向解析:通過(guò)主機(jī)名獲取其對(duì)應(yīng)的廣域網(wǎng) IP 地址凭语,我們以 "host1.shiyanlou.example.com" 為例來(lái)編寫來(lái)這個(gè)文件葱她。
sudo mkdir /etc/bind/zones
我們根據(jù)現(xiàn)有的域文件db.local,來(lái)復(fù)制一份作為db.shiyanlou.example.com 編輯這個(gè)正向解析文件:
sudo cp /etc/bind/db.local /etc/bind/zones/db.shiyanlou.example.com
sudo vi /etc/bind/zones/db.shiyanlou.example.com
我們?cè)谠瓉?lái)文件的基礎(chǔ)上似扔,修改了很多吨些,具體如下:
;
; BIND data file for local loopback interface
$TTL 604800
@ IN SOA ns1.shiyanlou.example.com. admin.shiyanlou.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
;
; name servers - NS records
IN NS ns1.shiyanlou.example.com.
; name servers - A records
ns1.shiyanlou.example.com. IN A 192.168.42.5
host1.shiyanlou.example.com. IN A 192.168.42.1
tips:如果直接粘貼到環(huán)境會(huì)出現(xiàn)亂序,粘貼前請(qǐng)先設(shè)置:set paste后再進(jìn)行粘貼炒辉。
注意上面加點(diǎn)的地方不要漏寫
ip 地址根據(jù)自己的實(shí)際地址填寫豪墅。
創(chuàng)建反向解析域文件
反向域名解析與通常的正向域名解析相反,提供 IP 地址到域名的對(duì)應(yīng)黔寇。 IP 反向解析主要應(yīng)用到郵件服務(wù)器中來(lái)阻攔垃圾郵件偶器,特別是在國(guó)外。多數(shù)垃圾郵件發(fā)送者使用動(dòng)態(tài)分配或者沒(méi)有注冊(cè)域名的 IP 地址來(lái)發(fā)送垃圾郵件缝裤,以逃避追蹤屏轰,使用了域名反向解析后,就可以大大降低垃圾郵件的數(shù)量憋飞。
在之前的 named.conf.local 的文件里我們寫了一個(gè)反向域名解析的文件名db.192.168霎苗,現(xiàn)在來(lái)編寫它:
sudo cp /etc/bind/db.127 /etc/bind/zones/db.192.168
sudo vi /etc/bind/zones/db.192.168
文件的具體內(nèi)容如下:
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA shiyanlou.example.com. admin.shiyanlou.example.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; name servers
IN NS ns1.shiyanlou.example.com.
; PTR Records
5.42 IN PTR ns1.shiyanlou.example.com. ; 192.168.42.5
1.42 IN PTR host1.shiyanlou.example.com. ; 192.168.42.1
tips:如果直接粘貼到環(huán)境會(huì)出現(xiàn)亂序,粘貼前請(qǐng)先設(shè)置:set paste后再進(jìn)行粘貼榛做。
ip 地址根據(jù)自己的實(shí)際地址填寫唁盏。
PTR 首位根據(jù)后面的 ip 反轉(zhuǎn)。
正反向解析域文件詳解
在 zone file 中瘤睹,每一條映射值為一條記錄升敲,每條記錄都會(huì)有他的記錄類型答倡,針對(duì)不同的記錄會(huì)有不同的格式轰传,首先我們來(lái)簡(jiǎn)單了解一下記錄類型的常用種類:
1.A 記錄主要便是域名與 IP 地址這兩個(gè)信息,所以格式為:
hostname IN A IP-address
# 該記錄表示訪問(wèn) www.test-shiyanlou.com 解析為 10.29.113.73
www IN A 10.29.113.73
# 該記錄表示訪問(wèn) test.test-shiyanlou.com 解析為 10.29.113.73
test IN A 10.29.113.73
# 等同于上一條記錄
test.test-shiyanlou.com. IN A 10.29.113.73
從上述的例子中我們便可看出在寫 hostname 是可以省略區(qū)域名 test-shiyanlou.com. 的部分瘪撇,這是因?yàn)榕渲梦募型ㄟ^(guò) zone 去聲明這個(gè)域获茬,所以在其他記錄中也是同樣的效果。
2.NS 記錄指出該域名的 NS 服務(wù)器倔既,其格式為:
IN NS nameserver-name
例如:
IN NS dns1
# 等同于
test-shiyanlou.com. IN NS dns1.test-shiyanlou.com.
# 但若是這樣指定必須指出 dns1 的 A 記錄
dns1 IN A 10.29.113.73
3.MX 記錄為 Mail Exchange 的縮寫恕曲,也就是郵件記錄:
注意:
郵件記錄的域名必須是使用 fully qualified domain name(FQDN),也就是完整的域名渤涌,不能像之前那般省略佩谣。
郵件增加了一個(gè) preference-value 值來(lái)指定該記錄的優(yōu)先級(jí)。
IN MX preference-value email-server-name
# 例如優(yōu)先級(jí)為 5 的 mail.test-shiyanlou.com.
test-shiyanlou.com. IN MX 5 mail.test-shiyanlou.com.
# 當(dāng)然該記錄的相關(guān) A 記錄必須存在
mail IN A 10.29.113.73
4.PTR 記錄為反向解析記錄实蓬,將 IP 翻譯成域名:
# 格式為
last-IP-digit IN PTR FQDN-of-system
# 例如在 113.29.10.zone 配置文件中茸俭,named 中我們聲明了吊履,所以可省略 113.29.10-in-addr.arpa
73 IN PTR localhost.
# 完整表示為
73.113.29.10-in-addr.arpa. IN PTR localhost.
因?yàn)槲覀兇颂幨桥渲玫男【W(wǎng)段,只用配置一位调鬓,若是面對(duì)大網(wǎng)段則寫兩位艇炎、三位即可。
5.CNAME 為機(jī)器的別名
# 其格式為
alias-name IN CNAME real-name
# 例如
server1 IN A 10.0.1.5
www IN CNAME server1
在上述例子中表示 server1.test-shiyanlou.com 將會(huì)被解析到 10.0.1.5腾窝,而 www.test-shiyanlou.com 會(huì)被解析到 server1.test-shiyanlou.com 也就是 10.0.1.5缀踪。
6.SOA 記錄表示的是域管理服務(wù)器
除了一些命令放在 zone file 的開(kāi)頭,所有記錄的第一條記錄應(yīng)該為 SOA 記錄虹脯,它的格式如下:
@ IN SOA primary-name-server hostmaster-email (
serial-number
time-to-refresh
time-to-retry
time-to-expire
minimum-TTL )
其中 @ 表示的是本機(jī)意思驴娃,等同于 ORIGIN 代表的值為我們?cè)诼暶髦兴远x域的名字循集。
例如在 test-shiyanlou.zone 文件中其 ORIGIN 為 113.29.10.in-addr.arpa.。
當(dāng)然我們可以在配置文件的開(kāi)頭指定該值:
$ORIGIN test-shiyanlou.com.
其中 primary-name-server 表示的是主要的域名服務(wù)器的域名暇榴,例如 dns.test-shiyanlou.com.厚棵。
其中 hostmaster-email 表示的是建立服務(wù)器的負(fù)責(zé)人郵件地址,因?yàn)?@ 在此處有特殊意義所以不能直接使用蔼紧,需要用 . 代替婆硬,例如 shiyanlou@qq.com 需要改成 shiyanlou.qq.com。
其中 serial-number 是指定的一個(gè)同步序列號(hào)奸例,每當(dāng) zone file 變化的時(shí)候該值便會(huì)遞增彬犯,slave 便知道該同步,該重新加載 zone file 了查吊。
其中 time-to-refresh 是指 slave 多久會(huì)主動(dòng)檢查 serial 的值谐区,以便更新 zone file。
其中 time-to-retry 是指 slave 若是連接 master 失敗逻卖,多久之后會(huì)再次嘗試宋列。
其中 time-to-expire 是指 slave 若是一直連接 master 失敗,多久之后會(huì)放棄评也。
其中 minimum-TTL 是指定最小清除 cache 的時(shí)間炼杖。
注意:時(shí)間的單位都是秒
檢驗(yàn) BIND 配置文件語(yǔ)法是否錯(cuò)誤
運(yùn)行下面的命令檢驗(yàn) named.conf* 有沒(méi)有語(yǔ)法錯(cuò)誤:
sudo named-checkconf
如果沒(méi)有報(bào)錯(cuò)則編寫是正確的,如果報(bào)錯(cuò)了盗迟,那就根據(jù)報(bào)的錯(cuò)誤去修改文件坤邪。運(yùn)行下面的命令查看正向解析和反向解析文件是否正確:
sudo named-checkzone shiyanlou.example.com /etc/bind/zones/db.shiyanlou.example.com
sudo named-checkzone 168.192.in-addr.arpa /etc/bind/zones/db.192.168
做到這里,離成功已經(jīng)不遠(yuǎn)了罚缕,我們重啟 BIND service:
sudo service bind9 restart
DNS 客戶端配置
打開(kāi)文件resolv.conf:
sudo vi /etc/resolv.conf
編輯為:
options timeout:1 attempts:1 rotate
nameserver 192.168.42.5 # 這里也要根據(jù)自己的實(shí)際 IP 配置
好了艇纺,接下來(lái)可以去檢驗(yàn) DNS 服務(wù)器是否可以正常運(yùn)行了。
排錯(cuò)以及驗(yàn)證
排錯(cuò)
使用 named -g 可以讓 dns 服務(wù)器在前臺(tái)運(yùn)行,并輸出所有信息到屏幕黔衡,在里面可以看到錯(cuò)誤信息消约。
驗(yàn)證
測(cè)試我們的 DNS 服務(wù)器是否可以正常運(yùn)行,使用 nslookup 命令來(lái)查詢你的服務(wù)器员帮,(若使用其他的客戶端或粮, ip 地址需要加入到 "trusted" ACL 里面)。先測(cè)試正向解析捞高,通過(guò)輸入網(wǎng)址找到 ip 地址氯材,運(yùn)行下面的代碼:
nslookup host1.shiyanlou.example.com
再測(cè)試反向解析,通過(guò) ip 地址找到它的網(wǎng)址硝岗。如果你的反向域名文件寫錯(cuò)了氢哮,或者放置的位置不對(duì),就會(huì)報(bào)錯(cuò)型檀,可以在上文重新看看操作
nslookup 192.168.42.1
好了冗尤,到此為止,一個(gè)簡(jiǎn)單的 DNS 服務(wù)器就搭建好了胀溺,你可以試試添加更多的 ip 地址裂七,快來(lái)試試自己的 DNS 服務(wù)器吧!
參考資料
How To Configure BIND as a Private Network DNS Server on Ubuntu 14.04
BIND9 管理員參考手冊(cè)
鳥哥的 Linux 私房菜
BIND 相關(guān)資料