linux學習-centos7上部署DNS服務
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、可以配置從域名伺服器保證負載均衡和可靠性