DNS服務是域名轉換服務。
原理及功能可以參考http://kmk0226.blog.51cto.com/5975994/1678180
今天的博客是介紹DNS服務的編譯安裝,以及安裝之後如何配置DNS服務,讓服務能正常運行。
在Linux系統中,DNS服務在Bind這個程序中配置的。
首先,要編譯安裝DNS服務,需要先去下載源碼包。
源碼包可以在bind官方網站下載
bind官方站點:www.isc.org
有9.9.X與9.10.X的版本,我們這裏以9.9.X的版本來編譯安裝。
X代表子版本,可能版本會跟圖片中不一樣
先下載源碼包到Linux系統中。
具體如何下載可以先下載到win系統中再共享方式到linux系統中,如果linux系統有圖形界面可以直接到官方網站下載。
下載完成之後,解壓源碼包
tar -xvf bind-9.9.7-P1.tar.gz :解壓源碼包 cd bind-9.9.7-P1 :進入解壓後的目錄 ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --enable-threads --disable-chroot --disable-ipv6 :運行configure程序,生成配置腳本文件makefile文件
--prefix= :指定單獨的安裝路徑,爲了刪除方便,一般放在/usr/local/下
--sysconfdir= :存放配置文件,配置文件一般在,/etc/下
--enable-threads:默認關閉的,啓用線程工作模式,擁有更好的性能
--disable-ipv6:關閉IPV6的功能
--with-dlz--mysql:基於mysql安裝
編譯完之後直接可以安裝
make && make install :編譯與安裝,編譯安裝都是根據以上配置腳本文件中的配置來編譯與安裝的
安裝完之後程序會放在原來指定的安裝路徑中。
我們這裏的安裝路徑在:/usr/local/bind9
安裝目錄下有很多的工具與庫文件
bin,sbin:存放工具,如dig。
share:存放man
man -M /usr/local/bind9/share/man
可以查看新版的man
lib:庫文件
雖然已經安裝完成了,但是我們的服務還沒有完全安裝完成,因爲我們編譯安裝的服務程序,是不會自動幫忙更新man、PATH、庫文件,以及服務啓動腳本
所以我們需要自己導入與編寫。
首先:先導入man
vim /etc/man.config
修改man配置文件
MANPATH /usr/local/bind9/share/man
將/usr/local/bind9/share/man加入到MANPATH參數中
MANPATH /usr/man MANPATH /usr/share/man MANPATH /usr/local/man MANPATH /usr/local/share/man MANPATH /usr/X11R6/man MANPATH /usr/local/bind9/share/man
導入man文件之後,我們要將我們的bind工具加入到PATH中
vim /etc/profile.d/bind.sh 在/etc/profile.d目錄中新建一個bind.sh的shell腳本
腳本中寫入:export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH
注意:最後的$PATH一定要加,這是爲了添加原先已經有的PATH,否則原來的就不能用了。
腳本添加完畢重啓系統,腳本將會自動將我們的新工具添加到PATH中
最後我們查看下庫文件。
所有的庫文件都是靜態的以.a結尾的庫文件,所以不需要安裝
如果遇到動態的庫文件就需要安裝了,結尾爲.so的爲動態庫文件
到此我們的服務就安裝完成了,接下去就是要提供配置文件,讓服務運行起來了。
編譯安裝的服務是不會自帶配置文件的。
DNS的配置文件都放在/etc/named目錄下
先進入/etc/named cd /etc/named 然後新建named.conf這個配置文件 vim named.conf options { directory "/var/named"; recursion yes; }; #這裏options代表是配置文件中的全局配置 directory:是配置文件中的工作目錄,一般都位置爲/var/named目錄中 recursion yes:代表是否允許遞歸,一定要保留,看過DNS原理的都知道DNS服務器是以遞歸方式工作的,所以這一項必須要開啓 全局配置只要開啓兩項就能正常工作了 其他的配置可以參考man文件來配置。畢竟我們已經更新了man文件了,嘿嘿 zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "127.0.0.zone"; allow-update { none; }; zone "kmk.com" IN { type master; file "kmk.zone"; allow-update { none; }; }; zone代表區域配置 zone "域名" IN{ type {master(主區域)|slave|hint(根區域)|forward}; :類型 file "mageedu.com.zone"; :文件 allow-update { none; }; :域DHCP服務聯動更新,域名IP,絕對不允許這是安全問題 }; 反解域需要將IP地址倒過來寫,並且添加.in-addr.arpa 如上:0.0.127.in-addr.arpa 注意:所有的語句後面都需要用;分號結尾 主配置文件建立完畢,我們要先修改下權限,讓配置文件可以被named用戶訪問,如果沒有named用戶需要先建立,named的用戶與組 id named:查看下是否有建立用戶組 沒有的話新建用戶與組 useradd -r named :添加用戶-r代表添加的是系統用戶 groupadd named :添加組 修改屬組屬主及權限:chown root:named named.conf chmod 640 named.conf
以上爲主配置文件的建立,配置完主配置文件,我們還需要配置區域配置文件
進入剛剛全局配置中的工作目錄
先創建工作目錄與修改屬組屬主,編譯安裝的服務,工作目錄是沒有的 創建目錄:mkdir /var/named/slaves -pv chown root:named /var/named/ chown named:named /var/named/slaves/ chmod 750 /var/named/ chmod 770 /var/named/slaves/ 目錄創建完成,先獲取根域的節點信息 dig -t NS . @a.root-servers.net > /var/named/named.ca 用dig工具獲取到根節點的信息,然後發送到/var/named/named.ca這個配置文件中 這樣就配置玩根節點了 然後配置本地域名解析 在配置.zone文件 vim localhost.zone $TTL 3600 :定義統一的緩存時長單位是秒鐘 @ IN SOA localhost. admin.localhost. (SOA記錄,文件必須要的。 2015072207 :序列號,最多十個數字 2H :刷新時間間隔 ,每兩個小時同步一次 10M :如果主DNS服務器不在線,每十分鐘重試一次 7D :試7天之後,還不在線斷線 1D :否定回答TTL值 ,1天 ) IN NS localhost. :ns記錄,第一行的區域名稱與上面一條一樣可以省略 IN A 127.0.0.1 :A記錄 vim 127.0.0.zone:這個是反向解析區域文件 $TTL 3600 @ IN SOA localhost. admin.localhost. ( 2015072305 3H 15M 7D 1D ) IN NS localhost. 1 IN PTR localhost. vim kmk.zone :配置自定義的區域文件 $TTL 3600 @ IN SOA ns.kmk.com. admin.kmk.com. ( 2015072301 2H 10M 7D 1D ) IN NS ns.kmk.com. IN MX 10 mail.kmk.com. ns.kmk.com. IN A 192.168.142.128 www.kmk.com. IN A 192.168.142.128 mail.kmk.com. IN A 192.168.142.129 區域解析庫文件說明: 區域解析庫: 資源記錄:rr(resource record),一行一個資源記錄 有類型的概念:用於此記錄解析時的屬性 SOA:Start Of Authority,起始授權記錄,一個區域文件,只能有一個soa文件記錄 NS:Name Server,代表名稱服務器 MX:Mail eXchange,郵件交換器,MX記錄有優先級屬性(0-99,越小越高) A:FQDN --> IP:專用於正向解析庫,不能域PTR同時在一起 PTR:IP --> FQDN:專用於方向解析庫,不能域A同時在一起 AAAA:FQDN --> IPV6,專用於正向解析庫 CNAME:Canonical Name,正式名稱,別名記錄 張三的正式名稱是tom,代表張三是別名 配置完之後修改屬組屬主及權限: chgrp named 127.0.0.zone localhost.zone named.ca kmk.zone:修改屬組 chmod 640 127.0.0.zone localhost.zone named.ca kmk.zone :修改權限
現在一個緩存DNS服務器已經完成
可以嘗試啓動緩存名稱服務器
named-checkconfig:檢查配置文件是否有語法錯誤
named 命令可以直接啓動named服務
-h:查看版主文件
-g:前臺啓動
-u:啓動服務
-c:啓動服務的配置文件在哪
named -g -u named -c /etc/named/named.conf:啓動服務
成功之後出現字符:
all zones loaded
running
出現以上字符代表已經啓動成功,但是不會繼續下去,如果想要測試,可以新建窗口進行測試
測試方法爲
dig -t PTR kmk.com @192.168.142.128
這個代表解析kmk.com這個域裏面的所有信息,而解析服務器爲192.168.142.128這個服務器IP爲你現在建立的DNS服務器IP,如果解析出來了代表成功了。
如果測試成功,那麼不要高興,因爲你的服務器還是個半成品,我們要需要導入rndc密鑰信息
否則你的服務器將會很不安全。
導入rndc
rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
利用rndc-confgen將urandom中的一個隨機數添加至rndc.conf
urandom:一個提供隨機數的目錄
-r:代表利用urandom中的隨機數,不是熵池中的隨機數
再將rndc.conf中的key段發送到/etc/named/named.conf中
options { directory "/var/named"; recursion yes; }; #rndc發送過來的key信息 #Use with the following in named.conf, adjusting the allow list as needed: key "rndc-key" { algorithm hmac-md5; secret "4NNN/HzlnbeGLOewSowoaQ=="; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "127.0.0.zone"; allow-update { none; }; }; zone "kmk.com" IN { type master; file "kmk.zone"; allow-update { none; }; }; 以上是最後完整的全局配置文件信息
最後再重讀named.conf這個配置文件
killall -HUP named
chmod 440 rndc.conf:修改rndc.conf權限
到此DNS服務的配置就全部完成了,可以使用named -g -u named -c /etc/named/named.conf來啓動服務,但是這樣很不方便,可以再編輯一個服務腳本來控制啓動關閉及重啓之類的操作。
如用service機制,具體可以參考cent OS 6的service腳本編輯來寫腳本