ubuntu搭建DNS

ubuntu搭建DNS

1、      bind簡介:

    BINDDomain Name System (DNS) 協議的一個實現,提供了DNS主要功能的開放實現,主要包括如下三種: html

*域名服務器 數據庫

*DNS解析庫函數 ubuntu

*DNS服務器運行調試所用的工具 vim

它是一款開放源碼的DNS服務器軟件,由美國加州大學Berkeley分校開發和維護的 緩存

 

DNS_server主要有如下三種應用模式: 安全

*主域名服務器 服務器

*輔助域名服務器 app

*緩存域名服務器 dom

Bind使用TCPUDP端口53 函數

2、      DNS-bind軟件的相關資源:

官方網站:http://www.bind.com/ 

幫助文檔:http://www.isc.org/sw/bind/ 

配置文件樣例:http://www.bind.com/bind.html

3、      DNS搭建建立環境:

系統環境:Linux_Ubuntu12.04_X64

軟件版本:BIND9

 

搭建測試主機:

*192.168.5.101緩存域名服務器、主域名服務器

*192.168.5.102緩存域名服務器、輔助/從域名服務器

*192.168.5.103 測試客戶機

4、      軟件安裝和主要配置文件解析:

sudo apt-get  install  bind9  bind9utils  -y

dns@dns2:/etc/bind$ ll

total 60

drwxr-sr-x  2 root bind 4096 Sep 10 16:49 ./

drwxr-xr-x 91 root root 4096 Sep 1014:06 ../

-rw-r--r--  1 root root 2389 Jul 27 11:17 bind.keys

-rw-r--r--  1 root root 237 Jul 27 11:17 db.0

-rw-r--r--  1 root root 271 Jul 27 11:17 db.127

-rw-r--r--  1 root root 237 Jul 27 11:17 db.255

-rw-r--r--  1 root root 353 Jul 27 11:17 db.empty

-rw-r--r--  1 root root 270 Jul 27 11:17 db.local

-rw-r--r--  1 root root 2994 Jul 27 11:17 db.root

-rw-r--r--  1 root bind 463 Jul 27 11:17 named.conf

-rw-r--r--  1 root bind 490 Jul 27 11:17 named.conf.default-zones

-rw-r--r--  1 root bind 301 Sep 10 16:43 named.conf.local

-rw-r--r--  1 root bind 890 Sep 10 14:06 named.conf.options

-rw-r-----  1 bind bind  77 Sep 10 14:06 rndc.key

-rw-r--r--  1 root root 1317 Jul 27 11:17 zones.rfc1918

 

named.conf

    主配置文件,設置通常的named參數,指向該服務器使用的域數據庫的信息源,注意裏面的include語句

named.conf.options

    全局配置文件,全局選項配置

db.root

    根服務器指向文件,由Internet NIC建立和維護,無需修改,可是須要按期更新

db.local

    正向區域數據庫,用於將域名解析爲對應的IP地址

db.127

    反向區域數據庫,用於將ip解析爲對應的域名

named.conf.local

    用於定義解析域,通常是在named.conf裏的include語句中囊括,單獨在該文件中劃定解析域,也能夠直接在named.conf中直接劃定解析域

 

其中:主配置文件/etc/bind/named.conf的配置語句:

命令  用法

acl    定義ip地址的訪問控制清單

#control 定義ndc使用的控制通道

include  把其餘文件包含到主配置文件中

key    定義受權的安全密鑰

logging 定義日誌寫什麼,寫到那裏

options 定義全局配置選項和缺省值

#server  定義遠程服務器的特徵

.....

 

5、      服務器搭建:

1.      緩存域名服務器

77

cd/var/cache/bind/

sudomkdir data

cd data

sudotouch cache_dump.db

sudotouch named_stats

sudochown -R bind:bind /var/cache/bind/data

sudo vim/etc/bind/named.conf.options

############################################

options { 

directory "/var/cache/bind"; 

dump-file "/var/cache/bind/data/cache_dump.db"; 

statistics-file "/var/cache/bind/data/named_stats"; 

query-source       port 53; 

#query-source-v6     port 53; 

allow-query     { any; };               ;容許全部機器的DNS查詢

version         "dns"; 

;當別人要探測咱們DNS服務器的版本時,對方獲得的將是dns

forwarders { 202.106.46.151; 8.8.8.8; }; 

 

#dnssec-validation auto;

auth-nxdomain no;    # conform toRFC1035

#listen-on-v6 { any; };

; 若是DNS服務運行在有多個網卡的服務器上,那麼默認的它會在全部網卡接口上監聽服務,這個選項告訴它只在指定的藉口上進行服務監聽

};

###########################################

#max-cache-ttlmax-retry-time 目前測試: DNS緩存時間由db文件中的TTL 參數決定

 

DNS解析模式

DNS解析的域名本機中沒有的時候,就會發起遞歸(recursion)或者轉發(forward)到遠程DNS去查詢。
遞歸:本機直接從根服務器上尋找對應域名的NS記錄,再由本機到NS指向的服務器中查詢記錄
轉發:本機將解析請求轉發到指定的服務器去解析,將轉發服務器的響應結果直接反饋給查詢者
BIND9
默認打開遞歸查詢和關閉轉發功能

2.      主域名服務器

先按照緩存服務器的搭建方法配置此服務器

a)     定義解析域

sudo vim named.conf.local

############################################

zone "example.com" IN {      
 type master;                   
  file "db.example.com";         
  allow-transfer { 192.168.5.102; };                

notify yes;

also-notify { 192.168.5.102;};
  };  

 

zone"5.168.192.in-addr.arpa" IN {

        type master;

        file"/etc/bind/db.192.168.5";

        notify yes;

        also-notify { 192.168.5.102; };

 

        allow-transfer { 192.168.5.102; };

};

 

############################################

master表示定義的是主域名服務器

file 指定區域數據庫文件位置

notifyalso-notifyallow-transfer等都是爲設置輔助域名服務器而配置的

b)     建立域數據庫文件

sudo vimdb.example.com

############################################

$TTL    7D

@       IN      SOA    example.com. root.example.com. (

                       2013091001      ; Serial

                         7D         ; Refresh

                          1D         ; Retry

                        28D         ; Expire

                         7D )        ; Negative Cache TTL

;

@       IN      NS     example.com.         #在其後有一個附加的 "."

@       IN      A      192.168.5.71

www     IN      A      192.168.5.71

############################################

@表明example.com.

若是不用@,這裏的www得寫成www.example.com.

第一行是TTL設定,生存時間記錄字段。它以秒爲單位定義該資源記錄中的信息存放在高

速緩存中的時間長度。這裏定義爲604800秒,也就是1

第二行的SOA記錄,指定受權主機和管理員信箱

    包含幾個子參數,用於和輔助域名服務器同步的:

    serial-->至關於一個id號,很重要,只有比輔助服務器的值大,纔會更新,通常用當前日期並加上兩位序號來表示

    refresh-->這裏是要告訴從服務器多久進行資料同步

    retry-->若是從在更新時失敗,要隔多久有進行重試

    expire-->這裏是記錄逾期時間,當從服務器一直都未能成功與主取得聯繫,到這個時間後就放棄了

    Minimum--> 默認 TTL 值,若是您在前面沒有用「$TTL」來定義,就會以此值爲準

第三行的NS記錄,代表負責example.com這個域的Name server

第四行的A記錄,就是域名和ip的映射記錄

 

sudo vim db.192.168.5

$TTL    7D

@       IN      SOA    example.com. root.example.com. (

                        2013091004      ; Serial

                         7D             ; Refresh

                          1D            ; Retry

                        28D             ; Expire

                        7D )    ; Negative Cache TTL

;

@       IN      NS     example.com.

@       IN      PTR    example.com.

71      IN      PTR    www.example.com.

3.      輔助域名服務器搭建

先按照緩存服務器的搭建方法配置此服務器

a)     定義解析域

和主域名服務器有幾點不一樣的地方:

編輯/etc/bind/named.conf.local文件

輔助服務器不須要建立域庫文件,由於是從主服務器上同步過來

sudo vim named.conf.local

############################################

zone "example.com" IN {

  type slave;

  file "/etc/bind/slave/db.example.com";

  masters { 192.168.5.101; };

  allow-notify { 192.168.5.101; };

  };

 

zone "5.168.192.in-addr.arpa" IN {

  type slave;

  file "/etc/bind/slave/Sdb.192.168.5";

  masters { 192.168.5.101; };

  allow-notify { 192.168.5.101; };

  };

############################################

slave是標明該服務器爲輔助域名服務器

file是指定存放域庫文件的位置,我自定義了一個slaves目錄來存放master傳過來的文件,相對安全些

sudo mkdir /etc/bind/slave

sudo chmod g+w /etc/bind/slave

masters指明主域名服務器地址

b)     建立域數據庫文件

輔助服務器不須要建立域庫文件,由於是從主服務器上同步過來

c)      配置權限

    注意:建立的slaves是在根目錄下面,而根目錄(/etc/bind/)默認是隻讀權限的,因此須要開放權限

可是又不能和平時加權限同樣,如用:chown  bind:bind 相似的辦法

只有以下操做就能正確訪問:

sudo  vim  /etc/apparmor.d/usr.sbin.named

############################################

/etc/bind/** r,

改爲

/etc/bind/** rw,

############################################

而後重啓服務生效:

sudo /etc/init.d/apparmor restart

6、      重啓服務器

重啓主從服務器上的BIND服務

sudo /etc/init.d/bind9  restart

 

最好進行如下幾步檢查:

sudo netstat -tnlp | grep 53-->檢查開啓端口

sudo tail -f /var/log/syslog-->查看一下啓動日誌

 

查看從服務器上庫文件

cd /var/cache/bind

ls

從這裏能夠直觀的看見從主複製過來的庫文件,更重要的是看日誌,可以很清楚的看到主和從傳輸的過程

 

 

在客戶機上測試,就是本機,修改本機的dns,編輯/etc/resolvcond/resolv.conf.d/tail

nameserver 192.168.5.101

須要重啓生效

sudo /etc/init.d/resolveconf restart

7、      語法檢測工具,檢測配置是否有語法錯誤:

named-checkconf

檢查named.confinclude裏包含的文件

    egnamed-checkconf --help

    egnamed-checkconf -t  etc/bind/

沒有任何輸出表明語法沒有問題

 

named-checkzone

檢查zone

    egnamed-checkzone -t  etc/bind/

 

8、      RNDC管理BIND

Bind 9以後提供新的功能爲」rndc」(remote name daemon control),可視爲Bind舊版ndc的延伸,它可以使系統管理者利用rndc command遠端或本端(localhost)控制管理Bind,並以加密方式來傳送資料,以防止其餘非受權使用者控制Bind

 

rndcflush 清空本地DNS緩存

rndcflushname name刷新指定域名的緩存

rndcreload重載DNS服務器
rndc status
查看目前DNS服務器狀態
rndc stop
中止DNS服務器
rndc restart
從新啓動DNS服務器
rndc stats
生成DNS統計報表到statistics-file
rndc dumpdb  
將全部緩存輸入文件named_dump.db,以查看DNS緩存,DNS緩存是在內存中的
success:
成功查詢的次數
referral:
就是非recursion的查詢次數
nxrrset:
有這個域名,但找不到解析記錄
nxdomain:
就是域名都找不到
recursion:
遞歸查詢 failure:除上面那些以外的查詢失敗響應次數

 

設置DNS Cache 的時間

 bind 9 中,使用 TTL 參數來設置 DNS 默認的緩存時間,但要記住這個是你解析的域名在別人的 DNS 中的緩存時間。

 

rndc配置

參考:http://dns-learning.twnic.net.tw/bind/security.html#two-one

9、      報錯

1.       若是用戶bind對於/etc/bind/slaves目錄沒有寫權限, 則查看 /var/log/syslog 會出現以下相似錯誤:

tonybox:~# tail/var/log/syslog

Aug 15 15:50:12 ubuntu kernel:[12575.839327] type=1400 audit(1376553012.724:18): apparmor="DENIED"operation="mknod" parent=1 profile="/usr/sbin/named"name="/etc/bind/tmp-MosmnKMJxa" pid=2440 comm="named" requested_mask="c"denied_mask="c" fsuid=107 ouid=107

Aug 15 15:50:12 ubuntunamed[2439]: dumping master file: /etc/bind/tmp-MosmnKMJxa: open: permissiondenied

 



相關文章
相關標籤/搜索