linux DNS
DNS服務器是計算機域名系統 (Domain Name System 或Domain Name Service) 的縮寫,它是由解析器和域名服務器組成的。域名服務器是指保存有該網絡中所有主機的域名和對應IP地址,并具有將域名轉換為IP地址功能的服務器。其中域名必須對應一個IP地址,而IP地址不一定有域名。域名系統采用類似目錄樹的等級結構。域名服務器為客戶機/服務器模式中的服務器方,它主要有兩種形式:主服務器和轉發服務器。將域名映射為IP地址的過程就稱為“域名解析”。
在linux中將這種協議實現的app叫做bind,我們適應rpm -ql 查看bind軟件安裝時都給我們安裝了些什么目錄和文件:
/etc/named:DNS的配置文件
/etc/named:DNS的主配置文件
/etc/rc.d/init.d/named:服務啟動腳本
/etc/rndc.conf:遠程管理DNS服務器的工具
/etc/rndc.key:遠程管理DNS服務器的秘鑰
/etc/sysconfig/named:DNS系統配置文件
注釋:rndc: Remote Name Domain Controller 遠程管理BIND的工具 rndc: 密鑰 rndc: 持有一半密鑰,保存于rndc的配置文件中 BIND:持有一半密鑰,保存于主配置文件中
rndc的配置文件/etc/rndc.conf CentOS, RHEL: 密鑰文件/etc/rndc.key
以及安裝bind軟件包默認的二進制可執行文件
/usr/sbin/rndc-confgen:使用此命令可以生成秘鑰文件
/usr/sbin/named:DNS服務二進制可執行文件
/usr/sbin/named-checkconf:檢查主配置文件是否有語法錯誤
/usr/sbin/named-checkzone:檢查區域配置文件是否有語法錯誤
/var/log/named.log:DNS服務器的日志文件
/var/named:DNS的區域配置文件保存在此目錄中
/var/named/slaves:主輔同步時,輔DNS服務器默認的區域配置文件保存在此目
/var/named/run:運行時會在/var/run/目錄下有一個named進程的pid:named.pid
下面列出 /etc/named.conf 中使用的常用配置語句。
named.conf 中使用的常用配置語
下面對常用的語句作進一步的說明。
include
include 語句的功能為:將指定的文件引入 named.conf 主配置文件。語法為:
include "path";建議使用絕對路徑
若使用相對路徑,則相對于 directory 選項指定的目錄
options
options 用于定義全局配置選項,語法為:
options { 配置子句; 配置子句;};下面列出一些常用的全局配置子句。
| directory “path” | 定義服務器區數據庫文件的工作目錄,配置文件中所有使用的相對路徑,指的都是在這里配置的目錄下。Ubuntu 默認為 /var/cache/bind |
| notify yes/no | 若 named 是主服務器,當區數據庫變化時將自動通知相應區的從服務器,默認為 yes |
| recursion yes/no | 是否使用遞歸式 DNS 服務器,默認為 yes |
| transfer-format one-answer/many-anser | 設置從主服務器向從服務器復制數據的方式,使用在主域名服務器上,是否允許在一條消息中放入多條應答信息,默認值為 many-answer |
| forwarders {IPaddrs} | 設置全局轉發器,列出要用作轉發器的服務器 IP 地址 |
| forward only/first | 若值為 only,則服務器緩存數據并查詢轉發器,但從不查詢其他的任何服務器,若轉發器不能響應查詢則查詢失敗;若值為 first,則在轉發查詢失敗或沒有查到結果時,會在本地發起正常查詢。默認為 first |
zone
zone 區聲明是配置文件中最重要的部分。Zone 語句的格式為:
zone ?“zone-name” IN { type ?子句; file 子句; 其他子句;};下面列出一些常用的 zone 配置子句。
| type master/slave/hint/forward | 說明一個區的類型。master:說明一個區為主域名服務器;slave說明一個區為輔助域名服務器;hint:說明一個區為根服務器的線索;forward:說明一個區為轉發區 |
| file “filename” | 說明一個區的域信息源數據庫信息文件名 |
DNS 數據庫
一個域的 DNS 數據庫是由這個域的主域名服務器的管理員所維護的文本文件的集合。這些文件經常被稱為區文件,區文件定義了一個區的域名信息。Ubuntu 默認將區文件存放在 /var/cache/bind 目錄下。
每個區文件都是由若干個資源記錄(RR,resource records)和分析器指令所組成。
資源記錄簡介
標準資源記錄的基本格式是:
[name] ?[ttl] ?[class] ?type ?data各個字段之間由空格或制表符分隔,字段可以包含如下的特殊字符:
; — 引出注釋
@ — 表示當前域
() — 允許數據跨行,通常用于 SOA 記錄
* — 僅用于 name 字段的通配符
name 字段
name 字段說明資源記錄引用的對象名,可以是一臺單獨的主機也可以是個域名。
對象名可以是相對域名或全域名,全域名應該以“.”結束
若幾條連續的 RR 記錄涉及同一個對象名,則第一條 RR 記錄后的 RR 記錄可以省略對象名
若出現字段名字段,則必須出現在第一個字段
ttl 字段
ttl(time to live) 字段是一個壽命字段。它以秒為單位定義該資源記錄中的信息存放在高速緩存中的時間長度。通常省略該字段,而使用位于文件開始處的 $TTL 語句所指定值。
class 字段
class 字段用于指定網絡類型,可選的值有:IN、CH 和 HS,其中 IN (Internet)是廣泛使用的一種。雖然 IN 是該字段的默認值,但通常我們會顯示地指出。
type 字段
type 字段用于說明 RR 的類型。常用的 RR 類型如下:
| SOA (Start Of Authority) | SOA 記錄標示一個授權區定義的開始。SOA 記錄后的所有信息是控制這個區的 |
| NS (Name Server) | 標識區的域名服務器以及授權子域 |
| A (Address) | 用于將主機名轉換為 IP 地址,任何一個主機都只能有一個 A記錄 |
| PTR (PoinTeR) | 將地址轉換為主機名 |
| MX (Mail eXchanger) | 郵件交換記錄。控制郵件的路由 |
| KEY (Public Key) | 儲存一個關于DNS 名稱的公鑰 |
| NXT (Next) | 與 DNSSEC 一起使用,用于指出一個特定名稱不在域中 |
| SIG (Signatrue) | 指出帶簽名和身份認證的區信息,細節見 RFC 2535 |
| CNAME (Canonical NAME) | 給定主機的別名,主機的規范名在A記錄中給出 |
| SRV (Services) | 指出知名網絡服務的信息 |
| TXT (Text) | 注釋或非關鍵的信息 |
關于RR 的書寫順序
SOA RR 應該放在最前面
通常 NS RR 緊跟在 SOA RR 之后
其他記錄的順序無關緊要
data 字段
data 字段的內容取決于 RR 的類型字段。
常用的資源記錄
SOA 資源記錄
SOA RR 用于標示一個區的開始,其格式如下:
zone ? ? ?IN ? ? ?SOA ? Hostname ?Contact ( ? ? ? ? ? ? ? ? ? ? ? ?SerialNumber ? ? ? ? ? ? ? ? ? ? ? ?Refresh ? ? ? ? ? ? ? ? ? ? ? ?Retry ? ? ? ? ? ? ? ? ? ? ? ?Expire ? ? ? ? ? ? ? ? ? ? ? ?Minimum )
zone ? ? ?IN ? ? ?SOA ? Hostname ?Contact ( ? ? ? ? ? ? ? ? ? ? ? ?SerialNumber ? ? ? ? ? ? ? ? ? ? ? ?Refresh ? ? ? ? ? ? ? ? ? ? ? ?Retry ? ? ? ? ? ? ? ? ? ? ? ?Expire ? ? ? ? ? ? ? ? ? ? ? ?Minimum )
SOA 記錄的數據說明
Hostname設置被緩存的否定回答的存活時間
列如:
? ? ? ? ? ? ? ?SOA:
? ? ? ? ? ? ? ?name: 區域名稱, 通常可以簡寫為@,例如:Mozilla.com.
? ? ? ? ? ? ? ?value: 主DNS服務器的FQDN
? ? ? ? ? ? ? ?注意:SOA必須是區域數據庫文件第一條記錄
? ? ? ? ? ? ? ?例子:@ ? ? ?600 ? ? ? ?IN ?SOA ?ns.magedu.com. ?dnsadmin.magedu.com. ?(
? ? ? ? ? ? ? ? ? ? ? ?serial number ;序列號,十進制數字,不能超過10位,通常使用日期,例如2014031001
? ? ? ? ? ? ? ? ? ? ? ?refresh time ?;刷新時間,即每隔多久到主服務器檢查一次
? ? ? ? ? ? ? ? ? ? ? ?retry time ? ?;重試時間,應該小于refresh time
? ? ? ? ? ? ? ? ? ? ? ?expire time ? ;過期時間
? ? ? ? ? ? ? ? ? ? ? ?negative answer ttl ?;否定答案的ttl
? ? ? ? ? ? ? ?) ?
NS:name: 區域名稱,通常可以簡寫為@ ?value: DNS服務器的FQDN(可以使用相對名稱)
例子:@ ? ? 600 ? ? IN ?NS ?ns
A: 只能定義在正向區域數據庫文件中 name: FQDN(可以使用相對名稱) value: IP
例子:
? ? ? ? ? ? ? ? ? ?www ? ? ? ?600 ? ? ? ?IN ? ? ? ? A ? ? ? ? ? ? 1.2.3.4
? ? ? ? ? ? ? ? ? ?www ? ? ? ?600 ? ? ? ?IN ? ? ? ? A ? ? ? ? ? ? 1.2.3.5
? ? ? ? ? ? ? ? ? ?www ? ? ? ?600 ? ? ? ?IN ? ? ? ? A ? ? ? ? ? ? 1.2.3.4
? ? ? ? ? ? ? ? ? ?ftp ? ? ? ?600 ? ? ? ?IN ? ? ? ? A ? ? ? ? ? ? 1.2.3.4 ? ? ? ? ? ?
MX: 可以有多個 name: 區域名稱,用于標識smtp服務器 value: 包含優先級和FQDN 優先級:0-99, 數字越小,級別越高; 例子:
? ? ? ? ? ? ? ? ? ?@ ? ? 600 ? ? IN ? ? MX ? 10 ? mail
? ? ? ? ? ? ? ? ? ?@ ? ? 600 ? ? IN ? ? MX ? 20 ? mail2
CNAME: name: FQDN value: FQDN 例子:
? ? ? ? ? ? ? ? ? ?ftp ? ? IN ? ? CNAME ?www
? ? ? ? ? ? ? ? ? ?mail ? ? ?IN ?CNAME ?www
PTR: IP-->FQDN, 只能定義在反向區域數據文件中,反向區域名稱為逆向網絡地址加.in-addr.arpa.后綴組成 ? name: IP, 逆向的主機地址,例如172.16.100.7的name為7.100,完全格式為7.100.16.172.in-addr.arpa. value: FQDN
? ? ? ? ? ? ? ? ? ?例子:
? ? ? ? ? ? ? ? ? ?4.3.2 ? ? ? ? 600 ? ? ?IN ? ? ?PTR ? ? ?www.Mozilla.com.
區域傳送:
? ? ? ?輔助DNS服務器從主DNS服務器或其它的輔助DNS服務器請求傳輸數據的過程;完全區域傳送:傳送區域的所有數據, AXFR(主輔第一次同步更新傳送區域時) 增量區域傳送:傳送區域中改變的數據部分,IXFR(當主DNS服務器每次修改序列號時間)
構建主從服務器
主DNS服務器的配置文件
在主配置文件下我們添加一個名為Mozilla.com的區域allow-transfer只允許指定ip傳送區域文件
然后再到/var/named/下創建一個與file:Mozilla.com.zone 同名的文件,指定輔助DNS服務器的IP地址
然后再去修改/etc/rc.d/init.d/named 將 -a 后面加上-r /dev/random 叫他默認去/dev/random下讀取隨機數
啟動服務
查看pid
查看系統服務的端口,DNS服務器默認監聽在53端口
使用客戶端驗證, nslookup 命令 set q=A ?說明請求的是A記錄
然后再到DNS2創建一個名為Mozilla.con的域,type:slave file:slaves/Mozilla.com
檢查配置文件是否有語法錯誤
啟動服務之后,查看日志
然后cd到指定目錄下查看:區域配置文件是否同步,同步成功
使用nslookup查看輔助服務器是否運行正常,能夠正常解析域名
子域授權
如下圖所示:在DNS1配置文件中添加,授權子域的ns記錄以及對用的A記錄,以及將序列號改成6
如下圖所示:使用named-checkzone 檢查配置文件是否有語法錯誤
如下圖所示:重新加載服務配置文件,查看日志 傳送完成沒有任何的錯誤信息
如下圖所示:
輔助DNS服務器也要手動重新加載數據庫,因為同步時間還沒到,我們在這里我們設置的一天, 數據已經成功更新過來了,增量區域傳送:傳送區域中改變的數據部分,IXFR(
如下圖所示:在子域服務器上添加區域“FireFox.Mozilla.com”
如下圖所示:同樣/var/named/下創建一個與file:FireFox.Mozill.com.zone相同名稱的文件
如下圖所示:檢查配置文件
如下圖所示:啟動服務
如下圖所示:在父DNS服務器上解析子域的A記錄www.FireFox.Mozilla.com ?解析成功
如下圖所示:驗證
構建DNS轉發器
如下圖所示:在option字段設置全局轉發,以及區域轉發(區域轉發,只轉發該區域的名稱解析)
如下圖所示:創建區域配置文件
如下圖所示:創建區域名稱解析配置文件
如下圖所示:驗證
#####:如下所示:定義acl創建視圖區域
// named.conf
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
// See /usr/share/doc/bind*/sample/ for example named configuration files.
acl ? ?in_net {
? ?192.168.1.0/24;
? ?192.168.10.0/24;
};
acl ? ?ex_net {
? ?220.220.1.0/24;
};
options {
? ?directory ? ? "/var/named";
? ?forward ? ? only;
? ?forwarders { 192.168.1.4; };
# ? ?dump-file ? ? "/var/named/data/cache_dump.db";
# ? ? ? ?statistics-file "/var/named/data/named_stats.txt";
# ? ? ? ?memstatistics-file "/var/named/data/named_mem_stats.txt";
# ? ?allow-query ? ? { localhost; };
? ?recursion yes;
# ? ?dnssec-enable yes;
# ? ?dnssec-validation yes;
# ? ?dnssec-lookaside auto;
? ?/* Path to ISC DLV key */
};
logging {
? ? ? ?channel default_debug {
? ? ? ? ? ? ? ?file "data/named.run";
? ? ? ? ? ? ? ?severity dynamic;
? ? ? ?};
};
view ?in_net {
match-clients { in_net; };
zone "." IN {
? ?type hint;
? ?file "named.ca";
};
zone "localhost.localdomain" IN {
? ? ? ?type master;
? ? ? ?file "named.localhost";
? ? ? ?allow-update { none; };
};
zone "localhost" IN {
? ? ? ?type master;
? ? ? ?file "named.localhost";
? ? ? ?allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
? ? ? ?type master;
? ? ? ?file "named.loopback";
? ? ? ?allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
? ? ? ?type master;
? ? ? ?file "named.loopback";
? ? ? ?allow-update { none; };
};
zone "0.in-addr.arpa" IN {
? ? ? ?type master;
? ? ? ?file "named.empty";
? ? ? ?allow-update { none; };
};
zone "Mozilla.com" IN {
? ? ? ?type master;
? ? ? ?file "Mozilla.com.in_net";
};
zone "Google.com" IN {
? ? ? ?type forward;
? ? ? ?forwarders { 192.168.1.4; };
};
};
view ex_net {
zone "Mozilla.com" IN {
? ? ? ?type master;
? ? ? ?file "Mozilla.com.ex_net";
};
zone "Google.com" IN {
? ? ? ?type forward;
? ? ? ?forwarders { 192.168.1.4; };
};
};
泛域名解析
? ? ? ?* ? ?IN ? ? ? ? A ? ? ? ? ?172.16.100.7
如下圖所示:使用命令檢查區域配置文件
如下圖所示:公司內網的用戶請求web服務解析到192.168.10.6
如下圖所示:互聯網的用戶去求web服務將被解析到220.22.22.22
編譯安裝named: 前提:配置好開發環境,安裝包組
1、下載源代碼,編譯安裝 # tar xf bind-9.9.5.tar.gz ?# cd bind-9.9.5 ?# ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --enable-threads --enable-epoll --disable-chroot # make && make install
2、創建主配置文件 # vim /etc/named/named.conf
3、創建區域數據文件
4、創建用戶,并測試啟動
? ? ? ? ? ? ? ?# groupadd -g 53 -r named
? ? ? ? ? ? ? ?# useradd -g named -r named
? ? ? ? ? ? ? ?# chown root:named /etc/named/* /var/named/*
? ? ? ? ? ? ? ?# chmod 640 /etc/named/named.conf /var/named/*
? ? ? ? ? ? ? ?# echo 'export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH' > /etc/profile.d/named.sh
? ? ? ? ? ? ? ?# source /etc/profile.d/named.sh
測試啟動:
? ? ? ? ? ? ? ?# named -u named
5、rndc
? ? ? ? ? ? ? ?# rndc-confgen -r /dev/urandom > /etc/named/rndc.conf
? ? ? ? ? ? ? ?# chown root:named /etc/named/rndc.conf
? ? ? ? ? ? ? ?# chmod 640 /etc/named/rndc.conf
? ? ? ? ? ? ? ?把rndc.conf文件的后半部分復制到named.conf中并按指示啟用;
6、提供服務腳本
如下圖所示:定義PATH環境變量
如下圖所示:rndc: 持有一半密鑰,保存于rndc的配置文件中 BIND:持有一半密鑰,保存于主配置文件中 rndc的配置文件/etc/rndc.conf CentOS, RHEL: 密鑰文件/etc/rndc.key
如下圖所示:rndc的配置文件/etc/rndc.conf
如下圖所示:BIND:持有一半密鑰,保存于主配置文件中
如下圖所示:編寫服務啟動腳本
#!/bin/bash
#
# description: named daemon
# chkconfig: - 25 80
#
pidFile=/usr/local/bind9/var/run/named.pid
lockFile=/var/lock/subsys/named
confFile=/etc/named/named.conf
[ -r /etc/rc.d/init.d/functions ] && . /etc/rc.d/init.d/functions
start() {
? ? ? ?if [ -e $lockFile ]; then
? ? ? ? ? ? ? ?echo "named is already running..."
? ? ? ? ? ? ? ?exit 0
? ? ? ?fi
? ? ? ?echo -n "Starting named:"
? ? ? ?daemon --pidfile "$pidFile" /usr/local/bind9/sbin/named -u named -c "$confFile"
? ? ? ?RETVAL=$?
? ? ? ?echo
? ? ? ?if [ $RETVAL -eq 0 ]; then
? ? ? ? ? ? ? ?touch $lockFile
? ? ? ? ? ? ? ?return $RETVAL
? ? ? ?else
? ? ? ? ? ? ? ?rm -f $lockFile $pidFile
? ? ? ? ? ? ? ?return 1
? ? ? ?fi
}
stop() {
? ? ? ?if [ ! -e $lockFile ]; then
? ? ? ? ? ? ? ?echo "named is stopped."
? ? ? ?# ? ? ? exit 0
? ? ? ?fi
? ? ? ?echo -n "Stopping named:"
? ? ? ?killproc named
? ? ? ?RETVAL=$?
? ? ? ?echo
? ? ? ?if [ $RETVAL -eq 0 ];then
? ? ? ? ? ? ? ?rm -f $lockFile $pidFile
? ? ? ? ? ? ? ?return 0
? ? ? ?else
? ? ? ? ? ? ? ?echo "Cannot stop named."
? ? ? ? ? ? ? ?failure
? ? ? ? ? ? ? ?return 1
? ? ? ?fi
}
restart() {
? ? ? ?stop
? ? ? ?sleep 2
? ? ? ?start
}
reload() {
? ? ? ?echo -n "Reloading named: "
? ? ? ?killproc named -HUP
? ? ? ?#killall -HUP named
? ? ? ?RETVAL=$?
? ? ? ?echo
? ? ? ?return $RETVAL
}
status() {
? ? ? ?if pidof named &> /dev/null; then
? ? ? ? ? ? ? ?echo -n "named is running..."
? ? ? ? ? ? ? ?success
? ? ? ? ? ? ? ?echo
? ? ? ?else
? ? ? ? ? ? ? ?echo -n "named is stopped..."
? ? ? ? ? ? ? ?success
? ? ? ? ? ? ? ?echo
? ? ? ?fi
}
usage() {
? ? ? ?echo "Usage: named {start|stop|restart|status|reload}"
}
case $1 in
start)
? ? ? ?start ;;
stop)
? ? ? ?stop ;;
restart)
? ? ? ?restart ;;
status)
? ? ? ?status ;;
reload)
? ? ? ?reload ;;
*)
? ? ? ?usage
? ? ? ?exit 4
? ? ? ?;;
esac
如下圖所示:編輯測試文件,使用queryperf工具對我們的DNS服務器做壓力測
轉載于:https://blog.51cto.com/chrome/1379289
總結
- 上一篇: postman-持续更新
- 下一篇: 苹果发布被拒绝的种种惨剧