歡迎您光臨本站 註冊首頁

DNS相關,及在bind9中view視圖的使用方法

←手機掃碼閱讀     火星人 @ 2014-03-23 , reply:0

BLOG:karon.cublog.cn

A. DNS原理
這裡就是域名解析過程,想要詳細了解,可以通過抓DNS包,我只貌似抓到了一個請求包,但是應答包滅有抓到,我這裡有DNS包的欄位,誰有興趣我們一起研究一下>_<
B.bind軟體相關
rpm -qa bind*
bind-utils-9.3.3-7.el5
bind-chroot-9.3.3-7.el5
bind-9.3.3-7.el5
bind-libs-9.3.3-7.el5
注意:rhel5就提供這麼幾個包,和4有點不同,並且沒有/etc/named.conf文件,原因鬼才知道。
那麼這些東西都是做什麼的呢?
rpm -ql bind-utils-9.3.3-7.el5
/usr/bin/dig
/usr/bin/host
/usr/bin/nslookup
/usr/bin/nsupdate
注意:我所列出的不包括man文檔中的文件
這個包給出的是一些用於控制DNS伺服器的命令。
rpm -ql bind-chroot-9.3.3-7.el5
/var/named/chroot
/var/named/chroot/etc
/var/named/chroot/var
/var/named/chroot/dev
/var/named/chroot/var/named
/var/named/chroot/var/named/data
/var/named/chroot/var/named/slaves
/var/named/chroot/var/run
/var/named/chroot/var/run/named
/var/named/chroot/var/tmp
這個其實就是建立chroot文件和他的子文件夾,我們可以在DNS能夠進行正確解析的情況下來研究一下各個目錄有什麼變化,這個以後再說。
rpm -ql bind-libs-9.3.3-7.el5
這個就不列出來,都是庫文件。
rpm -ql bind-9.3.3-7.el5
/etc/dbus-1/system.d/named.conf
/etc/logrotate.d/named
/etc/rc.d/init.d/named
/etc/sysconfig/named
/usr/sbin/bind-chroot-admin
/usr/sbin/dns-keygen
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-signzone
/usr/sbin/lwresd
/usr/sbin/named
/usr/sbin/named-bootconf
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone
/usr/sbin/nameGetForwards
/usr/sbin/nameSetForwarda
/usr/sbin/rndc
/usr/sbin/rndc-confgen
/var/named
/var/named/data
/var/named/slaves
/var/run/named
這裡還有一些是doc和man的文檔,裡面有例子,介紹的很詳細,這些例子都比較好用強烈建議去看。Bv9arm文檔是bind的手冊,我是沒有時間看了,有興趣的可以搞。
問題:為什麼沒有我們需要配置的/etc/named.config文件?只有一個類似的/etc/dbus-1/system.d/named.conf,不過他不是,自己創建吧(真麻煩...)
PS:我們從這些亂78遭的文件和命令中得到什麼東西呢?起碼知道一些和bind有關的命令,還有bind所屬的文件夾,還有就是或許我們的服務無法啟用的時候,是不是少了那個軟體包的某某文件。。。再說,了解軟體不是什麼壞事情。

C:系統中的named服務
這個東西涉及shell,以後再說,不能放過他的。

D:配置named服務.
我們要自己做域名解析,不是託管。
假設我們有一個區域網,一個用做DNS伺服器的主機,3個伺服器web,mail,ftp
想想看我么要求什麼?
1,我們需要一個靜態IP,他是在網路上地址。(現在是我們只用一台主機做DNS)
2,如果需要長時間並且對外提供mail,ftp,web服務,那麼我們還需要3個靜態IP,一個伺服器一個。
3, 區域網內的機器,可以解析到外網。
4,外網用戶可以解析到我們的web,mail,ftp.但是他不可以解析到我們區域網的主機
5,我們需要一個域名 caterpillar.com
6, 我們只管理一個層次。恩,我不知道這種說法是不是確切,但是意思就是我們只管理一個域,域下面沒有其他的域。(這個說法我也不確定。)對這個比較通的同學希望可以解釋一下。
畫圖




新買的電腦還沒有裝word.
我忘記了畫DNS主機的區域網介面:地址是192.168.0.254
區域網內IP為192.168.0網段,主機名分別為karon,xeno,和mars
DNS靜態IP為123.66.88.254,主機名為ns1.
FTP靜態IP為123.66.88.1, 主機名為ftp
MAIL靜態IP為123.66.88.2,主機名為mail
WEB靜態IP為123.66.88.3,主機名為web
下面我們配置named.conf
曾經和別人討論過bind中view的使用,現在就用view來寫,view把系列的zone結合到一起來實現功能,是很有趣的東西。我用的是RHEL5,貌似和4有一點不同,不過原理一樣。
我們一段一段的來,並且要很細,便於以後翻閱>_<.
option {
directory "/var/named"; 默認路徑
dump-file "/var/named/data/cache_dump.db"; 這裡沒有寫錯,只有你用相對路徑的時候才會被加上默認路徑
startistice-file "/var/named/data/named_stats.txt"; 同上
};
option選項有很多.不用照這書抄,不寫的項採用默認的就可以了。
我們只寫這一段,然後named-checkconf.
Y~~居然成功,這個豬頭命令只檢查語法,並且他只檢查/etc/named.conf文件,還有,只寫一個option,居然發現named服務可以啟用,暈,他也是豬頭服務,看了一下rc中named的啟動腳本,果然和內容沒有任何關係。
acl "caterpillar's lan"{
127.0.0.1; 192.168.0.0/24;
};
創建一個訪問控制列表,定義的這個列表以後會用到。
我們需要知道的是,caterpillar's lan是一個名字而已,起什麼都可以,127.0.0.1是本機。192.168.0.0/24表示我們的區域網,
以後就可以用caterpillar's lan來代表我么的主機和區域網了。
注意:
地址列表可以用any,none,localnets,localhost.
any:任何主機
none:不匹配任何主機
localhost本地主機
localnets本地網路所有主機
還有,這裡的地址是IPv4的地址,ipv6目前還不支持呢。
controls {
inet 127.0.0.1 allow { localhost; };
};
這個語句東西寫成這個樣子其實沒用,你不寫的時候默認也是這樣的,
inet是監聽在127.0.0.1上面的一個控制通道的socket介面,而allow則確定了控制通道的能力,這裡是允許本機主機。
view "inside" {
match-clients { "caterpillar's lan"; };
recursion yes; 這裡表示在這個view中的所有請求,開啟遞歸查詢。

zone "." IN { IN為類,如果你不寫,那麼默認的就是IN類。
type hint; hint,這個么是根伺服器的特殊類型。
file "name.ca"; 文件在name.ca下。
};

zone "0.168.192.in-addr.arpa" IN {
type master;
file "caterpillar's arpalan.db";
}; 這個是對本機請求的反向解析。

zone "z-caterpillar.com" {
type master; 這個表示是在本機進行解析的。
file "db.caterpillar.com.inside";
allow-transfer { 192.168.0.2 }; 這個是域傳輸控制選項。
};
};
view這個東西功能是zone的一個集合,方便管理zone,如果你一個view都沒有的話,那麼他們是屬於一個view的,基本可以這麼理解。他可以分割DNS,正是這個功能才能讓我們方便的實現入站和出站的不同管理。
看看他要實現的功能:
可以對本機所在的所有機器發出的請求進行解析,另外,本機的主機可以進行逆向解析。
恩 就這些。
那麼根據域名解析過程。
我們這台DNS一定要可以到根伺服器, 所以zone .必須存在,zone 0.168.192.in-addr.arpa 用來實現逆向解析,zone "caterpillar.com"用來對請求進行解析。
view "outside" {
match-clients { any; }; 此視圖對應任何主機,一定要放在inside的後面,這樣acl中定義的主機就會先看到inside裡面的zone.
recursion no; 這裡把遞歸關掉,也就是說,我們的這台主機對於外來用戶的非本地請求無視,我自己的域名我解析,你到我這裡來查163?靠,想的美。門都沒有,我又不是根伺服器。

zone "." IN {
type hints;
file "name.ca";
} 每個view必須有zone "."

zone "caterpillar.com" { caterpillar.com的zone.
type master;
file "db.caterpillar.com.outside";
allow-transfer { 123.66.88.2; };
};
這個和上一個類似,但是沒有反向解析域,至於為什麼這麼做。外網用戶我們不允許他反向解析到我們,所以不需要反項解析域。

基本OK,和書上不同的是少logging,不過這沒有關係。

現在我們來看看,相關的區域文件怎麼寫。
name.ca 這個可以去下載,不需要自己寫。
db.caterpillar.com.inside
$TTL 86400
@ IN SOA ns1.caterpillar.com. zhaoliang.caterpillar.com. ( 2007060901;28800;14400;3600000;86400; )
主授權記錄,這個不用說了,前提是我有一個zhaoliang@caterpillar.com的郵箱,在我自己的mail伺服器上。後面和課堂上的有點不同,不過是一樣的。別忘記每次修改都要更新序列號。
@ IN NS ns1.caterpillar.com.
這句話的意思是,@域名的DNS伺服器是ns1.caterpillar.com,那麼他的IP是多少呢?下面有>_<.
@ MX 10 mail.caterpillar.com.
這個的意思是說,有@域名的郵件統統給我扔到mail.caterpillar.com.上去,那麼他的IP是多少呢,下面同樣有。其實這個就是郵件路由啊>_<
ns1 IN A 192.168.0.254
??,DNS伺服器的地址不是123.66.88.254么?怎麼可以用這個。別忘了我們這個view僅僅處理本機請求,用接在區域網上網卡的IP是最快的。
mail IN A 123.66.88.2
ftp IN A 123.66.88.1
web IN A 123.66.88.3
區別一下,以上的部分是為本地的對外請求提供服務。或許你覺得把伺服器和客戶機放在一個LAN里比較好,但是我覺得那不直觀。
karon IN A 192.168.0.1
xeno IN A 192.168.0.2
mars IN A 192.168.0.3
以上的部分是對內請求服務的。
好了OK了
db.caterpillar.com.outside
$TTL 86400
@ IN SOA ns1.caterpillar.com. zhaoliang.caterpillar.com. ( 2007060901;28800;14400;3600000;86400; )
@ IN SN ns1.caterpillar.com.
@ MX 10 mail.caterpillar.com.
ns1 IN A 123.66.88.254
這裡就需要用到外網的IP了
mail IN A 123.88.66.2
ftp IN A 123.88.66.1
web IN A 123.88.66.3
為什麼沒有本機的?這個view是對外網查詢的,我不喜歡他知道本地區域網的IP地址。
caterpiller's arpalan.db
$TTL
@ IN SOA ns1.caterpillar.com. zhaoliang.caterpillar.com. ( 2007060901:28800;14400;3600000;86400; )
@ IN NS ns1.caterpillar.com.
1 IN PTR karon.caterpillar.com.
2 IN PTR xeno.caterpillar.com.
3 IN PTR mars.caterpillar.com.
254 IN PTR ns1.caterpillar.com.


嘿嘿,搞定收工。

[火星人 ] DNS相關,及在bind9中view視圖的使用方法已經有530次圍觀

http://coctec.com/docs/linux/show-post-124491.html