DNS是Domain Name System 域名系統的簡稱,DNS可以提供爲計算機,服務以及接入互聯網或者局域網的任何資源提供分層的名稱解析功能。DNS提供很多功能,但是最主要的是進行域名與IP地址的之間的解析。域名是分級的,一般分爲:主機名.三級域名.二級域名.頂級域名.。注意,最後有一個點代表的是根域,是所有的域名的起點。
一、安裝DNS軟件
centos7下的DNS軟件主要是伯克利加州大學研發的BIND(Berkeley Internet Name)。bind-utils軟件包提供DNS查詢工具,如dig,host,nslookup等。
yum -y install bind yum -y install bind-utils
配置文件解析
BIND配置文件主要分爲主配置文件與域數據記錄文件,主配置文件包括很多使用花括號的引起來的定義語句,在定義語句中可以設置很多個選項,主配置文件的核心功能就是定義域,以及告知計算機到哪裏可以找到響應域的數據記文件。而域數據記錄文件則存儲具體的域名與IP之間的解析記錄,DNS通過讀域數據記錄文件來解答客戶端的查詢請求。
主配置文件一般爲/etc/named.conf
典型的主配置文件語法如下
statement_name { option1; option2; ... ...; };
以下爲/etc/named.conf文件中常用的定義語句
acl 語句允許預定義一組主機,從而控制允許還是拒絕他人訪問域名服務器,BIND預定義了一些主機訪問控制列表,其中any可以匹配任意IP地址,localhost可以·匹配·本地系統上所有的IP地址,localnets匹配本地系統所鏈接的任意網絡,none將不匹配任何ip地址。
以下爲定義的acl控制列表,一個爲黑名單,一個爲白名單。
acl black { 172.16.0.0/16; 192.168.9.12; }; acl white { 10.0.0.0/8; 192.168.0.0/24; } options { allow-query { white ; }; blackhole { black; }; };
options語句用來定義全局配置選項,在全局配置中至少要定義一個工作路徑,默認工作路徑爲var/named/,具體的常見參數如下
directory 設置域名服務的工作目錄,默認爲/var/named dump-file 運行rndc dumpdb備份緩存資料後保存的文件路徑與名稱 statistics-file 運行rndc stats後,統計信息的保存路徑與名稱 listen-on port 指定監聽的IPv4網絡接口 allow-query 指定哪些主機可以查詢服務器的權威解析記錄 allow-query-cache 指定哪些主機可以通過服務器查詢非權威的解析數據,如遞歸查詢數據 blackhole 設置拒絕哪些主機的查詢請求 recursion 是否允許進行遞歸查詢 forwards 指定一個IP地址,所有對本服務器的查詢將轉發到該IP進行解析 max-cache-size 設置緩存文件的最大容量
zone語句用來定義域及相關選項,定義域也就意味着你希望以後維護自己公司的域名解析。該語句的中的重點選項有type域file,以下爲zone語句內常用的選項及描述
type 設置域類型,類型可以是: hint:當本地找不到相關解析後,可以查詢根域名服務器 maser:定義權威域名服務器 slave:定義輔助域名服務器 forward:定義轉發域名服務器 file 定義域數據文件,文件保存在directory所定義的目錄下 notify 定於域數據文件,文件保存在directory所定義的目錄下 master 定義主域名服務器IP地址,當type設置爲slave後此選項纔有效 allow-update 允許哪些主機動態更新域數據信息 allow-tansfer 哪些從服務器可以從主服務器下載數據文件
以下爲簡單的zone語句實例,example.com是定義的域,tpye定義爲本機爲example.com域的主域名服務器,該域的解析文件保存在example.com.zone文件中,該文件保存在/var/named/目錄下。當定義方向解析域時,需要將網絡地址段反過來輸入,並以固定的in-addr.arpa格式結尾。通過定義hint的根域,這樣當客戶端查詢不屬於自己維護的域名時,可以根據根服務器進行迭代查詢,最終返回正確的結果,全球的根域名服務器信息保存在named.ca文件中,該文件時安裝完BIND軟件後自動生成的模板文件,我們可以在/usr/share/doc/bind-9.9.4/sample/var/named/目錄下找到它。
Zone "." IN { type hint; file "named.ca"; }; zone "example.com" IN { type master; file "example.com.zone"; }; zone "0.168.0.192.in-addr.arpa" IN { type master file "192.168.0.zone"; };
在BIND軟件的主配置文件中,如果定義了zone語句,還需要額外創建域數據文件。默認域數據文件被存儲在/var/named目錄下,文件名稱由zone語句中的file選項設定。數據文件分爲正向解析數據文件和反向數據文件,正向解析文件保存了域名到IP地址的映射記錄,反向解析文件保存了IP地址到域名的映射記錄,以下爲常用的記錄類型及描述
SOA記錄 域權威記錄,說明本機服務器爲該域的管理服務器 NS記錄 域名服務器記錄 A記錄 正向解析記錄,域名到地址的映射 PTR記錄 反向解析記錄,IP地址到域名的映射 CNAME記錄 別名記錄,爲主機添加別名 MX記錄 郵件記錄,指定域內的郵件服務器,需要指定優先級
以下就舉例說明正向解析域數據文件,說明各個語法格式。
TTL的值爲DNS記錄的緩存時間,該值是其他域名服務器將數據存放在緩存中的時間,1D代表一天
SOA後面記錄的root.example.com.代表域的權威服務器,jacob.google.com是管理員的郵箱,由於@在數據文件中的代表特殊含義,這裏使用.來代表@符號
NS記錄代表域名服務器記錄,如果由多個域名服務器,則可以添加多個NS記錄,但是每個NS記錄下面都需要由對應的A記錄
A記錄爲正向解析記錄,格式爲在域名後面輸入相應的IP地址
IN代表Internet
MX記錄指定的郵件服務器時,可以設置優先級
最後CNAME記錄爲別名,可以使用web.example.com來代表www.example.com具體的配置文件如下:
$TTL 1D @ IN SOA root.example.com ,jacob.goole.com. ( 0 1D 1N 1W 3H) IN NS root.example.com. IN MX 10 mail.example.com. root.example.com. IN A 172.16.0.254 www.example.com. IN A 172.16.0.200 IN A 172.16.0.201 ftp.example.com. IN A 172.16.0.100 mail IN A 172.16.0.25 web IN A CHAME www
注意:
1、zone語句後定義的域對於數據文件的簡寫相當重要,如果區數據爲你教案不以"."結尾的名稱後會被自動加上該域名稱
2、數據文件中@符號代表zone所以定義的域名稱
3、如果在數據文件中某條記錄名稱爲空格或者製表符,那麼BIND系統會直使用上一條記錄的名稱
4、如果同一個域名設置多個A記錄,則客戶請求該域名解析時,服務器會以輪詢的方式將結果返回給客戶端,一定程度上實現負載均衡
二、部署域名服務器
搭建域名服務器,域名設定爲www.chucloud.com,正向解析的域名,網絡地址爲172.31.208.0/24,按照以下三臺進行
服務器IP 服務器名稱 功能描述
172.31.208.80 dns.chucloud.com 域名服務器
172.31.208.81 ntp.chucloud.com 時間服務器
mail.chucloud.com 郵件服務器
172.31.208.82 www.chucloud.com 網站服務器
2.1安裝軟件
yum install -y bind-utlis
2.2修改配置文件
chown root.named /etc/named.conf vim /etc/named.conf
按照以下修改
acl black { #黑名單 172.31.101.0/24; }; acl white { #白名單 172.31.208.0/24; }; options { listen-on port 53 { any; }; #定義任何主機都可以使用53端口查詢 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"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { white; }; #允許白名單查詢 blackhole { black; }; #禁止黑名單查詢 forwarders { #設置轉發查詢 223.5.5.5; #公網DNS服務器 114.114.114.114; }
定義zone
zone "." IN { type hint; file "named.ca"; }; zone "chucloud.com" IN { type master; file "chucloud.com.zone"; }; zone "208.31.172.in-addr.arpa" IN { type master; file "208.31.172.zone"; };
注意:
1、反向解析記錄的寫法和IP地址是反過來了,172.31.208.0 寫爲208.31.172.in-addr.arpa
2.3 創建區數據文件
主配置文件僅是對zone域的定義,關於域內主機的具體記錄的解析,還需要依賴於數據文件的內容,常見的域名解析有正向解析,反向解析記錄,CNAME記錄以及MX記錄等,可以根據模板創建具體的區數據解析文件
,這些文件的創建可以根據軟件包中提供的named.loalhost文件作爲模板
cd /usr/share/doc/bind-9.9.4/sample/var/named/ cp /usr/share/doc/bind-9.9.4/sample/var/named/named.ca /var/named/ chown root.named /var/named/named.ca cp /usr/share/doc/bind-9.9.4/sample/var/named/named.localhost /var/named/chucloud.com.zone #複製模板文件並重命名爲chucloud.com.zone chown root.named /var/named/chucloud.com.zone vim /var/named/chucloud.com.zone #編輯區域文件
按照設定的內容編輯區域文件
$TTL 1D @ IN SOA dns.chucloud.com. jacob.abc.com. ( 0 1D 1H 1W 3H ) NS dns.chucloud.com. MX 10 mail.chucloud.com. dns IN A 172.31.208.80 ntp.chucloud.com. IN A 172.31.208.81 mail.chucloud.com. IN A 172.31.208.81 www.chucloud.com. IN A 172.31.208.82 #完整域名一定以.結尾 web IN CNAME www #別名
注意:
1、注意@符號
2、A記錄行前面一定不能有空格,不然報錯
3、完整域名必須以"."結尾
4、加上管理員郵箱“jacob.chucloud.com. "
然後新建一個反向解析文件208.31.172.zone,內容如下
$TTL 1D
@ IN SOA dns.chucloud.com. jacob.chucloud.com (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.chucloud.com.
MX 10 mail.chucloud.com.
80 IN PTR dns.chucloud.com.
81 IN PTR ntp.chucloud.com.
81 IN PTR mail.chucloud.com.
82 IN PTR www.chucloud.com.
82 IN PTR web.chucloud.com.
注意:
1、注意@符號
2、A記錄行前面一定不能有空格,不然報錯
3、完整域名必須以"."結尾
4、因爲配置文件named.conf中反向記錄區域使用“208.31.172.in-addr.arpa“,所以只用寫最後一個IP地址最後主機位,如82
5、如果配置文件named.conf中反向記錄使用”31.172.in-addr.arpa",則區域文件記錄IP地址記錄應該寫82.208
三、服務管理
在域名服務器配置完成後,需要開啓防火牆指定端口53,同時我們可以使用命令檢查配置文件是否有錯誤
named-checkconf /etc/named.conf #檢查配置文件 named-checkzone 208.31.172.in-addr.arpa /var/named/208.31.172.zone #檢查反向解析zone文件 named-checkzone chucloud.com.zone /var/named/chucloud.com.zone #檢查正向解析zone文件 firewall-cmd --permanent --add-port=53/tcp #使用firewall服務時需要清理iptables規則避免衝突 firewall-cmd --permanent --add-port=53/udp systemctl start named systemctl enable named
四、客戶端測試
在各個主機上配置好DNS服務器爲172.31.208.80後,進行測試
yum install bind-utils #安裝DNS解析客戶端
在172.31.208.81上
ping www.chucloud.com
ping web.chucloud.com
可見解析到172.31.208.82
ping www.baidu.com
ping www.163.com
可見DNS服務器轉發查詢設置生效
使用域名解析名工具查詢
nslookup www.chucloud.com
nslookup 172.31.208.82
dig www.chucloud.com
host www.chucloud.com
五、思考
1、很多時候可以用chroot-bind程序,使用chroot來對DNS進行安全加固,但是我沒有實驗成功
2、CentOS7下安裝了bind-chroot之後,若要使用named-chroot.service,則需要關閉named.service。兩者只能運行一個。
3、可以配置從域名服務器保證負載均衡和可靠性