1. 程式人生 > >bind編譯安裝(精簡版)

bind編譯安裝(精簡版)

bind的編譯安裝

準備工作:

  1. 我們將系統時間對準(如果時間是準確的,此步忽略)

    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    yum install ntp
    ntpdate us.pool.ntp.org
  2. 首先我們要下載一個依賴—perl,我們在這裡下載perl的原始碼,這裡我下載的是perl-5.20.3.tar.gz版本
  3. 我們要在這裡下載bind的原始碼,這裡我下載的是bind-9.10.3-P2.tar.gz版本

編譯安裝:

  1. 首先我們編譯安裝perl:

    cp configure.gnu configure
    ./configure -des -Dprefix=/usr/local/perl
    make
    make test //在這步結束的時候有一個error,但不影響我們後續的操作,test沒有完成100%
    make install
  2. 編譯bind:

    ./configure --prefix=/usr/local/bind/ --enable-threads --enable-largefile --disable-ipv6 --with-openssl=no //--enable-threads 多執行緒支援,--enable-largefile 啟用大檔案支援,--disable-ipv6 關閉ipv6支援
    make
    make install

配置bind

  1. 主配置檔案

    cd /usr/local/bind/etc/
    /usr/local/bind/sbin/rndc-confgen > rndc.conf
    cat rndc.conf >rndc.key
  2. named.conf檔案

    vi /usr/local/bind/etc/named.conf //此檔案中新增以下內容:
    options {  
    listen-on port 53 {192.168.1.235;}; //開啟偵聽53埠,any表示接受任意ip連線
    directory "/usr/local/bind/var";  //正向反向區域都建立在這個目錄下
    pid-file "named.pid";   //檔案內容就是named程序的id  
    allow-query{any;}; //允許任意ip查詢
    forwarders{114.114.114.114;8.8.8.8;};  //設定轉發的公網ip
    };  
    zone "."
    IN { //這一行不能縮排 type hint; //根域名伺服器, file "named.ca"; //存放在/usr/local/bind/var目錄下, }; zone "example.com" IN { //新增正向解析區域資訊,此檔案可編寫example.com域對映ip地址資訊 type master; file "example.com.zone"; }; zone "1.168.192.in-addr.arpa" in { //新增反向解析區域資訊 type master; file "example.local"; allow-update { none; }; };
  3. 產生named.ca檔案

    /usr/local/bind/bin/dig -t NS . > /usr/local/bind/var/named.ca //產生named.ca檔案
  4. 為方便後續操作,進行以下設定
    1. 執行dns服務

      /usr/local/bind/sbin/named //執行dns服務
    2. 配置dns

      echo "nameserver 192.168.1.235" >/etc/resolv.conf //配置dns //ip為搭建dns伺服器的ip,搭建dns伺服器應該使用靜態ip
    3. 建立軟連結

      ln -s /usr/local/bind/etc/named.conf /etc/ //建立軟連結
    4. 連結bind命令

      ln -s /usr/local/bind/sbin/* /usr/bin/ //連結bind命令
      rndc reload //重新載入
  5. 配置example.com.zone檔案

    vi /usr/local/bind/var/example.com.zone
    $TTL  38400  
    @ IN    SOA     bind.example.com.  root ( 
                    2009040701      ;serial  
                    1H              ;refresh  
                    15M             ;retry  
                    1W              ;expire  
                    1D )            ;TTL  
    @   IN    NS      bind  //這個是定義區的域名伺服器 
    @       IN    MX 10   mail  
    bind     IN    A           192.168.1.235  //設定A記錄,bind主機對應的ip
    mail     IN    A           192.168.1.235  
    storage     IN    A        192.168.1.88  
    node01      IN    A        192.168.1.100  
    node02      IN    A        192.168.1.200  
    //SOA    一個授權區定義的開始
    //NS     標記區域的域名伺服器以及授權子域、
    //A      A記錄,將主機名轉化成ip地址,一個主機只有一個A記錄
    //PTR    與A記錄相反,將ip轉換成主機名,反向解析操作
    //MX     郵件交換記錄,定義郵件伺服器的域名
  6. 配置example.local檔案

    vi /usr/local/bind/var/example.local 
    $TTL  38400  //當有外部DNS伺服器對你的 DNS 的這個領域進行查詢時,這一條記錄會放置在對方DNS伺服器內幾秒鐘的意思
    1.168.192.in-addr.arpa. IN SOA bind.example.com. root(  
        2009040701;serial  //序號,作為master和slave更新的依據,例如master 序號為 100 但 slave 序號為 90 時,那麼這個 zone file 的資料就會被傳送到 slave 來更新了
        3H ; refresh   //H表示小時//slave經過refresh時間之後進行一次主動更新
        15M ;retry      //M表示分鐘   //refresh時間之後還是無法連線到master,那slave會在retry時間之後再次嘗試連線
        1W  ;expire       //W表示星期 //slave一直無法連線master,經過expire時間之後slave不再連線master,此時認為master掛了
        1D) ;minimum       //類似為TTL,D表示天
        IN NS      bind.example.com.  //com後面的“.”代表這是一個完整的主機名稱 (FQDN)而不僅是hostname
    88  IN PTR     storage.example.com.   //不能縮排 //設定一個反向解析指標,前面的88代表ip的主機位為88
    100 IN PTR     node01.example.com.  
    200 IN PTR     node02.example.com. 

驗證dns伺服器

  1. 驗證本地域名是否能夠解析:

    /usr/local/bind/bin/dig -t A node01.example.com @192.168.1.235
    //若是能夠正常解析為192.168.1.100則說明本地域名能夠解析
  2. 驗證公網域名是否能夠解析:

    /usr/local/bind/bin/nslookup  //這裡我們採用bind自帶的nslookup來解析
    > www.baidu.com
    Server:     192.168.1.235      
    Address:    192.168.1.235#53
    
    Non-authoritative answer:
    www.baidu.com   canonical name = www.a.shifen.com.
    Name:   www.a.shifen.com
    Address: 14.215.177.37
    Name:   www.a.shifen.com
    Address: 14.215.177.38
    //以上顯示的內容證明公網域名也可以解析

開啟防火牆相應的埠,使得客戶端能夠解析

//將以下命令加到/etc/sysconfig/iptables檔案中
-A INPUT -p udp -s 0/0 --dport 53 -j ACCEPT
-A INPUT -p tcp -s 0/0 --dport 53 -j ACCEPT

設定開機自動啟動dns伺服器

//將以下內容加到/etc/rc.d/rc.local
/usr/local/bind/sbin/named  //這個是我存放named的絕對路徑,存放的路徑不同這句命令就不同

配置主從dns

  1. 首先將主從伺服器全部當做主伺服器操作一遍上面的步驟
  2. 配置主伺服器(192.168.1.235)named.conf檔案
options {  
listen-on port 53 {192.168.1.235;}; 
directory "/usr/local/bind/var";  
pid-file "named.pid";
allow-query{any;};
forwarders{114.114.114.114;8.8.8.8;};  
notify yes;  
also-notify{192.168.1.240;};   // 每次主DNS修改完成後重啟服務會傳送notify
allow-transfer{192.168.1.240;};   

};  
zone "." IN { 
        type hint;  
        file "named.ca"; 
};  

zone "example.com" IN {  
        type master;  
        file "example.com.zone";
    allow-transfer{192.168.1.240;}; //僅允許240這個ip進行exanple.com這個區域傳送  
};  
zone "1.168.192.in-addr.arpa" in {  
    type master;  
    file "example.local";  
    allow-transfer{192.168.1.240;};  
};
  1. 配置從伺服器(192.168.1.240)named.conf檔案
options {
listen-on port 53 {192.168.1.240;}; //這裡是240,表示listen240的53埠
directory "/usr/local/bind/var";  
pid-file "named.pid";   
allow-query{any;}; 
forwarders{114.114.114.114;8.8.8.8;};  

};
zone "." IN {  
        type hint;   
        file "named.ca";  
};

zone "example.com" IN {  
        type slave;    //表示為從伺服器
        file "example.com.zone";
    masters{192.168.1.235;};  //表示主伺服器為235
};
zone "1.168.192.in-addr.arpa" in {    
    type slave;
    file "example.local";
    masters{192.168.1.235;};
};

剩下再來點邊角料調一下胃口

  1. 手動新增記錄
    1. 直接新增刪除或修改zone檔案裡的記錄
    2. 執行rndc reload zone名稱過載,如rndc reload example.com
  2. 手動啟動區域傳送
rndc retransfer example.com     
  1. 可以看到啟動過程,根據這個資訊來排錯
/usr/local/bind/sbin/named -g    
  1. 在配置example.local檔案時,建議refresh配置小點,便於更新,但太小佔資源,自己把控~