A1-DNS 基础服务器配置
一 源码方式安装DNS服务器(bind9)
- 1.1 下载bind
- wget -c ftp://ftp.isc.org/isc/bind9/9.9.0/bind-9.9.0.tar.gz
- 1.2 解压
- tar zxf bind-9.9.0.tar.gz && cd bind-9.9.0
- 1.3 配置/编译/安装 bind9.9
- //enable-threads 开启多线程;
- //disable-openssl-version-check 关闭openssl 版本检查
- ./configure --prefix=/usr/local/named --enable-threads --disable-openssl-version-check
- make && make install
- 1.4 获取named.root文件
- mkdir -p /usr/local/named/master
- wget -c http://www.internic.net/domain/named.root -P /usr/local/named/master/
- 1.5 生成 rndc配置文件
- /usr/local/named/sbin/rndc-confgen > /usr/local/named/etc/rndc.conf
- 1.6 编辑 named.conf配置文件
- cd /usr/local/named/etc/
- tail -n10 rndc.conf | grep -v 'End of named.conf' |sed -e 's/^#[ ]//g' > /usr/local/named/etc/named.conf
- //named.conf
- cat >> named.conf <<EOF
- options {
- directory"/usr/local/named";
- pid-file"/usr/local/named/log/named.pid";
- version"None";
- listen-on{ any; };
- allow-query { any; };
- #allow-query-cache { none; };
- #allow-recursion { corpnets; };
- #allow-recursion { none; };
- allow-transfer { none; };
- };
- logging {
- channel queries_info {
- file "/usr/local/named/log/queries.log" versions 1 size 100m;
- severity info;
- print-category yes;
- print-severity yes;
- print-time yes;
- };
- category queries {
- queries_info;
- default_debug;
- };
- channel notify_info {
- file "/usr/local/named/log/notify.log" versions 8 size 128m;
- severity info;
- print-category yes;
- print-severity yes;
- print-time yes;
- };
- category notify {
- notify_info;
- default_debug;
- };
- };
- zone "." {
- type hint;
- file "master/named.root";
- };
- zone "test.com" {
- type master;
- file "master/test.com.db";
- };
- zone "57.168.192.in-addr.arpa" IN {
- type master;
- file "master/192.168.57.db";
- };
- EOF
- cd /usr/local/named/master/
- //test.com 正解
- cat > test.com.db <<EOF
- \$TTL 600
- @ IN SOA ns1.test.com. root.test.com. (
- 2009050401
- 3600
- 600
- 3600000
- 1800 )
- @ IN NS ns1.test.com.
- ns1 IN A 192.168.57.71
- www IN A 192.168.57.71
- monitor IN A 192.168.57.70
- EOF
- //test.com 反解
- cat > 192.168.57.db <<EOF
- \$TTL 600
- @ IN SOA ns1.test.com. root.test.com. (
- 2009050401
- 3600
- 600
- 3600000
- 1800 )
- @ IN NS ns1.test.com.
- 71 IN PTR ns1.test.com.
- 71 IN PTR www.test.com.
- 70 IN PTR monitor.test.com.
- EOF
- 1.7 启动named
- /usr/local/named/sbin/named -c /usr/local/named/etc/named.conf
- 7.1 重新载入配置
- /usr/local/named/sbin/rndc reload
- 1.8 验证named
- ps -ef | grep named
- root 26877 26029 0 14:06 pts/0 00:00:00 /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf
- 1.9 DNS 使用tcp/udp 53端口
- grep -i 'domain' /etc/services | head -n2
- domain 53/tcp # name-domain server
- domain 53/udp
- lsof -i :53 | head -n3
- COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
- named 26877 root 20u IPv4 3398263 TCP one.test.com:domain (LISTEN)
- named 26877 root 21u IPv4 3398265 TCP localhost:domain (LISTEN)
- 1.10 named 相关日志
- tail -n4 /var/log/messages
- May 4 12:21:31 four named[14422]: zone test.com/IN: NS 'ns1.test.com' has no address records (A or AAAA)
- May 4 12:21:31 four named[14422]: zone test.com/IN: not loaded due to errors. //错误
- May 4 12:21:31 four named[14422]: all zones loaded
- May 4 12:21:31 four named[14422]: running
- 1.11 查看bind版本号
- /usr/local/named/sbin/named -v
- BIND 9.9.0
二 named 配置文档解释
- 2.1 named.conf
- options {
- directory"/usr/local/named"; //zone等数据库预设放置的所在目录
- pid-file"/usr/local/named/log/named.pid"; //named 的 pid文件位置
- version"None"; //设置bind版本信息为 none
- listen-on{ any; }; //监听的端口号,any代表全部接受
- allow-query { any; }; //允许任何查询
- #allow-query-cache { none; }; //
- #allow-recursion { corpnets; }; //
- allow-transfer { none; }; //不允许进行 zone 传送
- };
- zone "." { //
- type hint;
- file "master/named.root";
- };
- zone "test.com" { //zone 的名称(正解)
- type master; //zone 的类型
- file "master/test.com.db"; //配置文档位置
- };
- zone "57.168.192.in-addr.arpa" IN { //zone 反解
- type master;
- file "conf/192.168.57.db";
- };
- 2.2 "." (root) 根配置文档
- 由INTERNIC 所管理维护的,全世界共有13 部管理 "." 的DNS 服务器
- dig
- ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>>
- ;; global options: printcmd
- ;; Got answer:
- ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4358
- ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 14
- ;; QUESTION SECTION:
- ;. IN NS
- ;; ANSWER SECTION:
- . 87951 IN NS d.root-servers.net.
- 略
- . 87951 IN NS .root-servers.net.
- ;; ADDITIONAL SECTION:
- a.root-servers.net. 89393 IN A 198.41.0.4
- a.root-servers.net. 89393 IN AAAA 2001:503:ba3e::2:30
- 略
- i.root-servers.net. 417125 IN A 192.36.148.17
- i.root-servers.net. 89393 IN AAAA 2001:7fe::53
- 2.3 正解zone
- 一定从行首开始所有设定资料一定要从行首开始,前面不可有空白字元。
- 若有空白字元,代表延续前一个domain 的意思非常重要
- @ 这个符号代表 zone 的意思!例如写在test.com.db 中,@代表test.com.,如果写在named.192.168.57 档案中,则@ 代表100.168.192.in-addr.arpa. 的意思(参考named.conf 内的zone 设定)
- . 这个点 (.) 很重要!因为他代表一个完整主机名称(FQDN) 而不是仅有hostname 而已。举例来说,在named.centos.vbird 当中写www.centos.vbird 则代表FQDN 为www.centos.vbird.@ ==> www.centos.vbird.centos.vbird. 喔!因此当然要写成 www.centos.vbird. 才对!
- ; 代表注解符号~似乎# 也是注解~两个符号都能使用
三 DNS 基础概念
- 3.1 架设DNS服务器须知
- DNS 服务器的架设需要上层DNS 的授权才可以成为合法的DNS 服务器;
- named 主要配置文档是:rpm 方式 /etc/named.conf;源码方式则试安装目录而定,如 /usr/local/named/named.conf
- 每个正、反解领域都需要一个资料库档案,而档名则是由named.conf 所设定;
- 当DNS 查询时,若本身没有资料库档案,则前往root (.) 或forwarders 服务器查询;
- named 是否启动成功将在/var/log/messages 记录下日志,注意査看。
- 3.1.1 DNS 系统是以阶层式的管理
- 每个上一层的 DNS 服务器所记录的信息,其实就是其下一层的主机名而已
- 这样设计的好处就是:每部机器管理的只有下一层的 hostname 对应 IP 而已,所以减少了管理上的困扰!
- 而下层 Client 端如果有问题,只要询问上一层的 DNS server 即可!不需要跨越上层,除错上面也会比较简单。
- 3.2 要让你的主机名对应 IP (A记录) 且让其他计算机都可以查询的到,有两种方式:
- 3.2.1 上层 DNS 授权领域查询权,让你自己设定 DNS 服务器,或者是;
- 3.2.2 直接请上层 DNS 服务器来帮你设定主机名对应!
- 3.3 DNS 数据库的记录:正解, 反解, Zone 的意义
- DNS 服务器内的记录信息,这些记录可以称为数据库,而在数据库里面针对每个要解析的领域 (domain),就称为一个区域 (zone)
- 因此:
- 从主机名查询到 IP 的流程称为:正解
- 从 IP 反解析到主机名的流程称为:反解
- 不管是正解还是反解,每个领域的记录就是一个区域 (zone)
- 每一部 DNS 服务器都可以管理多个领域,不管是正解还是反解。
- 3.4 正解 zone (Resource Record, RR) 的几种标志:
- SOA:就是开始验证 (Start of Authority) 的缩写,相关资料本章后续说明;
- NS:就是名称服务器 (NameServer) 的缩写,后面记录的数据是 DNS 服务器的意思;
- A:就是地址 (Address) 的缩写,后面记录的是 IP 的对应 (重要);
- 3.4.1 正解例子
- dig www.sina.com //查询 IP 的记录
- ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> www.sina.com
- ;略
- ;; QUESTION SECTION:
- ;www.sina.com. IN A
- ;; ANSWER SECTION:
- www.sina.com. 42 IN CNAME us.sina.com.cn.
- us.sina.com.cn. 45 IN CNAME news.sina.com.cn.
- news.sina.com.cn. 39 IN CNAME jupiter.sina.com.cn.
- jupiter.sina.com.cn. 55 IN CNAME polaris.sina.com.cn.
- polaris.sina.com.cn. 21 IN A 202.108.33.60
- dig -t ns sina.com.cn //查询管理领域名称(domain zone) 的服务器主机名
- ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t ns sina.com.cn
- 略
- ;; QUESTION SECTION:
- ;sina.com.cn. IN NS
- ;; ANSWER SECTION:
- sina.com.cn. 14476 IN NS ns2.sina.com.cn.
- sina.com.cn. 14476 IN NS ns1.sina.com.cn.
- sina.com.cn. 14476 IN NS ns4.sina.com.cn.
- sina.com.cn. 14476 IN NS ns3.sina.com.cn.
- dig -t soa sina.com //查询管理领域名称(domain)的服务器管理信息
- ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t soa sina.com
- ;; global options: printcmd
- 略
- ;; QUESTION SECTION:
- ;sina.com. IN SOA
- ;; ANSWER SECTION:
- sina.com. 300 IN SOA ns1.sina.com.cn. zhihao.staff.sina.com.cn. 2005042601 900 300 604800 300
- 3.4.2 例子解释
- www.sina.com. 42 IN CNAME us.sina.com.cn.
- [domain] [ttl] IN [[RR type] [RR data]]
- [待查资料] [暂存时间(秒)] IN [[资源类型] [资源内容]]
- 关键字IN 是固定的,而RR type 与RR data 则是互有关连性的,例如例子中的A 记录就是接IP 而不是主机名称。
- 此外,在domain 的部分,若可能的话,请尽量使用FQDN,亦即是主机名称结尾加上一个小数点的(.) 就被称为FQDN 。
- ttl 就是time to live 的缩写,意思就是当这笔记录被其他DNS 服务器查询到后, 这个记录会保持在对方DNS 服务器的快取中,保持多少秒钟的意思。
- 常见的正解的 RR 相关信息
- [domain] IN [[RR type] [RR data]]
- 主机名称. IN A IPv4 的IP 位址
- 主机名称. IN AAAA IPv6 的IP 位址
- 领域名称(domain). IN NS 管理这个领域名称(domain)的服务器主机名称
- 领域名称(domain). IN SOA 管理这个领域名称(domain)的七个重要参数(容后说明)
- 领域名称(domain). IN MX 顺序数字接收邮件的服务器主机名称
- 主机别名. IN CNAME 别名代表这个主机名称
- 3.4.3 SOA 参数
- SOA 适用于多部DNS服务器使用master/slave 的方式来管理同一个领域名称(domain),既然要这样管理就需要宣告被管理的zone file
- 是如何进行传输的,此时就得要SOA (Start Of Authority) 的标志了
- SOA 后面共会接七个参数,这七个参数的意义依序是:
- 1 Master DNS 伺服器主机名称:这个领域主要是哪部DNS 作为master 的意思
- 2 管理员的email:那么管理员的email 为何?发生问题可以联络这个管理员;要注意的是, Email地址由"." 代替 "@"。
- 3 序号(Serial):这个序号代表的是这个资料库档案的新旧,序号越大代表越新;当slave 要判断是否主动
- 下载新的资料库时,就以序号是否比slave 上的还要新来判断,若是则下载,若不是则不下载;所以当你修订了资料库
- 内容时,记得要将这个数值放大才行!为了方便使用者记忆,通常序号都会使用日期格式『YYYYMMDDNU』来记忆,
- 例如sina的2005042601 序号代表 2005/04/62 当天的第01 次更新的;不过序号不可大于2的32次方,亦即必须小于4294967296 才行。
- 4 更新频率(Refresh):那么啥时slave 会去向master 要求资料更新的判断?就是这个数值定义的;sina设定每900秒slave 向master 要求资料更新。
- 如果每次slave 去更新时, 如果发现序号没有比较大,那就不会下载资料库档案。
- 5 失败重新尝试时间(Retry):如果因为某些因素,导致slave 无法对master 达成连接, 那么在多久的时间内,slave 会尝试重新连接到master。
- 在sina的设定中,300 秒会重新尝试一次。意思是说,每900 秒slave 会主动向master 连接,但如果该次连接没有成功,
- 那接下来尝试连接的时间会变成300 秒。若后来有成功,则又会恢复到900 秒才再一次连接。
- 6 失效时间(Expire):如果一直连接失败,持续连接到达这个设定值时限, 那么slave 将不再继续尝试连接,
- 并且尝试删除这份下载的zone file 资讯。sina设定为 604800 秒。意思是说当连接一直失败,到达604800 秒后,sina的slave
- 将不再更新,只能等待系统管理员的处理。
- 7 快取时间(Minumum TTL):如果这个资料库zone file 中,每笔RR 记录都没有写到TTL 快取时间的话,那么就以这个SOA 的设定值为主。
- 除了Serial 不可以超过2 的32 次方之外,有没有其它的限制啊针对这几个数值?是有的,基本上就是这样:
- Refresh >= Retry *2
- Refresh + Retry < Expire
- Expire >= Rrtry * 10
- Expire >= 7Days
- 一般来说,如果DNS RR 资料变更情况频繁的,那么上述的相关数值可以订定的小一些,如果DNS RR 是很稳定的, 为了节省频宽,则可以将Refresh 设定的较大一些。
- 3.5 反解 zone 的标志:
- 除了服务器必备的 NS 以及 SOA 之外,还包括反解特有的FTR:
- PTR:就是指向 (PoinTeR) 的缩写,后面记录的数据就是反解到主机名!
- 3.5.1 反解例子
- dig -x 192.168.57.71
- ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> -x 192.168.57.71
- ;; global options: printcmd
- 略
- ;; QUESTION SECTION:
- ;71.57.168.192.in-addr.arpa. IN PTR
- ;; ANSWER SECTION:
- 71.57.168.192.in-addr.arpa. 600 IN PTR ns1.test.com.
- 71.57.168.192.in-addr.arpa. 600 IN PTR www.test.com.
- ;; AUTHORITY SECTION:
- 57.168.192.in-addr.arpa. 600 IN NS ns1.test.com.
- ;; ADDITIONAL SECTION:
- ns1.test.com. 600 IN A 192.168.57.71
- 注意:named.conf 中的反解zone 要将IP 反过来写,而在结尾时加上.in-addr.arpa. 的结尾字样即可。
- zone "57.168.192.in-addr.arpa" IN {
- type master;
- file "conf/192.168.57.db";
- };
- 3.6 每部 DNS 都需要的正解 zone "."//
- 这个记录 "." 的 zone 的类型,被称为 hint 类型!这几乎是每个 DNS 服务器都得要知道的 zone !
- DNS 服务器,基本上就要有两个 zone 才行,一个是 hint(.) ,一个是关于自己领域(domain)的正解 zone
- 3.7 cache-only DNS服务器 与 forwarding DNS服务器
- 有个只需要 . 这个zone file 的简单DNS 服务器,我们称这种没有自己公开的DNS
- 资料库的服务器为cache-only (仅快取) DNS server!顾名思义,这个DNS server 只有快取搜寻结果的功能,
- 也就是说,他本身并没有主机名称与IP 正反解的配置文档,完全是由对外的查询来提供他的资料来源!
- 那如果连 . 都不想要呢?那就得要指定一个上层DNS 服务器作为你的forwarding (转递) 目标,将原本自己要往.
- 查询的任务,丢给上层DNS 服务器去烦恼即可。如此一来,我们这部具有forwarding 功能的DNS 服务器,甚至连.
- 都不需要了!因为 . 有记录在上层 DNS 上头了!
- 如:
- forwarders { //转递
- 202.106.0.20; //网通 DNS 服务器
- 202.106.46.151; //备用
- };
四 DNS解析过程,以www.sina.com为例:
- 通过 dig . --.com --.sina.com --www.sina.com 的查询流程,并分析每个查询阶段的DNS 服务器有那些
- $ dig +trace www.sina.com
- ; <<>DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>+trace www.sina.com
- ;; global options: printcmd
- . 376868 IN NS i.root-servers.net. //下面将使用
- . 376868 IN NS a.root-servers.net.
- . 376868 IN NS d.root-servers.net.
- . 376868 IN NS h.root-servers.net.
- . 376868 IN NS e.root-servers.net.
- . 376868 IN NS b.root-servers.net.
- . 376868 IN NS f.root-servers.net.
- . 376868 IN NS c.root-servers.net.
- . 376868 IN NS j.root-servers.net.
- . 376868 IN NS g.root-servers.net.
- . 376868 IN NS m.root-servers.net.
- . 376868 IN NS l.root-servers.net.
- . 376868 IN NS k.root-servers.net.
- ;; Received 228 bytes from 202.106.0.20#53(202.106.0.20) in 3 ms
- // 202.106.0.20 是我笔记本电脑设置的公网DNS服务器,返回了13个根"."地址
- com. 172800 IN NS m.gtld-servers.net. //下面将使用
- com. 172800 IN NS l.gtld-servers.net.
- com. 172800 IN NS b.gtld-servers.net.
- com. 172800 IN NS a.gtld-servers.net.
- com. 172800 IN NS d.gtld-servers.net.
- com. 172800 IN NS h.gtld-servers.net.
- com. 172800 IN NS j.gtld-servers.net.
- com. 172800 IN NS f.gtld-servers.net.
- com. 172800 IN NS e.gtld-servers.net.
- com. 172800 IN NS c.gtld-servers.net.
- com. 172800 IN NS k.gtld-servers.net.
- com. 172800 IN NS g.gtld-servers.net.
- com. 172800 IN NS i.gtld-servers.net.
- ;; Received 502 bytes from 192.36.148.17#53(i.root-servers.net) in 149 ms
- // 从 i.root-servers.net "."根DNS服务器返回了13个"com"服务器地址
- sina.com. 172800 IN NS ns1.sina.com.cn. //下面将使用
- sina.com. 172800 IN NS ns2.sina.com.cn.
- sina.com. 172800 IN NS ns3.sina.com.cn.
- sina.com. 172800 IN NS ns1.sina.com.
- sina.com. 172800 IN NS ns2.sina.com.
- ;; Received 163 bytes from 192.55.83.30#53(m.gtld-servers.net) in 444 ms
- // 从 m.gtld-servers.net com DNS服务器返回了4个"sina.com"服务器地址
- www.sina.com. 60 IN CNAME us.sina.com.cn.
- us.sina.com.cn. 60 IN CNAME news.sina.com.cn.
- news.sina.com.cn. 60 IN CNAME jupiter.sina.com.cn.
- jupiter.sina.com.cn. 60 IN CNAME polaris.sina.com.cn.
- polaris.sina.com.cn. 60 IN A 202.108.33.60
- sina.com.cn. 86400 IN NS ns1.sina.com.cn.
- sina.com.cn. 86400 IN NS ns2.sina.com.cn.
- sina.com.cn. 86400 IN NS ns4.sina.com.cn.
- sina.com.cn. 86400 IN NS ns3.sina.com.cn.
- ;; Received 273 bytes from 202.106.184.166#53(ns1.sina.com.cn) in 3 ms
- //最后从 ns1.sina.com.cn sina.com DNS服务器返回了"www.sina.com"服务器地址,即4个别名与1个A记录 202.108.33.60
参考 鸟哥
http://linux.vbird.org/linux_server/0350dns.php
结束
更多欢迎到此讨论:
37275208
#20120603 关于dns 轮询
- //dns 轮询
- options {
- rrset-order { order cyclic; };
- .....
- };
- rrset-order 支持三个参数 :
- fixed 会将多个A记录按配置文件的顺序固定给出
- random 会随机给出
- cyclic 会循环给出
#20130128 DNS 服务器 . 与 forward 共存。
#/usr/local/named/etc/named.conf 注意没有forward only
- options {
- directory"/usr/local/named";
- pid-file"/usr/local/named/log/named.pid";
- version"None";
- listen-on{ any; };
- allow-query { any; };
- #allow-query-cache { none; };
- #allow-recursion { corpnets; };
- allow-transfer { none; };
- rrset-order { order cyclic; };
- forwarders {
- 202.106.196.115;
- 219.141.136.10;
- };
- };
Client -> 192.168.x.5(DC) -> 192.168.x.1(dns zhuanpan.x.test.com) -> 202.106.196.115 (DNS)
#