DNS轉發功能

DNS轉發功能

1. 在/etc/named.conf中可以在options段中使用forwarders和forward指令設置DNS轉發:
options {
forwarders {
  192.168.1.110;
  192.168.1.112;
  };
 forward first;
};

forwarders

forwarders {
   DNS_IP_1;
   DNS_IP_2;
   };
forwarders指令用於設置將DNS請求轉發到哪個服務器,可以指定多個服務器的IP地址。

forward

forward first | only;
forward指令用於設置DNS轉發的工作方式:
forward first設置優先使用forwarders DNS服務器做域名解析,如果查詢不到再使用本地DNS服務器做域名解析。
forward only設置只使用forwarders DNS服務器做域名解析,如果查詢不到則返回DNS客戶端查詢失敗。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1、 DNS系統的作用

1. 正向解析:根據主機名稱(域名)查找對應的IP地址

2. 反向解析:根據IP地址查找對應的主機域名

2、 DNS的解析方式

1. 遞歸解析

大多數客戶機向DNS服務器解析域名的方式

2. 迭代解析

大多數DNS服務器向其他DNS服務器解析域名的方式

3、 DNS服務器的類型(角色)

1. 緩存域名服務器

也稱爲 唯高速緩存服務器

通過向其他域名服務器查詢獲得域名->IP地址記錄

將域名查詢結果緩存到本地,提高重複查詢時的速度

2. 主域名服務器

特定DNS區域的官方服務器,具有唯一性

負責維護該區域內所有域名->IP地址的映射記錄

3. 從域名服務器

也稱爲 輔助域名服務器

其維護的域名->IP地址記錄 來源於主域名服務器

4、 DNS的域名空間

? 整個DNS的域名空間是一個樹形結構,最頂端是根域,根域下面是頂級域,頂級域有三種分類,即通用域、國家域和反向域,再下是二級域。

5、 DNS服務器基礎

1、 DNS相關的安裝包

bind-chroot-9.3.4-10.P1.el5

ypbind-1.19-11.el5

bind-libs-9.3.4-10.P1.el5

bind-utils-9.3.4-10.P1.el5

bind-9.3.4-10.P1.el5

caching-nameserver-9.3.4-10.P1.el5

2、 BIND服務器端程序

主要執行程序:/usr/sbin/named

服務腳本:/etc/init.d/named

默認監聽端口:53

3、 主配置文件:

/var/named/chroot/etc/named.conf

4、 保存DNS解析記錄的數據文件位於:

/var/named/chroot/var/named/

6、 DNS服務器的安裝及配置

1、 基本DNS功能服務

a) 安裝DNS軟件包

rpm –ivh bind-9.3.4-10.P1.el5

rpm –ivh bind-chroot-9.3.4-10.P1.el5 //不允許更改其主目錄

rpm –ivh caching-nameserver-9.3.4-10.P1.el5 //將DNS配置文件放到/var/named目錄

b) 編輯配置文件

1、 創建域名

vi /var/named/chroot/etc/named.conf //named.conf爲手動添加

options {

directory "/var/named"; //指定根目錄

};

zone "." IN {

type hint; //根域類型

file "named.ca"; //存放根域地址的文件名

};

zone "zx.com" IN { //創建的域名

type master; //域類型

file "zx.com.zx"; //域的解析配置文件

};

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

type master;

file "zx.com.fx";

};

2、 編輯正向解析記錄配置文件

vi /var/named/chroot/var/named/zx.com.zx

$TTL 86400

@ IN SOA ns1.zx.com. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns1.zx.com.

ns1 IN A 192.168.2.100

www IN A 192.168.2.101

3、 編輯反向解析記錄配置文件

vi /var/named/chroot/var/named/zx.com.fx

$TTL 86400

@ IN SOA ns1.zx.com. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns1.zx.com.

100 IN PTR ns1.zx.com.

101 IN PTR www.zx.com.

4、 重啓服務、關閉防火牆等

service named start //起用DNS服務

service iptables stop //關閉防火牆

setenforce 0 //關閉SELinux

2、 主從DNS功能服務

vi /var/named/chroot/etc/named.conf

options {

directory "/var/named";

};

zone "." IN {

type hint;

file "named.ca";

};

zone "zx.com" IN {

type master;

also-notify { 192.168.2.101; }; ;表示主動提醒從域名服務器更新記錄

allow-transfer { 192.168.2.101; }; ;表示允許192.168.2.101從自己這裏下載解析記錄

file "zx.com.zx";

};

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

type master;

also-notify { 192.168.2.101; };

allow-transfer { 192.168.2.101; };

file "zx.com.fx";

};

3)編輯解析記錄文件

正向解析記錄:

vi /var/named/chroot/var/named/zx.com.zx

$TTL 86400

@ IN SOA ns1.zx.com. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns1.zx.com.

IN MX 10 mail

ns1 IN A 192.168.2.100

ns2 IN A 192.168.2.101

www IN A 192.168.2.101

ftp IN A 192.168.2.100

mail IN A 192.168.2.100

反向解析記錄:

vi /var/named/chroot/var/named/zx.com.fx

$TTL 86400

@ IN SOA ns1.zx.com. root.localhost. (

1997022700 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns1.zx.com.

IN MX 10 mail

100 IN PTR ns1.zx.com.

101 IN PTR ns2.zx.com.

101 IN PTR www.zx.com.

100 IN PTR ftp.zx.com.

100 IN PTR mail.zx.com.

2、從域名服務器

1、 配置文件:

vi /var/named/chroot/etc/named.conf

options {

directory "/var/named";

};

zone "." IN {

type hint;

file "named.ca";

};

zone "zx.com" IN {

type slave; ;表示從

masters { 192.168.2.100; }; ;指出主域名服務器是誰

file "slaves/zx.com.zx"; ;記錄保存的位置

};

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

type slave;

masters { 192.168.2.100; };

file "slaves/zx.com.fx";

};

2、 正向解析地址配置文件

vi /var/named/chroot/var/named/slaves/zx.com.zx

$TTL 86400

@ IN SOA ns1.zx.com. root.localhost. (

1 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns1.zx.com.

3、 反向解析地址配置文件

vi /var/named/chroot/var/named/zx.com.fx

$TTL 86400

@ IN SOA ns1.zx.com. root.localhost. (

1 ; Serial

28800 ; Refresh

14400 ; Retry

3600000 ; Expire

86400 ) ; Minimum

IN NS ns1.zx.com.

分離解析域名服務器

針對來自局域網客戶機的區域數據文件

view “視圖1” {

match-clients { 客戶機地址1; }

zone “zx.com” IN {

……

};

};

針對來自其他任意地址客戶機的區域數據文件

view “視圖2” {

match-clients { 客戶機地址2; }

zone “zx.com” IN {

……

};

};

配置實例:

view "LAN" {

match-clients { 192.168.1.0/24; };

zone "zx.com" IN {

type master;

file "zx.com.zone.lan";

};

};

view "WAN" {

match-clients { any; };

zone "zx.com" IN {

type master;

file "zx.com.zone.wan";

};

};

DNS轉發功能

1. 在/etc/named.conf中可以在options段中使用forwarders和forward指令設置DNS轉發:
options {
forwarders {
  192.168.1.110;
  192.168.1.112;
  };
 forward first;
};

forwarders

forwarders {
   DNS_IP_1;
   DNS_IP_2;
   };
forwarders指令用於設置將DNS請求轉發到哪個服務器,可以指定多個服務器的IP地址。

forward

forward first | only;
forward指令用於設置DNS轉發的工作方式:
forward first設置優先使用forwarders DNS服務器做域名解析,如果查詢不到再使用本地DNS服務器做域名解析。
forward only設置只使用forwarders DNS服務器做域名解析,如果查詢不到則返回DNS客戶端查詢失敗。

7、 檢測配置文件命令

1、 named-checkconf工具

格式:named-checkconf [主配置文件]

[root@localhost etc]# named-checkconf named.conf

named-checkzone zx.com zx.com.zone

zone zx.com/IN: loaded serial 2009

OK

2、 客戶端對DNS解析

Nslookup


 


 

DNS:domain name system
遞歸查詢:進行一次查詢就能得到最終結果
迭代查詢:需要進行多次查詢,才能得到最終結果

互聯網上的應用方式一般是:本地遞歸,互聯網部分迭代。
所有DNS都不知道其他DNS在哪裏,但都知道根在哪裏,本地主機向本地DNS遞歸,本地DNS出去迭代查詢後向本地返回最終結果。

DNS常見的記錄類型:
A記錄: 由主機名解析IP地址
PTR記錄:由IP地址解析主機名
NS記錄: 用來指定本地的域名服務器(有主,有輔)
MX記錄: 用來指定本地的郵件服務器
CNAME: 用來指定一個主機的別名
SOA: 起始授權記錄,用來說明本域的主域名服務器
輔助域名服務器每隔一段時間要去主(或者其他輔助)域名服務器上面查詢更新,以保證數據的一致性,
這個過程叫做區域傳送,這個過程使用TCP協議,53號端口。爲了保證數據的一致性,如果主服務器有更
新,也會及時告知從服務器過來同步。
區域傳送有兩種類型:
增量區域傳送
完全區域傳送
DNS服務器類型:1.主<-->從 2.緩存服務器 3.轉發器
關於查詢優先級:查找本地hosts文件->本地DNS緩存->本地DNS緩存->本地DNS區域文件->.....

$TTL 86400
@ IN SOA localhost. root.localhost. (在DNS配置文件中@代表本域有特殊意義,所以這裏管理員郵箱以“.”代替並且後面跟一個“.”,固定格式。
1997022700 ; Serial 每次更新後服務器都將此號碼更改,從服務器若查詢到該號碼改變就想服務器請求更新。
28800 ; Refresh 從服務器的更新時間
14400 ; Retry 從服務器若更新失敗後的重試時間
3600000 ; Expire 重試多久後就宣告失敗不再更新
86400 ) ; Minimum 若主服務器找不到對應的請求,允許客戶端再次查詢的時間

DNS轉發:默認DNS服務器會爲1000個client端做遞歸解析。
在配置文件中聲明 recursion no完全關閉遞歸轉發功能
聲明爲某個網段或者某個IP做遞歸 allow-recursion {IP/Net;}
在主配置文件中聲明版本號 vsersion " ",防止別人通過dig命令來獲取bind的版本信息搞破壞
完全轉發:當DNS服務器收到查詢請求的時候會先看看是不是查詢本域的信息,本地緩存是否有數據,如果不能使用本地數據解析DNS會將查詢請求發送給轉發器,
此時是以遞歸查詢的方式發送給轉發器的,而在標準的DNS解析中,DNS服務器將以迭代查詢的形式發送給另一個DNS服務器。
options {
forward only|first;
forwardsers {IP;};

only:僅僅依靠轉發器來遞歸解析,如果轉發器出現問題,就不解析了
first:先請求轉發器,讓其代爲轉發(請轉發器做遞歸),如果轉發器無響應就自己找根,此時開始標準的DNS解析也就是迭代查詢。
部分轉發(只轉發解析某個域的DNS):假設有兩個域,a.com和b.com,a.com這個域是經過授權(向上級註冊,也就是.com知道他的存在)的,而b.com這個域沒有經過授權,此時如果a.com中的一臺主機要訪問www.b.com就會出現訪問不了,但是如果a.com知道b.com這個域的DNS主機是誰,即便b.com沒有經過授權,這時a.com的DNS可以設一個部分轉發,將本域所有要求解析b.com域的請求全部都發給b.com這個域的DNS主機就可以了。
部分轉發一般用於訪問未經授權的DNS域。配置格式
zone “b.com” IN {
type forward;
forwarders {IP;};
}

子域授權:
在父域的區域配置文件中以NS記錄聲明子域以及管理這個子域的DNS服務器(主和輔都聲明瞭)
這裏假設a.com這個域下面有一個子域net.a.com
配置很簡單只需要在父域的區域配置文件中添加一條
net.a.com IN NS ns1.net.a.com
ns1.net.a.com IN A 1.1.1.1

設置允許進行DNS查詢的主機
1、直接定義
在主配置文件中allow-query { 192.168.1.0/24; }; 定義允許192.168.1.0這個網段的主機進行DNS查詢
2、使用acl
在options上面定義一個acl
acl clients {172.16.0.0/16;192.168.1.0/24;};
allow-query { clients; }; 這樣就可以了同時允許這兩個網段進行查詢

智能DNS(DNS View):
我們知道網通和電信之間進行訪問速度比較慢,現在架設服務器一般都是雙線的,我們經過DNS的設置,讓DNS自
動識別客戶端IP是網通的還是電信的,網通就訪問網通的服務器電信就訪問電信的服務器。
這裏我們假設網通屬於192.168.1.0/24這個網段,電信屬於172.16.0.0/16這個網段的
首先定義訪問控制
acl telecom { 172.16.0.0/24; };
acl unicom { 192.168.0.0/24; };
接下來針對兩種不同的客戶IP範圍定義兩個DNS視圖
view TELNET {
match-clients { telecom; };
match-destinations { any; };
recursion no;
include "/etc/named.telecom.zones";
};
view UNINET {
match-clients { unicom; };
match-destinations { any; };
recursion no;
include "/etc/named.unicom.zones";
};
這裏假設我的DNS域爲test.com,以下配置文件分別爲:
vi named.telecom.zones(此文件由named.rfc1912.zones複製而來,以下是在原文件基礎之上添加,)
zone "test.com" IN {
type master;
file "test.com.zone.tele";
allow-update { none; };
};
zone "0.16.172.in-addr.arpa" IN {
type master;
file "172.16.0.rev";
allow-update { none; };
};
vi named.unicom.zones(此文件同上,如果手動新建務必保證文件中有根域以及localhost域)
zone "test.com" IN {
type master;
file "test.com.zone.uni";
allow-update { none; };
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "192.168.0.rev";
allow-update { none; };
};
做完之後進行語法檢查named-checkconf,named-checkzone
重啓測試(我本機配置兩個IP 192.168.0.162和172.16.0.162)
dig -t A www.test.com @172.16.0.162使用172.16.0.162作爲DNS服務器來解析
dig -t A www.test.com @192.168.0.162使用192.168.0.162作爲DNS服務器來解析


 


 

---------------------------------------------------------

轉發服務器:

轉發服務器接受查詢請求,但並不直接提供DNS解析,而是將所有查詢請求發送至另外的DNS服務器,查詢結果返回後保存至緩存。

轉發服務器可以分爲一下兩種類型:

1.完全轉發服務器:

DNS服務器配置爲完全轉發,會將所有區域的DNS查詢請求發送至其他DNS服務器。修改named.conf文件的options字段實現其功能。

options {
directory "/var/named";
recursion yes; #允許遞歸查詢

forwarders { 10.0.0.1; }; #指定轉發查詢請求的DNS服務器列表

forward only; #僅執行轉發操作
};

僅僅是本機DNS中不存在的域名才轉發!

所謂的 forwarder,就是當某一臺 NS 主機遇到非本機負責的 zone ( slave zone 也屬於本機負責的範圍) 查詢請求的時候,將不直接向 "." zone 查詢,而把請求轉交給指定的 forwarder (一臺或多臺) 主機代爲查詢。我們知道,當DNS服務器接到客戶端主機的查詢請求時,首先會檢查這個查詢是否屬於本機管轄,否則將轉向 "." zone 再逐級的查詢下去,最後再把查詢結果告訴客戶端。在這個過程之中,DNS服務器還會將查詢到的結果存放到緩存中。只要緩存中的 TTL 沒過期,在下次遇到同樣查詢的時候,就可以直接將結果響應給客戶端,而無需再重複上次的查詢流程。如果DNS服務器上指定了forwarder,那這個DNS發現緩存中沒有記錄時,將不向 "." 查詢,而是向 forwarder 送出同樣的請求(轉發),然後等待查詢結果,即把逐級往下查詢這個耗費精力的動作,交給 forwarder 負責。但無論這個結果是自己直接查詢得來的,還是 forwarder 送回來的,DNS服務器都會保存一份數據在緩存中。這樣,以後的相同查詢就快多了,這對於DNS所服務的客戶端而言查詢效率會提高很多。

當forwarder沒有返回答案時,奔DNS會自己去遠端請求。但是如果配置了forward only; 則他僅僅處理轉發,而不自己查詢。

2.條件轉發服務器:

該服務器類型只轉髮指定域的DNS查詢請求,修改named.conf文件,添加轉發區域的設置實現其功能。

zone "test.com" {                      
type forward;          #指定該區域爲條件轉發類型
forwarders { 10.0.0.1;10.0.0.2;};  #設置轉發服務器列表

};

注意:

1.轉發服務器的查詢模式必須允許遞歸查詢,否則無法正確完成轉發

2.轉發服務器列表如果是多個DNS服務器,則會依次嘗試,直到獲得查詢信息爲止

3.配置區域委派時,如果使用轉發服務器,有可能會產生區域引用的錯誤

#作爲轉發服務器,千萬不要出現轉發循環。

配置轉發服務器技巧:

1).轉發列表配置精簡

對於配置有轉發器的DNS服務器,可將查詢發送至多個不同的位置,如果配置轉發服務器配置過多,則會增加查詢的時間,應根據需要使用轉發器,例如:將本地無法解析的DNS信息轉發至其他域名服務器。

2).避免鏈接轉發器

如果配置了DNS服務器server1將查詢請求轉發給DNS服務器server2,則不要在爲server2配置其他轉發服務器。如果其他轉發服務器進行了錯誤的配置,將查詢轉發給server1,那麼可能導致錯誤。

3).減少轉發器負荷

如果大量的DNS服務器使用這些轉發器進行域名信息查詢,則會增加轉發器的工作量,降低解析的效率,所以建議使用一個以上的轉發器實現負載。

4).避免轉發器配置錯誤

DNS服務器會按照轉發器配置文件設置的順序來轉發域名,如果國內的域名服務器,錯誤的將第一個轉發器配置爲美國的DNS服務器地址,則所有本地無法解析的查詢均會發送至指定美國的DNS服務器,這會降低網絡上名稱解析的效率

緩存服務器:

緩存服務器本地並不設置DNS信息,僅執行查詢和緩存操作。客戶端發送查詢請求,緩存服務器如果有該查詢的信息,則直接返回結果。如果沒有,則發送至根服務器,通過迭代查詢獲得相應的DNS信息,然後將結果保存至緩存,保存信息TTL值過期後將會清空。

緩存服務器不需要建立獨立的區域,可以直接對named.conf文件進行設置:

options {
directory "/var/named";
dataesize 80M; #DNS緩存設置爲80M

recursion yes; #允許遞歸查詢
};


 

或:
 

options {
directory “/var/named”;
forward only;
forwarders {
192.168.1.1;
192.168.1.2;
};
};

 

解釋:datasize(默認不需要設置)

服務器可以使用的最大數據內存量。默認值爲default。這是一個在服務器系統內存中已經設置了的參數。如果服務器要超過這個限制的內存量,則會失敗,這將使服務器不能提供DNS服務。所以,這個選項作爲一種限制服務器所使用的內存量的方式就不太有效,但是它能夠將操作系統設置的太小的缺省數據尺寸增大。如果要限制服務器使用的內存量,可以使用max-cache-size和recursive-clients選項
max-cache-size number;
限制服務器可以用於緩存查詢答案的內存量。如果緩存增長的太大,就要在記錄的TTL到期之前將他們從緩存中刪除,從而確保內存的用量保持在穩定的限度內。
recursive-clients number;
限制服務器處理的併發遞歸查詢的數量,內存有限的服務器需要把這個限制降到比默認值還低。如果設置了不運行遞歸查詢(
recursion no;),就不需要設置這個了。

zone "." {

type hint;

file "named.ca"; #根區域文件,保證存儲正確的根服務器記錄

};

參考自《linux服務攻略》

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章