Linux下DNS服務器搭建詳解
DNS 即Domain Name System(域名系統)的縮寫,它是一種將ip地址轉換成對應的主機名或將主機名轉換成與之相對應ip地址的一種機制。其中通過域名解析出ip地址的叫做正向解析,通過ip地址解析出域名的叫做反向解析。
下面對DNS的工作流程及原理進行簡要說明
DNS的查詢流程:需要解析服務的Client先查看本機的/etc/hosts;若無結果,則client查看本地的DNS緩存服務器;若無結果,則查找所屬域的首選DNS服務器;若此時本地首選DNS服務器仍無法解析,則會想根域名服務器進行查詢或選擇轉發解析請求。
DNS的查詢規則:遞歸式查詢,即client向支持遞歸查詢的DNS Server發出解析請求,則自DNS服務器不論是自身直接解析還是無法解析想根發出請求,總會由其向client返回一個結果;迭代式查詢,即接收client解析請求的DNS Server,若其能夠解析則直接返回結果,若其不能解析將把解析請求交給其他DNS服務器,而不是自己親自將解析過程完成。
所謂的“根”服務器:根服務器主要用來管理互聯網的主目錄,全世界只有13臺。1個爲主根服務器,放置在美國。其餘12個均爲輔根服務器,其中9個放置在美國,歐洲2個,位於英國和瑞典,亞洲1個,位於日本。所有根服務器均由美國政府授權的互聯網域名與號碼分配機構ICANN統一管理,負責全球互聯網域名根服務器、域名體系和IP地址等的管理。
DNS記錄的類型:
A:Address 域名向ip地址轉換的記錄;
PTR:Printer ip地址向域名轉換的記錄;
NS:代表域內的dns服務器;
MX:代表域內的郵件服務器;
CNAME:域名的別名;
SOA:start of authority用於標示域內主DNS服務器。
提供DNS服務的軟件:BIND即Berkeley Internet Name Domain有加州大學伯克利分校研發是當今提供dns服務應用最廣的軟件。
下面讓我們進入正題,以下內容包括:DNS的緩存服務器、主/從服務器、子域授權、轉發以及視圖的配置步驟。
DNS緩存服務器
Ps:爲了更好的體會和理解dns的配置文件和域解析文件,作者在此只安裝bind包,以手動編輯的方式生成這幾個必須的文件。
1.安裝bind包
- yum install bind
2.創建住配置文件/etc/named.conf
- options {
- directory "/var/named"; #告知工作目錄
- };
- zone “.” IN {
- type hint; #聲明根域
- file "named.ca"; #根信息存放文件
- };
- zone "localhost" IN { #本地正解定義
- type master; #類型爲master
- file "localhost.zone"; #正解文件名
- };
- zone "0.0.127.in-addr.arpa" IN { #本地反解定義
- type master;
- file "named.local"; #反解文件名
- };
- chown :named /etc/named.conf
- #修改屬組給named
3.創建3個解析文件
named.ca
- dig -t NS . > /var/named/named.ca
- #向跟服務器發起查詢並重定向到目標文件
localhost.zone
- vim localhost. zone
- $TTL 86400
- #默認的ttl值
- @ IN SOA localhost. admin.localhost. (
- #主DNS服務器localhost.
- 2011081601
- #時間+序列號01
- 1H
- #刷新時間:每隔多久來master查詢更新
- 10M
- #重試時間間隔
- 7D
- #過期時間,如果7天仍找不到master,slave停止服務
- 1D
- #否定答案ttl值,表示查詢不到再次查詢需要時間
- )
- @ IN NS localhost.
- #當前域的DNS服務器是localhost.
- localhost. IN A 127.0.0.1
named.local
- vim named.local
- $TTL 86400
- @ IN SOA localhost. admin.localhost. (
- 2011081601
- 1H
- 10M
- 7D
- 1D
- )
- @ IN NS localhost.
- 1 IN PTR localhost
4.檢測配置文件語法
- named-checkconf
- named-checkzone “localhost” /var/named/localhost.zone
- named-checkzone “0.0.127.in-addr.arpa” /var/named/named.local
5.開啓服務並測試
- service named start
- dig -t A 域名 #測試正解
- dig -x ip地址 #測試反解
主DNS服務器配置
1.修改主配置文件
- vim /etc/name.conf
- zone "a.org" IN {
- type master;
- file "a.org.zone";
- };
- zone "0.168.192.in-addr.arpa" IN {
- type master;
- file "192.168.zone";
- };
2.生成解析文件
/var/named/a.org.zone
- $TTL 1200
- @ IN SOA ns1.a.org. admin.a.org. (
- 2011081601
- 1H
- 10M
- 7D
- )
- IN NS ns1.a.org. #NS包括主從兩臺服務器
- IN NS ns2.a.org.
- IN MX 10 mail.a.org.
- ns1.a.org. IN A 192.168.0.72 #兩臺服務器的ip的ip地址,否則主服務器無法向從服務器同步數據
- ns2.a.org. IN A 192.168.0.71
- www.a.org. IN A 192.168.0.73
- bbs.a.org. IN CNAME www.a.org.
- ftp.a.org. IN A 192.168.0.74
/var/named/192.168.zone
- $TTL 1200
- @ IN SOA ns1.a.org. admin.a.org. (
- 2011081601
- 1H
- 10M
- 7D
- 1D
- )
- @ IN NS ns1.a.org.
- IN NS ns2.a.org.
- 72 IN PTR ns1.a.org.
- 71 IN PTR ns2.a.org.
- 73 IN PTR www.a.org.
- 74 IN PTR ftp.a.org.
從DNS服務器配置
1.安裝bind包
- yum install bind
2.複製named.conf、localhost.zone和named.local到本地對應目錄
- scp 192.168.0.72:/etc/named.conf /etc/named.conf
- scp 192.168.0.72:/var/bind/localhost.zone /var/bind/localhost.zone
- scp 192.168.0.72:/var/bind/named.local /var/bind/named.local
3.修改主配置文件/etc/named.conf
- options {
- directory "/var/named";
- };
- zone “.” IN {
- type hint;
- file "named.ca";
- };
- zone "localhost" IN {
- type master;
- file "localhost.zone";
- };
- zone "0.0.127.in-addr.arpa" IN {
- type master;
- file "named.local";
- };
- zone "a.org." IN {
- type slave; #聲明從服務器
- file "slaves/a.org.zone"; #同步文件保存路徑
- masters { 192.168.0.72; }; #主服務器ip
- };
- zone "168.192.in-addr.arpa" IN {
- type slave;
- file "slaves/192.168.zone";
- master { 192.168.0.72; };
- };
4.啓動服務
- service named start
ps:服務正常啓動,且同步成功後/var/named/slaves/下會生成從主服務器同步過來的兩個解析文件
子域授權
所謂子域授權就是在原有域下聲明子域DNS。
當前位置:Master DNS Server
在a.org這個域中加入子域DNS服務器,tech.a.org.com
修改/var/named/a.org.zone內容
- $TTL 1200
- $ORIGIN .a.org.
- @ IN SOA ns1.a.org. admin.a.org. ( #在父域中聲明
- 2011081701
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.a.org.
- IN NS ns2.a.org.
- IN MX 10 mail.a.org.
- ns1 IN A 192.168.0.72
- ns2 IN A 192.168.0.71
- www IN A 192.168.0.73
- bbs IN CNAME www.a.org.
- ftp IN A 192.168.0.74
- tech.a.org. IN NS ns1.tech.a.org. #聲明子域DNS server的域名
- ns1.tech.a.org. IN A 192.168.0.71 #聲明子域DNS server的ip
創建子域DNS
1.先創建一個緩存DNS服務器,具體步驟見上文
2.創建/var/named/tech.a.org
- $TTL 1200
- $ORIGIN tech.a.org.
- @ IN SOA ns1.tech.a.org. admin.a.org. (
- 2011081701
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.tech.a.org.
- IN NS ns2.tech.a.org.
- IN MX 10 mail.tech.a.org.
- ns1 IN A 192.168.0.71
- ns2 IN A 192.168.0.73
- mail IN A 192.168.0.74
- www IN A 192.168.1.75
- ftp IN A 192.168.1.76
3.測試
- dig -t A ns1.tech.a.org @192.168.0.72
- #通過父域解析子域是可以實現的
- dig -t A ns1.tech.a.org @192.168.0.71
- #通過子域解析自己的也可以實現
- dig -t A ns1.a.org @192.168.0.71
- #此時通過子域解析父域就解析不到了
要實現此功能就要依賴轉發實現了。
DNS轉發
完全轉發:只要DNS server無法解析的請求就統統轉發到option中定義的forwarders上。
部分轉發:只轉發已經在聲明type forward; 所對應域的解析請求,對於其他域的解析請求按常規方法處理。
forward {only|first} 選項only:如果不能完成解析請求就向forwarder進行轉發,且進行遞歸式轉發(即不成功不停止);選項first:先請求遞歸,若沒有予以響應,使用迭代去找根;
配置完全轉發
- vim /etc/named.conf
- options { #定義在option則是完全轉發
- directory "/var/named";
- forward first; #轉發模式使用first
- forwarders { 192.168.0.72; }; #轉發到192.168.0.72(轉發至父域DNS server)
- };
配置部分轉發
- vim /etc/named.conf
- zone "a.org" IN { #聲明一個區域
- type forward; #定義此區域是一個轉發域,即域名匹配a.org就果斷轉發至192.168.0.72的forwarders上
- forwarders { 192.168.0.72; };
- };
視圖View
實現:內網用戶一套地址解析,外網訪問一套地址解析;來自不同的網絡的用戶,根據我們的部署返回不同網絡的主機。
目的:實現內網用戶與外網用戶通過視圖DNS對應兩套不同的解析策略
1.創建具有視圖功能DNS服務器的主配置文件/etc/named.conf
- acl internal { #聲明內網網段
- 192.168.0.0/24;
- 127.0.0.0/8;
- };
- acl external { #聲明外網網段
- 172.16.0.0/16;
- };
- options {
- directory "/var/named";
- recursion yes;
- };
- view "INNET" { #在試圖中定義內網
- match-clients { internal; }; #定義匹配的client
- recursion yes; #是否遞歸(默認是允許)
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "a.org"{
- type master;
- file "a.org.internal"; #使用解析內網的文件
- };
- };
- view "EXNET" { #在試圖中定義外網
- match-clients { external; }; #定義匹配的client
- recursion yes; #是否遞歸(默認是允許)
- zone "." IN {
- type hint;
- file "named.ca";
- };
- zone "a.org"{
- type master;
- file "a.org.external"; #使用解析外網的文件
- };
- };
2.編輯兩套不同的解析文件
內網:
- vim /var/named/a.org.internal
- $TTL 1200
- $ORIGIN .a.org.
- @ IN SOA ns1.a.org. admin.a.org. (
- 2011081701
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.a.org.
- IN NS ns2.a.org.
- IN MX 10 mail.a.org.
- ns1 IN A 192.168.0.72
- ns2 IN A 192.168.0.71
- www IN A 192.168.0.73
- bbs IN CNAME www.a.org.
- ftp IN A 192.168.0.74
外網:
- vim /var/named/a.org.external
- $TTL 1200
- $ORIGIN .a.org.
- @ IN SOA ns1.a.org. admin.a.org. (
- 2011081701
- 1H
- 10M
- 7D
- 1D
- )
- IN NS ns1.a.org.
- IN NS ns2.a.org.
- IN MX 10 mail.a.org.
- ns1 IN A 172.16.100.72
- ns2 IN A 172.16.100.71
- www IN A 172.16.100.73
- bbs IN CNAME www.a.org.
- ftp IN A 172.16.100.74
反解文件編輯與主從DNS反解文件相同,在此不再贅述。
3.測試
作者使用VMware虛擬機,在另一臺虛擬機中配置兩塊虛擬網卡分別是192.168.0.0和172.16.100.0網段。
- dig -t A www.a.org @192.168.0.71
- dig -t A www.a.org @172.16.100.71
- #分別測試兩網段的DNS解析
能夠返回兩套不同的解析結果,說明配置成功。