Linux下DNS配置文件詳解
Linux 下DNS 配置文件祥解最近,為了配置DNS 服務器我收集了不少有關(guān)配置DNS 服務器方面的資料。在這里我將這些資料加上我在配置DNS 服務器時的一些經(jīng)驗進行一下整理。希望能對和我一樣在配置
Linux 下DNS 配置文件祥解
最近,為了配置DNS 服務器我收集了不少有關(guān)配置DNS 服務器方面的資料。在這里我將這些資料加上我在配置DNS 服務器時的一些經(jīng)驗進行一下整理。希望能對和我一樣在配置DNS 服務器時遇到困難的朋友一些啟示。
DNS 服務器軟件即BIND 的安裝應該說是比較容易的,正常情況下是不會出現(xiàn)什么問題的。因此,本文在著重要討論的是DNS 服務器的幾個配置文件的配置問題。本文將以REDHA T8.0自帶的BIND9.2.1為依據(jù)進行討論。以下是本人這次配置DNS 服務器的幾個配置文件:
/etc/named.conf
/在NAMED.CONF 配置文件中使用//和/* */來進行注釋,
options { /*OPTIONS選項用來定義一些影響整個DNS 服務器的環(huán)境,如這里的DI RECTORY 用來指定在本文件指定的文件的路徑,如這里的是將其指定到 /var/named 下, 在這里你還可以指定端口等等。不指定則端口是53
*/
directory "/var/named";
}; //
//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN { //在這個文件中是用zone 關(guān)鍵字來定義域區(qū)的,一個zone 關(guān)鍵字定義一個域區(qū) type hint;
/*在這里type 類型有三種,它們分別是master,slave 和hint 它們的含義分別是:
master:表示定義的是主域名服務器
slave :表示定義的是輔助域名服務器
hint:表示是互聯(lián)網(wǎng)中根域名服務器
*/
file "named.ca"; //用來指定具體存放DNS 記錄的文件
};
zone "localhost" IN { //定義一具域名為localhost 的正向區(qū)域
type master;
file "localhost.zone" ;
allow-update { none; };
};
zone "test.net" IN { //指定一個域名為test.net 的正向區(qū)域
,type master;
file "test.net”
allow-update { none;};
};
zone "0.0.127.in-addr.arpa" IN { //定義一個IP 為127.0.0.*的反向域區(qū)
type master;
file "named.local";
allow-update { none; };
};
zone "0.192.168.in-addr.arpa" IN { //定義一個IP 為168.192.0.*反向域區(qū)
type master;
file "168.192.0";
/var/named/test.net文件
@ IN SOA linux.test.net. Webmaster.test.net. ( SOA表示授權(quán)開始
/*上面的IN 表示后面的數(shù)據(jù)使用的是INTERNET 標準。而@則代表相應的域名,如在這里代表test.net, 即表示一個域名記錄定義的開始。而linux.test.net 則是這個域的主域名服務器,而webmaster.test.net 則是管理員的郵件地址。注意這是郵件地址中用. 來代替常見的郵件地址中的@.而SOA 表示授權(quán)的開始
*/
2003012101 ; serial (d. adams) /*本行前面的數(shù)字表示配置文件的修改版本,格式是年月日當日修改的修改的次數(shù),每次修改這個配置文件時都應該修改這個數(shù)字,要不然你所作的修改不會更新到網(wǎng)上的其它DNS 服務器的數(shù)據(jù)庫上,即你所做的更新很可能對于不以你的所配置的DNS 服務器為DNS 服務器的客戶端來說就不會反映出你的更新,也就對他們來說你更新是沒有意義的。
*/
28800 ; refresh
/*定義的是以為單位的刷新頻率 即規(guī)定從域名服務器多長時間查詢一個主服務器,以保證從服務器的數(shù)據(jù)是最新的
*/
7200 ;retry
/*上面的這個值是規(guī)定了以秒為單位的重試的時間間隔,即當從服務試圖在主服務器上查詢更時,而連接失敗了,則這個值規(guī)定了從服務多長時間后再試
*/
3600000 ; expiry
/*上面這個用來規(guī)定從服務器在向主服務更新失敗后多長時間后清除對應的記錄,上述的數(shù)值是以分鐘為單位的
*/
8400 )
/*上面這個數(shù)據(jù)用來規(guī)定緩沖服務器不能與主服務聯(lián)系上后多長時間清除相應的記 錄
*/
IN NS linux
,IN MX 10 linux
linux IN A 168.192.0.14
it-test1 IN A 168.192.0.133
www IN CNAME linux
/*上面的第一列表示是主機的名字,省去了后面的域。
NS :表示是這個主機是一個域名服務器,
A :定義了一條A 記錄,即主機名到IP 地址的對應記錄
MX 定義了一郵件記錄
CNAME :定義了對應主機的一個別名
/var/named/168.192.0
@ IN SOA linux.test.net. webmastert.linux.net. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS linux.test.net.
/*以上的各關(guān)鍵字的含義跟test.net 是相同的
14 IN PTR linux.test.net.
133 IN PTR it-test1.test.net.
/*
上面的第一列表示的是主機的IP 地址。省略了網(wǎng)絡地址部分。如14完整應該是: 168.192.0.14
PTR :表示反向記錄
最后一列表示的是主機的域名。
Linux 下配置完整安全的DHCP 服務器詳解
DHCP 是動態(tài)主機配置協(xié)議. 這個協(xié)議用于向計算機自動提供IP 地址, 子網(wǎng)掩碼和路由信息。網(wǎng)絡管理員通常會分配某個范圍的IP 地址來分發(fā)給局域網(wǎng)上的客戶機。當設備接入這個局域網(wǎng)時,它們會向 DHCP 服務器請求一個 IP 地址。然后DHCP 服務器為每個請求的設備分配一個地址,直到分配完該范圍內(nèi)的所有 IP 地址為止。已經(jīng)分配的IP 地址必須定時地延長借用期。這個延期的過程稱作leasing ,確保了當客戶機設備在正常地釋放IP 地址之前突然從網(wǎng)絡斷開時被分配的地址可以歸還給服務器。本文以Redhat Linux 9.0為例,介紹如何建立一個完整和安全的DHCP 服務器。
,一、建立DHCP 服務器配置文件
可以使用Redhat Linux 9.0自身攜帶rpm 包安裝。安裝結(jié)束后, DHCP 端口監(jiān)督程序 dhcpd 配置文件是/etc目錄中的名為dhcpd.conf 的文件。下面手工建立/etc/dhcpd.conf文件。/etc/dhcpd.conf通常包括三部分:parameters 、declarations 、option 。
1.DHCP 配置文件中的parameters (參數(shù)):表明如何執(zhí)行任務,是否要執(zhí)行任務,或?qū)⒛男┚W(wǎng)絡配置選項發(fā)送給客戶。主要內(nèi)容見表1
參數(shù) 解釋
ddns-update-style 配置DHCP-DNS 互動更新模式。
default-lease-time 指定確省租賃時間的長度,單位是秒。
max-lease-time 指定最大租賃時間長度,單位是秒。
hardware 指定網(wǎng)卡接口類型和MAC 地址。
server-name 通知DHCP 客戶服務器名稱。
get-lease-hostnames flag 檢查客戶端使用的IP 地址。
fixed-address ip 分配給客戶端一個固定的地址。
authritative 拒絕不正確的IP 地址的要求。
2. DHCP 配置文件中的declarations (聲明):用來描述網(wǎng)絡布局、提供客戶的IP 地址等。主要內(nèi)容見表2:
聲明 解釋
shared-network 用來告知是否一些子網(wǎng)絡分享相同網(wǎng)絡。
subnet 描述一個IP 地址是否屬于該子網(wǎng)。
range 起始IP 終止IP 提供動態(tài)分配IP 的范圍。
host 主機名稱 參考特別的主機。
group 為一組參數(shù)提供聲明。
allow unknown-clients ﹔deny unknown-client 是否動態(tài)分配IP 給未知的使用者。 allow bootp;deny bootp 是否響應激活查詢。
allow booting﹔deny booting 是否響應使用者查詢。
2005520124131.htm 開始啟動文件的名稱,應用于無盤工作站。
next-server 設置服務器從引導文件中裝如主機名,應用于無盤工作站。
3. DHCP配置文件中的option (選項):用來配置DHCP 可選參數(shù),全部用option 關(guān)鍵字作為開始,主要內(nèi)容包括見表3:
,選項 解釋
subnet-mask 為客戶端設定子網(wǎng)掩碼。
domain-name 為客戶端指明DNS 名字。
domain-name-servers 為客戶端指明DNS 服務器IP 地址。
host-name 為客戶端指定主機名稱。
routers 為客戶端設定默認網(wǎng)關(guān)。
broadcast-address 為客戶端設定廣播地址。
ntp-server 為客戶端設定網(wǎng)絡時間服務器IP 地址。
time -offset 為客戶端設定和格林威治時間的偏移時間,單位是秒。
注意:如果客戶端使用的是視窗操作系統(tǒng),不要選擇"host-name" 選項,即不要為其指定主機名稱。
下面是一個筆者使用的DHCP 配置文件,這是一個C類網(wǎng)絡,共126個IP 地址可以分配的例子。讀者可以復制后使用,注意紅色部分是必須要修改的。
ddns-update-style interim;
ignore client-updates;
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.254;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option domain-name-servers 192.168.1.3;
option domain-name "www.cao.com"; #DNS名稱#
option domain-name-servers 192.168.1.3;
option time-offset -18000;
range dynamic-bootp 192.168.1.128 192.168.1.255;
default-lease-time 21600;
max-lease-time 43200;
host ns {
hardware ethernet 52:54:AB:34:5B:09;#運行DHCP 的網(wǎng)絡接口的MAC 地址# fixed-address 192.168.1.9;
}
}
,二、建立客戶租約文件
運行DHCP 服務器還需要一個名為 dhcpd.leases 的文件,保持所有已經(jīng)分發(fā)出去的 IP 地址。在Redhat Linux 發(fā)行版本中,該文件位于 /var/lib/dhcp/ 目錄中。如果您通過 RPM 安裝 ISC DHCP,那么該目錄應該已經(jīng)存在。dhcpd.leases 的文件格式為:
Leases address {statement }
一個典型的文件內(nèi)容如下:
lease 192.168.1.255 { #DHCP服務器分配的IP 地址#
starts 1 2005/05/02 03:02:26; # lease 開始租約時間#
ends 1 2005/05/02 09:02:26; # lease 結(jié)束租約時間#
binding state active;
next binding state free;
hardware ethernet 00:00:e8:a0:25:86; #客戶機網(wǎng)卡MAC 地址#
uid "10050$0 6"; #用來驗證客戶機的UID 標示#
client-hostname "cjh1"; #客戶機名稱#
}
注意lease 開始租約時間和lease 結(jié)束租約時間是格林威治標準時間(GMT ),不是本地時間。
第一次運行DHCP 服務器時dhcpd.leases 是一個空文件,也不用手工建立。如果不是通過 RPM 安裝 ISC DHCP,或者 dhcpd 已經(jīng)安裝,那么您應該試著確定 dhcpd 將其 lease 文件寫到何處,并確保該文件存在。也可以手工建立一個空文件:
#touch /var/lib/dhcp/dhcpd.leases
三、啟動和檢查DHCP 服務器
,使用命令啟動DHCP 服務器:
#service dhcpd start
使用ps 命令檢查dhcpd 進程:
#ps -ef | grep dhcpd
root 2402 1 0 14:25 ? 00:00:00 /usr/sbin/dhcpd
root 2764 2725 0 14:29 pts/2 00:00:00 grep dhcpd
使用檢查dhcpd 運行的端口:
# netstat -nutap | grep dhcpd
udp 0 0 0.0.0.0:67 0.0.0.0:* 2402/dhcpd
四、配置DHCP 客戶端
通常網(wǎng)管員使用選擇手工配置 DHCP 客戶,需要修改 /etc/sysconfig/network 文件來啟用聯(lián)網(wǎng);并修改 /etc/sysconfig/network-scripts 目錄中每個網(wǎng)絡設備的配置文件。在該目錄中,每個設備都有一個叫做 ifcfg-eth ? 的配置文件,eth ?是網(wǎng)絡設備的名稱。 如eth0等。如果你想在引導時啟動聯(lián)網(wǎng),NETWORKING 變量必須 被設為 yes 。 除了此處之外/etc/sysconfig/network 文件應該包含以下行:
NETWORKING=yes
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
五、DHCP 配置常見錯誤排除
,通常配置DHCP 服務器很容易,不過,在這里有一些技巧可以幫助您避免出現(xiàn)問題。對服務器而言,要確保網(wǎng)卡正常工作,并具備廣播功能。對客戶機而言,還要確??蛻魴C的網(wǎng)卡正常工作。最后,要考慮網(wǎng)絡的拓撲,并考慮客戶機向 DHCP 服務器發(fā)出的廣播消息是否會受到阻礙。另外如果dhcpd 進程沒有啟動,那么可以瀏覽 syslog 消息文件來確定是哪里出了問題。這個消息文件通常是 /var/log/messages。
典型故障:
1.DHCP 服務器配置完成,沒有語法錯誤。但是網(wǎng)絡中的客戶機卻沒辦法取得IP 地址。
通常是Linux DHCP 服務器沒有辦法接收來自255.255.255.255 的 DHCP 客戶機的Request 封包造成的。一般是Linux DHCP 服務器的網(wǎng)卡沒有設置具有MULTICAST 功能。為了讓dhcpd(dhcp程序的守護進程) 能夠正常的和DHCP 客戶機溝通,dhcpd 必須傳送封包到255.255.255.255這個IP 地址,但是有些Linux 系統(tǒng)里255.255.255.255這個IP 地址被用來做為監(jiān)聽區(qū)域子網(wǎng)域(local subnet)廣播的 IP 地址,所以需要在路由表(routing table)里加入255.255.255.255以激活MULTICAST 功能;
使用命令:
route add -host 255.255.255.255 dev eth0
如果報告錯誤消息:255.255.255.255:Unkown host
那么請先修改/etc/hosts加入一行:
255.255.255.255 dhcp
2. DHCP客戶端程序和DHCP 服務器不兼容
由于Linux 有許多發(fā)現(xiàn)版本,不同版本使用DHCP 客戶端程序和DHCP 服務器也不相同。Linux 提供了四種DHCP 客戶端程序:pump, dhclient, dhcpxd, 和dhcpcd 。了解不同Linux 發(fā)行版本的服務器端和客戶端程序?qū)τ诔R婂e誤排除是必要的。筆者曾經(jīng)遇到過使用SuSE Linux 9.1 DHCP服務器和使用Mandrake Linux 9.0客戶機不兼容的情況。此時就必須更換客戶端程序。方法是先停止客戶機的網(wǎng)絡服務,卸載原程序,安裝和服務器端兼容程序。附表:主要Linux 發(fā)行版使用的DHCP 客戶端。
發(fā)行版本
,缺省 DHCP 客戶端
可選 DHCP 客戶端
DHCP 客戶端啟動
腳本
附加配置文件
Red Hat Linux 9.0
dhclient
無
/sbin/ifup
/etc/sysconfig/network,
/etc/sysconfig/network-scripts/ifcfg-eth0
Debian Linux 3.0
dhclient
無
/sbin/ifup
/etc/network/interfaces,
/etc/dhclient.conf
Mandrake Linux 9.1
dhclient
dhcpcd, dhcpxd, pump
/sbin/ifup
/etc/sysconfig/network,
/etc/sysconfig/network-scripts/ifcfg-eth0, /etc/dhclient-eth0.conf
SuSE Linux 9.1
dhcpcd
dhclient
/sbin/ifup-dhcp
/etc/sysconfig/network/dhcp, /etc/sysconfig/network/ifcfg-eth0
六、DHCP 服務器的安全
1. 在指定網(wǎng)絡接口啟動DHCP 服務器
如果你的Linux 系統(tǒng)連接了不止一個網(wǎng)絡界面,但是你只想讓 DHCP 服務器啟動其中之一,
,你可以配置 DHCP 服務器只在那個設備上啟動。在 /etc/sysconfig/dhcpd 中,把界面的名稱添加到 DHCPDARGS 的列表中:
DHCPDARGS=eth0
或者直接使用命令:
Echo “DHCPDARGS=eth0”>> /etc/ sysconfig/dhcpd
這樣對于帶有兩個網(wǎng)卡的防火墻機器,更加安全:一個網(wǎng)卡可以被配置成 DHCP 客戶來從互聯(lián)網(wǎng)上檢索 IP 地址;另一個網(wǎng)卡可以被用作防火墻之后的內(nèi)部網(wǎng)絡的 DHCP 服務器。僅指定連接到內(nèi)部網(wǎng)絡的網(wǎng)卡使系統(tǒng)更加安全,因為用戶無法通過互聯(lián)網(wǎng)來連接它的守護進程。
2. 讓DHCP 服務器在監(jiān)牢中運行
所謂" 監(jiān)牢" 就是指通過chroot 機制來更改某個軟件運行時所能看到的根目錄,即將某軟件運行限制在指定目錄中,保證該軟件只能對該目錄及其子目錄的文件有所動作,從而保證整個服務器的安全。這樣即使出現(xiàn)被破壞或被侵入,所受的損失也較小。
將軟件chroot 化的一個問題是該軟件運行時需要的所有程序、配置文件和庫文件都必須事先安裝到chroot 目錄中,通常稱這個目錄為chroot jail (chroot" 監(jiān)牢" )。如果要在" 監(jiān)牢" 中運行dhcpd ,而事實上根本看不到文件系統(tǒng)中那個真正的目錄。因此需要事先創(chuàng)建目錄,并將dhcpd 復制到其中。同時dhcpd 需要幾個庫文件,可以使用ldd (library Dependency Display縮寫)命令,ldd 作用是顯示一個可執(zhí)行程序必須使用的共享庫。
ldd dhcpd