一.DNS和BIND是什麼?linux
DNS即Domain Name Service的縮寫,即爲域名服務。在網絡出現之後,計算機的通訊就是經過IP地址加端口號等形式來進行,人對於數字的記憶每每卻有限,隨着連入網絡的用戶的不斷增多,用戶須要記住的IP地址愈來愈多,早期爲了方便使用,把每個IP地址對應爲一個主機名,如:www.domainname.com對應1.1.1.1形式,並把此種對應關係統一記錄於/etc/hosts(GNU/Linux下,windows則有所差別)文件中。可是後來連入網絡的用戶愈來愈多,管理hosts文件顯得十分繁瑣,隨後伯克利便研發出了專門實現將域名自動轉換爲IP地址的服務,名爲BIND,因此BIND是DNS的一種實現,可是因爲如今DNS服務基本都是基於BIND或者使用BIND進行二次開發的軟件來實現,因此BIND幾乎成了DNS的代名詞。windows
二.域以及BIND的工做方式bash
因爲聯網的用戶愈來愈多,爲了方便管理和實現,把域名又劃分爲多個層級,以’.’隔開,相似乎www.abcd.com這樣的域名,且從左往右依次層級更高,即com>abcd>www,按照這樣的等級,最右邊的域通常爲頂級域。而後負責管理其下一級的域名,在此約定把com稱做bdcd域的父域,bdcd稱爲com的子域,com是一個頂級域,如今各類常見頂級域以下所示:服務器
名稱網絡 |
含義dom |
comide |
公司、企業、營利機構測試 |
orgspa |
組織、非營利機構.net |
edu |
教育機構 |
cn |
國家或地區類(中國) |
gov |
政府單位 |
net |
網絡、通訊類 |
mil |
軍事單位 |
BIND的工做方式:
BIND在進行域名解析時,會根據用戶主機上設置的DNS服務器地址,首先找該地址,當設置的那臺DNS服務器上沒有用戶所須要的相關記錄時,若是該服務器設置可對當前主機進行遞歸查詢,那麼該服務器就會去找根服務器,在此所謂的根服務器就是放置在世界各地的十三臺特殊域名服務器,他們負責管理全部的域名相關事務。而後根服務器會根據用戶查詢的內容反饋信息,好比要解析的是一個com域,那麼根服務器就會告訴當前服務器去找負責com域的相關DNS服務器,而後當前DNS就會根據根反饋的com域的信息區找com,而若是com服務器上所負責的子域下有當前DNS要找的相關記錄,則也會反饋下一級域名服務器的信息,以此類推,知道找到真正負責解析用戶所給域名的服務器爲止。
三.搭建本身的DNS服務器
因爲要想搭建一個能在網絡中用的DNS服務器須要向上級註冊並獲得上級的許可才行,因此在此僅搭建一個能在局域網環境中用的DNS服務器。
1.實現解析本身的域名
實驗部署以下
域名 |
IP地址 |
www.linuxedu.com |
192.168.2.101 |
dns.linuxedu.com |
192.168.2.102 |
mail.linuxedu.com |
192.168.2.103 |
ftp.linuxedu.com |
192.168.2.101 |
如上所示,在當前局域網內使用域名linuxedu.com,域名內有三臺主機,www、dns、mail,其中www主機有個別名,名爲ftp。
步驟:
I 安裝BIND編輯其主配置文件,bind所須要的安裝包爲bind-libs (bind庫文件)bind-utils(bind其餘組件)和bind.x86_64 (bind主程序包),通常來講lib和util已經默認安裝,因此直接安裝bind主程序便可。
[root@localhost named]# yum remove bind -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Remove Process Resolving Dependencies --> Running transaction check ---> Package bind.x86_64 32:9.8.2-0.30.rc1.el6 will be erased --> Finished Dependency Resolution Dependencies Resolved Installed: bind.x86_64 32:9.8.2-0.30.rc1.el6 ......#中間信息已省略 Complete!
II 配置bind的主配置文件/etc/named.conf以下
options { directory "/var/named/"; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "1.0.0.127.in-addr.arpa.zone"; }; zone "linuxedu.com" IN { type master; file "linuxedu.com.zone"; }; zone "2.168.192.in-addr.arpa" IN { type master; file "2.168.192.in-addr.arpa.zone"; };
III 爲DNS服務器提供區域文件
在主配置文件中已經把BIND的工做目錄定位到了/vae/named下,如今切換目錄到/var/named/爲DNS提供區域文件
首先生成根域文件
[root@localhost named]# dig -t NS . >named.ca
新建本地迴環地址正向區域文件(localhost.zone)以下
$TTL 600
@ IN SOA loacalhost. localhost. (
2015042501
2M
3M
1D
1D
);
IN NS localhost.
localhost. A 127.0.0.1
~
爲本地迴環地址提供反向解析區域(1.0.0.127.in-addr.arpa.zone)文件以下
$TTL 600
@ IN SOA 0.0.127.in-addr.arpa. 0.0.127.in-addr.arpa. (
2015042501
1M
5M
1D
1D
);
IN NS localhost.
1 IN PTR localhost.
提供linuxedu.com域的正向解析區域文件(linuxedu.com.zone),文件內容以下
$TTL 600 $ORIGIN linuxedu.com. @ IN SOA ns.linuxedu.com. mail.linuxedu.com. ( 2015042501 1M 5M 1D 1D ); IN NS ns.linuxedu.com. IN MX 10 mail.linuxedu.com. ns IN A 192.168.2.102 www IN A 192.168.2.101 ftp IN CNAME www.linuxedu.com. mail IN A 192.168.2.103
爲linuxedu.com域提供反向解析區域文件(2.168.192.in-addr.arpa.zone)。其內容以下
$TTL 600 $ORIGIN 2.168.192.in-addr.arpa. @ IN SOA ns.linuxedu.com. mail.linuxedu.com. ( 2015042501 1M 5M 1D 1D ); IN NS ns.linuxedu.com. IN MX 10 mail.linuxedu.com. 2 IN PTR ns.linuxedu.com. 1 IN PTR www.linuxedu.com. ftp IN CNAME www.linuxedu.com. 3
修改主配置文件和區域文件的屬組爲named組並修改其權限爲640
[root@localhost named]# chown :named /etc/named.conf /var/named/*;chmod 640 /etc/named.conf /var/named/*
檢查主配置文件和區域文件是否有語法錯誤
[root@localhost named]# named-checkconf [root@localhost named]# named-checkzone "linuxedu.com" /var/named/linuxedu.com.zone zone linuxedu.com/IN: loaded serial 2015042501 OK [root@localhost named]# named-checkzone "2.168.192.in-addr.arpa" /var/named/2.168.192.in-addr.arpa.zone zone 2.168.192.in-addr.arpa/IN: loaded serial 2015042501 OK
重啓服務器並測試
[root@localhost named]# dig -t A www.linuxedu.com @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.linuxedu.com @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10358 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.linuxedu.com.INA ;; ANSWER SECTION: www.linuxedu.com.600INA192.168.2.101 ;; AUTHORITY SECTION: linuxedu.com.600INNSns.linuxedu.com. ;; ADDITIONAL SECTION: ns.linuxedu.com.600INA192.168.2.102 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Apr 26 05:54:02 2015 ;; MSG SIZE rcvd: 83
測試反向解析
[root@localhost named]# dig -x 192.168.2.101 @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.2.101 @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36267 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;101.2.168.192.in-addr.arpa.INPTR ;; ANSWER SECTION: 101.2.168.192.in-addr.arpa. 600INPTRwww.linuxedu.com. ;; AUTHORITY SECTION: 2.168.192.in-addr.arpa.600INNSns.linuxedu.com. ;; ADDITIONAL SECTION: ns.linuxedu.com.600INA192.168.2.102 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Apr 26 05:58:50 2015 ;; MSG SIZE rcvd: 107
到此本實驗成功
2.使用DNS實現主從同步
在現實生產環境中,一臺DNS每每是不夠的,由於要考慮其宕機的情景,因此至少得有一臺爲備用,在此在局域網環境內實現兩臺DNS服務器,並實現主從同步。
以實驗1的域名爲例,而且新增一臺DNS,其ip地址爲192.168.1.121,設置其爲從服務器。
按照上實驗步驟安裝好bind程序後,修改其主配置文件(/etc/named.conf),改其內容以下所示
options { directory "/var/named"; }; zone "." IN { type hint; file "named.ca"; }; zone "linuxedu.com" IN { type slave; masters { 192.168.2.120; }; file "slaves/linuxedu.com.zone"; }; zone "2.168.192.in-addr.arpa" IN { type slave; masters { 192.168.2.120; }; file "slaves/2.168.192.in-addr.arpa.zone"; };
因爲其爲從服務器,其區域文件從主服務器上傳輸過來,因此不須要爲其提供區域配置文件。接下來修改主服務器配置
Zone內部添加以下一條
allow-transfer { 192.168.2.121; };#:此意味容許從服務器進行區域傳輸注,根zone不能進行區域傳輸
重啓服務器並測試
[root@slaver slaves]# ll total 0 [root@slaver slaves]# service named restart Stopping named: . [ OK ] Starting named: [ OK ] [root@slaver slaves]# ll total 8 -rw-r--r--. 1 named named 463 Apr 26 06:23 2.168.192.in-addr.arpa.zone -rw-r--r--. 1 named named 412 Apr 26 06:23 linuxedu.com.zone
由上能夠看到,兩個區域文件已經傳送過來了。
解析測試
正向解析
ns.linuxedu.com.600INA192.168.2.102 ;; Query time: 1 msec ;; SERVER: 192.168.2.121#53(192.168.2.121) ;; WHEN: Sun Apr 26 06:24:33 2015 ;; MSG SIZE rcvd: 83
反向解析
[root@slaver slaves]# dig -x 192.168.2.103 @192.168.2.121 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.2.103 @192.168.2.121 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12803 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;103.2.168.192.in-addr.arpa.INPTR ;; ANSWER SECTION: 103.2.168.192.in-addr.arpa. 600INPTRmail.linuxedu.com. ;; AUTHORITY SECTION: 2.168.192.in-addr.arpa.600INNSns.linuxedu.com. ;; ADDITIONAL SECTION: ns.linuxedu.com.600INA192.168.2.102 ;; Query time: 2 msec ;; SERVER: 192.168.2.121#53(192.168.2.121) ;; WHEN: Sun Apr 26 06:24:52 2015 ;; MSG SIZE rcvd: 108
3.正向區域受權
域名是有等級的,由於域名是按一層層實現查找,因此下級域名要想起做用就得上級域名服務器對其受權。
在此以上個實驗作slave的服務器來作子域,其域名爲net.linuxedu.com,而後使用上個實驗的master作父域,對其受權。子域IP地址規劃以下:
主機 |
IP地址 |
www |
172.16.35.1 |
172.16.35.3 |
|
ns |
172.16.35.2 |
ftp |
172.16.35.1 |
首先編輯父域dns的linuxedu.com域,添加以下新條目,
net IN NS ns.net.linuxedu.com.
ns.net IN A 192.168.2.121
在父域dns的主配置文件的全局配置段options內添加兩天選項
dnssec-enable no;
dnssec-validation yes;
而後編輯子域服務,首先編輯其主配置文件
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "net.linuxedu.com" IN {
type master;
file "net.linuxedu.com.zone";
};
編輯子域區域文件內容(net.linuxedu.com.zone ),內容以下
$ORIGIN .
$TTL 600 ; 10 minutes
net.linuxedu.com IN SOA ns.linuxedu.com. mail.linuxedu.com. (
2015042501 ; serial
60 ; refresh (1 minute)
300 ; retry (5 minutes)
86400 ; expire (1 day)
86400 ; minimum (1 day)
)
NS ns.linuxedu.com.
MX 10 mail.linuxedu.com.
$ORIGIN net.linuxedu.com.
ftp CNAME www
mail A 172.16.35.3
ns A 172.16.35.2
www A 172.16.35.1
~檢查語法錯誤肯定無誤後重啓服務解析測試
解析測試
4.使用ACL及view實現針對客戶端的智能DNS解析
在生產環境中,有時須要把來自不一樣客戶端的解析請求解析爲不一樣的IP地址,此時就可使用ACL加view實現對來自客戶端的請求加以控制。
首先來講ACL,ACL即Access Countrol List的縮寫,在bind中能夠將不一樣的網絡地址歸到一個ACL列表裏,而後直接對該表實現設置訪問控制權限便可,BIND中的訪問控制列表默認有四個分別爲:
any;:任何人
none;:任何人都不能
localhost;:本機
localnets;:本機所在網絡
例1:定義個訪問控制列表,控制只響應來自192.168.2.121的主機對linuxedu.com域的解析請求
修改配置文件,在主機192.168.2.120中添加訪問控制列表,內容以下
acl bxy { 192.168.2.121; };
而後在zone內添加以下圖所示內容
重啓服務器測試
例2:使用視圖實現未來自不一樣主機的同一個解析請求解析爲不一樣的地址
以上述搭建好的環境爲例,以192.168.2.120作服務器,而後讓來自192.168.2.120解析linuxedu.com解析爲192.168.2網段,讓來自192.168.2.107的主機解析linuxedu.com解析爲192.168.1網段。
修改服務器主配置文件,主配置文件內容以下
options { directory "/var/named/"; }; acl liebiao1 { 192.168.2.121;# }; acl liebiao2 { 192.168.2.107; }; view jiexi1 { #視圖1 用來定義acl liebiao1中主機解析的請求去向 match-clients { liebiao1; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "1.0.0.127.in-addr.arpa.zone"; }; zone "linuxedu.com" IN { type master; file "linuxedu.com.zone"; }; zone "2.168.192.in-addr.arpa" IN { type master; file "2.168.192.in-addr.arpa.zone"; }; };
view jiexi2 { #視圖2 用來控acl liebiao2中的主機的解析去向
match-clients { liebiao2; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "1.0.0.127.in-addr.arpa.zone"; }; zone "linuxedu.com" IN { type master; file "linuxedu.com.zone.1"; }; zone "1.168.192.in-addr.arpa" IN { type master; file "1.168.192.in-addr.arpa.zone"; }; };
測試:
使用192.168.2.107解析
使用192.168.2.121解析
總算寫完了,雖然還要編譯啥的沒寫 不過來不及了,明天還得上課。。