协议 - DNS
目录
1 DNS
首先了解一下TCP与UDP传送字节的长度限制:
UDP报文的最大长度为512字节,而TCP则允许报文长度超过512字节。当DNS查询超过512字节时,协议的TC标志出现删除标志,这时则使用TCP发送。通常传统的UDP报文一般不会大于512字节。
区域传送时使用TCP,主要有一下两点考虑:
1.辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。
2.TCP是一种可靠的连接,保证了数据的准确性。
域名解析时使用UDP协议:
客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。
1.1 DNS发展史
本地配置文件:hosts
DNS 系统 ---Berkeley Internet Name Domain, BIND
完整主机名: Fully Qualified Domain Name (FQDN)
- 以区域来区分同名同姓者的差异: 网络世界其实有很多人自称为『鸟哥』的,包括敝人在下小生我啦!那么你怎么知道此鸟哥非彼鸟哥呢? 这个时候你可以利用每个鸟哥的所在地来作为区分啊,比如说台南的鸟哥与台北的鸟哥等。 那万一台南还有两个人自称鸟哥怎么办?没关系,你还可以依照乡镇来区分呢!比如说台南北区的鸟哥及台南中区的鸟哥。 如果将这个咚咚列出来,就有点像这样:
- 以区域号码来区分相同的电话号码: 另外一个例子可以使用电话号码来看,假如高雄有个 1234567 而台南也有个 1234567,那么(1)你在高雄直接拨接 1234567 时,他会直接挂入高雄的 1234567 电话中,(2)但如果你要拨到台南去,就得加入 (06) 这个区码才行!我们就是使用区码来做为辨识之用的!此时那个 06 区码就是 domain name,而电话号码就是主机名啦!
1.2 DNS 的主机名对应 IP 的查询流程
- 一般最上层领域名 (Generic TLDs, gTLD):例如 .com, .org, .gov 等等
- 国码最上层领域名 (Country code TLDs, ccTLD):例如 .tw, .uk, .jp, .cn 等
- 授权与分层负责
- 透过 DNS 查询主机名 IP 的流程
- 收到用户的查询要求,先查看本身有没有纪录,若无则向 . 查询:
- 向最顶层的 . (root) 查询:
- 向第二层的 .tw 服务器查询:
- 向第三层的 .edu.tw 服务器查询:
- 向第四层的 .ksu.edu.tw 服务器查询:
- 记录暂存内存并回报用户:
- 主机名修改的仅需自己的 DNS 更动即可,不需通知其他人:
- DNS 服务器对主机名解析结果的快取时间:
- 可持续向下授权 (子领域名授权):
[root@www ~]# dig +trace www.ksu.edu.tw ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>>+trace www.ksu.edu.tw ;; global options: printcmd . 486278 IN NS a.root-servers.net. . 486278 IN NS b.root-servers.net. ....(底下省略).... # 上面的部分在追踪 . 的服务器,可从 a ~ m.root-servers.net. ;; Received 500 bytes from 168.95.1.1#53(168.95.1.1) in 22 ms tw. 172800 IN NS ns.twnic.net. tw. 172800 IN NS a.dns.tw. tw. 172800 IN NS b.dns.tw. ....(底下省略).... # 上面的部分在追踪 .tw. 的服务器,可从 a ~ h.dns.tw. 包括 ns.twnic.net. ;; Received 474 bytes from 192.33.4.12#53(c.root-servers.net) in 168 ms edu.tw. 86400 IN NS a.twnic.net.tw. edu.tw. 86400 IN NS b.twnic.net.tw. # 追踪 .edu.tw. 的则有 7 部服务器 ;; Received 395 bytes from 192.83.166.11#53(ns.twnic.net) in 22 ms ksu.edu.tw. 86400 IN NS dns2.ksu.edu.tw. ksu.edu.tw. 86400 IN NS dns3.twaren.net. ksu.edu.tw. 86400 IN NS dns1.ksu.edu.tw. ;; Received 131 bytes from 192.83.166.9#53(a.twnic.net.tw) in 22 ms www.ksu.edu.tw. 3600 IN A 120.114.100.101 ksu.edu.tw. 3600 IN NS dns2.ksu.edu.tw. ksu.edu.tw. 3600 IN NS dns1.ksu.edu.tw. ksu.edu.tw. 3600 IN NS dns3.twaren.net. ;; Received 147 bytes from 120.114.150.1#53(dns2.ksu.edu.tw) in 14 ms
1.3 合法 DNS 的关键:申请域名查询授权
- 向上层领域注册取得合法的领域查询授权
- 上层 DNS 授权领域查询权,让你自己设定 DNS 服务器,或者是;
- 直接请上层 DNS 服务器来帮你设定主机名对应!
- 拥有领域查询权后,所有的主机名信息都以自己为准,与上层无关
- dns.vbird.org 服务器挂点时: 如果 dns.vbird.org 这部主机挂点,那么在上图显示『查询』箭头的步骤会被中断,因此就会出现『联机不到 dns.vbird.org 的 IP』的结果。因为无论如何,DNS 系统都会去找到最后一个含有 A 地址的记录啊!
- dns.vbird.org 服务器内的数据库忘记补上数据时: 如果鸟哥在自己的服务器数据库中,忘记加上 dns.vbird.org 的记录时,最终的结果还是会显示『找不到该服务器的 IP』;
- dns.vbird.org 服务器内的数据库数据编写不一致时: 如果是在鸟哥自己服务器的数据库内的 dns.vbird.org 所记录的 IP 与 godaddy 的不同,最终的结果会以鸟哥记录的为准。
1.4 ISP域名托管 or 自己搭建 DNS 服务器
- 你所负责需要连上 Internet 的主机数量庞大:例如你一个人负责整个公司十几部的网络 Server,而这些 Server 都是挂载你的公司网域之下的。这个时候想要不架设 DNS 也粉难啦!
- 你可能需要时常修改你 Server 的名字,或者是你的 Server 有随时增加的可能性与变动性;
- 不需要架设 DNS 的时机:
- 网络主机数量很少:例如家里或公司只有需要一部 mail server 时;
- 你可以直接请上层 DNS 主机管理员帮你设定好 Hostname 的对应时;
- 你对于 DNS 的认知不足时,如果架设反而容易造成网络不通的情况;
- 架设 DNS 的费用很高时!
13台根服务器
平时我们进行域名解析所用到的DNS服务器,是面对客户的一线服务器。
DNS服务器是(Domain Name System或者Domain Name Service)域名系统或者域名服务,域名系统为Internet上的主机分配域名地址和IP地址。
用户使用域名地址,该系统就会自动把域名地址转为IP地址。域名服务是运行域名系统的Internet工具。执行域名服务的服务器称之为DNS服务器,通过DNS服务器来应答域名服务的查询。
在服务器家族里还有一种叫做“DNS根服务器”的服务器。
全球共有13台根域名服务器。这13台根域名服务器中名字分别为“A”至“M”,其中10台设置在美国,另外各有一台设置于英国、瑞典和日本。
根服务器主要用来管理互联网的主目录,全世界只有13台。
1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。
所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。
根服务器架构
这13台根服务器可以指挥Firefox或Internet Explorer这样的Web浏览器和电子邮件程序控制互联网通信。
由于根服务器中有经美国政府批准的260个左右的互联网后缀(如.com、.net等)和一些国家的指定符(如法国的.fr、挪威的.no等),自成立以来,美国政府每年花费近50多亿美元用于根服务器的维护和运行,承担了世界上最繁重的网络任务和最巨大的网络风险。
因此可以实事求是地说:没有美国,互联网将是死灰一片。
世界对美国互联网的依赖性非常大,当然这也主要是由其技术的先进性和管理的科学性所决定的。
所谓依赖性,从国际互联网的工作机理来体现的,就在于“根服务器”的问题。
从理论上说,任何形式的标准域名要想被实现解析,按照技术流程,都必须经过全球“层级式”域名解析体系的工作,才能完成。
“层级式”域名解析体系第一层就是根服务器,负责管理世界各国的域名信息,在根服务器下面是顶级域名服务器,即相关国家域名管理机构的数据库,如中国的CNNIC,然后是在下一级的域名数据库和ISP的缓存服务器。
一个域名必须首先经过根数据库的解析后,才能转到顶级域名服务器进行解析。
作用与影响
这13台根服务器可以指挥浏览器(比如.internet explorer)和电子邮件程序(比如.Firefox)以控制互联网通信。由于根服务器中有经美国政府批准的260个左右的互联网后缀(如.com、.net等)和一些国家的指定符,美国政府对其管理拥有很大发言权。这使得我们显得相当被动。
中国用户在访问带有.com等后缀的国外网站时,大多仍需要经过国外的域名服务器进行解析,中美海底光缆一旦发生断裂,便会发生解析问题,中国东部、太平洋西海岸地区,属于地震多发地带,再加上台风等环境因素影响,形势显得更加严峻。
一位互联网资深专家解释说,美国控制了域名解析的根服务器,也就控制了相应的所有域名,如果美国不想让人访问某些域名,就可以屏蔽掉这些域名,使它们的IP地址无法解析出来,那么这些域名所指向的网站就相当于从互联网的世界中消失了。比如,2004年4月,由于“.ly”域名瘫痪,导致利比亚从互联网上消失了3天。
注意,13台中除了欧洲两台、日本一台之外,其余全部位于美国。也就是说,只要美国愿意,他就可以切断全世界的网络。虽然网络是无国界的,但服务器是有国界的。
关于DNS根镜像服务器
指的就是DNS根服务器的镜像服务器
镜像服务器(Mirror server)与主服务器的服务内容都是一样的,只是放在一个不同的地方,分担主机的负载。
简单来说就是和照镜子似的,能看,但不是原版的。在网上内容完全相同而且同步更新的两个或多个服务器,除主服务器外,其余的都被称为镜像服务器。
分布地点
下表是这些机器的管理单位、设置地点及最新的IP地址:
名称 | 管理单位及设置地点 | IP地址 |
A | INTERNIC.NET(美国,弗吉尼亚州) | 198.41.0.4 |
B | 美国信息科学研究所(美国,加利弗尼亚州) | 128.9.0.107 |
C | PSINet公司(美国,弗吉尼亚州) | 192.33.4.12 |
D | 马里兰大学(美国马里兰州) | 128.8.10.90 |
E | 美国航空航天管理局(美国加利弗尼亚州) | 192.203.230.10 |
F | 因特网软件联盟(美国加利弗尼亚州) | 192.5.5.241 |
G | 美国国防部网络信息中心(美国弗吉尼亚州) | 192.112.36.4 |
H | 美国陆军研究所(美国马里兰州) | 128.63.2.53 |
I | Autonomica公司(瑞典,斯德哥尔摩) | 192.36.148.17 |
J | VeriSign公司(美国,弗吉尼亚州) | 192.58.128.30 |
K | RIPE NCC(英国,伦敦) | 193.0.14.129 |
L | IANA(美国,弗吉尼亚州) | 198.32.64.12 |
M | WIDE Project(日本,东京) | 202.12.27.33 |
主要作用
在根域名服务器中虽然没有每个域名的具体信息,但储存了负责每个域(如COM、NET、ORG等)的解析的域名服务器的地址信息,如同通过北京电信你问不到广州市某单位的电话号码,但是北京电信可以告诉你去查020114。
世界上所有互联网访问者的浏览器的将域名转化为IP地址的请求(浏览器必须知道数字化的IP地址才能访问网站)理论上都要经过根服务器的指引后去该域名的权威域名服务器(authoritative name server, 如haier.com的权威域名服务器是dns1.hichina.com)上得到对应的IP地址,当然现实中提供接入服务的ISP的缓存域名服务器上可能已经有了这个对应关系(域名到IP地址)的缓存。
根域名服务器是架构因特网所必须的基础设施。
在国外,许多计算机科学家将根域名服务器称作“真理”(TRUTH),足见其重要性。
但是攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了。
早在1997年7月,这些域名服务器之间自动传递了一份新的关于因特网地址分配的总清单,然而这份清单实际上是空白的。
这一人为失误导致了因特网出现最严重的局部服务中断,造成数天之内网面无法访问,电子邮件也无法发送。
遭遇攻击
在2002年的10月21日美国东部时间下午4:45开始,这13台服务器又遭受到了有史以来最为严重的也是规模最为庞大的一次网络袭击。
此次受到的攻击是DDoS攻击,超过常规数量30至40倍的数据猛烈地向这些服务器袭来并导致其中的9台不能正常运行。7台丧失了对网络通信的处理能力,另外两台也紧随其后陷于瘫痪。
10月21日的这次攻击对于普通用户来说可能根本感觉不到受到了什么影响。
如果仅从此次事件的“后果”来分析,也许有人认为“不会所有的根域名服务器都受到攻击,因此可以放心”,或者“根域名服务器产生故障也与自己没有关系”,还为时尚早。
但他们并不清楚其根本原因是:
-
并不是所有的根域名服务器全部受到了影响;
-
攻击在短时间内便告结束;
-
攻击比较单纯,因此易于采取相应措施。
由于目前对于DDoS攻击还没有什么特别有效的解决方案,设想一下如果攻击的时间再延长,攻击再稍微复杂一点,或者再多有一台服务器瘫痪,全球互联网将会有相当一部分网页浏览以及e-mail服务会彻底中断。
而且,我们更应该清楚地认识到虽然此次事故发生的原因不在于根域名服务器本身,而在于因特网上存在很多脆弱的机器,这些脆弱的机器植入DDoS客户端程序(如特洛伊木马),然后同时向作为攻击的根域名服务器发送信息包,从而干扰服务器的服务甚至直接导致其彻底崩溃。
但是这些巨型服务器的漏洞是肯定存在的,即使现在没有被发现,以后也肯定会被发现。
而一旦被恶意攻击者发现并被成功利用的话,将会使整个互联网处于瘫痪之中。
为什么只有13台dns根服务器
最后,让我们了解下全球DNS根服务器为什么只有13台。
DNS协议的最初定义要从20世纪80年代未期开始算起,它使用了端口上的UDP和TCP协议。
UDP通常用于查询和响应,TCP用于主服务器和从服务器之间的区传送.遗憾的是,在所有UDP实现中能保证正常工作的最大包长是512字节,对于在每个包中必须含有数字签名的一些DNS新特性(例如,DNSSEC)来说实在是太小了。
512字节的限制还影响了根服务器的数量和名字。
要让所有的根服务器数据能包含在一个512字节的UDP包中,根服务器只能限制在13个,而每个服务器要使用字母表中的单个字母命名。
以太网数据的长度必须在46-1500字节之间,这是由以太网的物理特性决定的。
事实上,这个1500字节就是网络层IP数据包的长度限制,理论上,IP数据包最大长度是65535字节。
这是由IP首部16比特总长度所限制的,去除20字节IP首部和8个字节UDP首部,UDP数据包中数据最大长度为65507字节。
在Internet数据传输中,UDP数据长度控制在576字节(Internet标准MTU值),而在许多UDP应用程序设计中数据包被限制成512字节或更小。这样可以防止数据包的丢失。
许多解析器首先发送一条UDP查询,如果它们接收到一条被截断的响应,则会用TCP重新发送该查询。
这个过程绕过了512字节的限制,但是效率不高。您或许认为DNS应该避开UDP,总是使用TCP,但是TCP连接的开销大得多。
一次UDP名字服务器交换可以短到两个包:一个查询包、一个响应包。一次TCP交换则至少包含7个包:三次握手初始化TCP会话、一个查询包、一个响应包以及最后一次握手来关闭连接。
1.5 DNS 数据库的记录:正解, 反解, Zone 的意义
- 从主机名查询到 IP 的流程称为:正解
- 从 IP 反解析到主机名的流程称为:反解
- 不管是正解还是反解,每个领域的记录就是一个区域 (zone)
-
正解的设定权以及 DNS 正解 zone 记录的标志
- SOA:就是开始验证 (Start of Authority) 的缩写,相关资料本章后续小节说明;
- NS:就是名称服务器 (NameServer) 的缩写,后面记录的数据是 DNS 服务器的意思;
- A:就是地址 (Address) 的缩写,后面记录的是 IP 的对应 (最重要);
-
反解的设定权以及 DNS 反解 zone 记录的标志
- PTR:就是指向 (PoinTeR) 的缩写,后面记录的数据就是反解到主机名啰!
- 每部 DNS 都需要的正解 zone: hint
- hint (root):记录 . 的 zone;
- vbird.org:记录 .vbird.org 这个正解的 zone。
1.6 DNS 数据库的类型:hint, master/slave 架构
- Master:
- Slave:
- Master / Slave 的查询优先权?
- Master / Slave 数据的同步化过程
- Master 主动告知:例如在 Master 在修改了数据库内容,并且加大数据库序号后, 重新启动 DNS 服务,那 master 会主动告知 slave 来更新数据库,此时就能够达成数据同步;
- 由 Slave 主动提出要求:基本上, Slave 会定时的向 Master 察看数据库的序号, 当发现 Master 数据库的序号比 Slave 自己的序号还要大 (代表比较新),那么 Slave 就会开始更新。如果序号不变, 那么就判断数据库没有更动,因此不会进行同步更新。
2 Client端配置
- /etc/hosts :本地域名解析配置文件
- /etc/resolv.conf :配置Linux系统DNS服务器的配置文件
- /etc/nsswitch.conf: /etc/hosts 与 /etc/resolv.conf 优先级设定
2.2 DNS 的正、反解查询指令: host, nslookup, dig
[root@www ~]# host [-a] FQDN [server] [root@www ~]# host -l domain [server]选项与参数: -a :代表列出该主机所有的相关信息,包括 IP、TTL 与除错讯息等等 -l :若后面接的那个 domain 设定允许 allow-transfer 时,则列出该 domain 所管理的所有主机名对应数据! server:这个参数可有可无,当想要利用非 /etc/resolv.conf 内的 DNS 主机 来查询主机名与 IP 的对应时,就可以利用这个参数了!# 1. 使用默认值来查出 linux.vbird.org 的 IP [root@www ~]# host linux.vbird.org linux.vbird.org has address 140.116.44.180 <==这是 IP linux.vbird.org mail is handled by 10 linux.vbird.org. <==这是 MX (后续章节说明)# 2. 查出 linux.vbird.org 的所有重要参数 [root@www ~]# host -a linux.vbird.org Trying "linux.vbird.org" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56213 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0 ;; QUESTION SECTION: ;linux.vbird.org. IN ANY ;; ANSWER SECTION: linux.vbird.org. 145 IN A 140.116.44.180 ;; AUTHORITY SECTION: vbird.org. 145 IN NS dns.vbird.org. vbird.org. 145 IN NS dns2.vbird.org. Received 86 bytes from 168.95.1.1#53 in 15 ms<==果然是从 168.95.1.1 取得的资料# 看样子,不就是 dig 的输出结果?所以,我们才会说,使用 dig 才是王道!# 3. 强制以 139.175.10.20 这部 DNS 主机来查询 [root@www ~]# host linux.vbird.org 139.175.10.20 Using domain server: Name: 139.175.10.20 Address: 139.175.10.20#53 Aliases: linux.vbird.org has address 140.116.44.180 linux.vbird.org mail is handled by 10 linux.vbird.org.
- nslookup
[root@www ~]# nslookup [FQDN] [server] [root@www ~]# nslookup选项与参数: 1. 可以直接在 nslookup 加上待查询的主机名或者是 IP ,[server] 可有可无; 2. 如果在 nslookup 后面没有加上任何主机名或 IP ,那将进入 nslookup 的查询功能 在 nslookup 的查询功能当中,可以输入其他参数来进行特殊查询,例如: set type=any :列出所有的信息『正解方面配置文件』 set type=mx :列出与 mx 相关的信息!# 1. 直接搜寻 mail.ksu.edu.tw 的 IP 信息 [root@www ~]# nslookup mail.ksu.edu.tw Server: 168.95.1.1 Address: 168.95.1.1#53 <==还是请特别注意 DNS 的 IP 是否正确! Non-authoritative answer: Name: mail.ksu.edu.tw Address: 120.114.100.20 <==回报 IP 给你啰!
[root@www ~]# nslookup<==进入 nslookup 查询画面 > 120.114.100.20<==执行反解的查询 > www.ksu.edu.tw<==执行正解的查询# 上面这两个仅列出正反解的信息,没有啥了不起的地方啦! > set type=any <==变更查询,不是仅有 A,全部信息都列出来 > www.ksu.edu.tw Server: 168.95.1.1 Address: 168.95.1.1#53 Non-authoritative answer: Name: www.ksu.edu.tw Address: 120.114.100.101 <==这是答案 Authoritative answers can be found from: <==这是相关授权 DNS 说明 ksu.edu.tw nameserver = dns2.ksu.edu.tw. ksu.edu.tw nameserver = dns1.ksu.edu.tw. dns1.ksu.edu.tw internet address = 120.114.50.1 dns2.ksu.edu.tw internet address = 120.114.150.1 > exit<==离开吧!皮卡丘
- dig
[root@www ~]# dig [options] FQDN [@server]选项与参数: @server :如果不以 /etc/resolv.conf 的设定来作为 DNS 查询,可在此填入其他的 IP options:相关的参数很多,主要有 +trace, -t type 以及 -x 三者最常用 +trace :就是从 . 开始追踪,在 19.1.2 里面谈过了!回头瞧瞧去! -t type:查询的数据主要有 mx, ns, soa 等类型,相关类型 19.4 来介绍 -x :查询反解信息,非常重要的项目!# 1. 使用默认值查询 linux.vbird.org 吧! [root@www ~]# dig linux.vbird.org ; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> linux.vbird.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37415 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0 ;; QUESTION SECTION:<==提出的问题的部分 ;linux.vbird.org. IN A ;; ANSWER SECTION:<==主要的回答阶段 linux.vbird.org. 600 IN A 140.116.44.180 ;; AUTHORITY SECTION:<==其他与此次回答有关的部分 vbird.org. 600 IN NS dns.vbird.org. vbird.org. 600 IN NS dns2.vbird.org. ;; Query time: 9 msec ;; SERVER: 168.95.1.1#53(168.95.1.1) ;; WHEN: Thu Aug 4 14:12:26 2011 ;; MSG SIZE rcvd: 86
- QUESTION(问题):显示所要查询的内容,因为我们是查询 linux.vbird.org 的 IP,所以这里显示 A (Address);
- ANSWER(回答):依据刚刚的 QUESTION 去查询所得到的结果,答案就是回答 IP 啊!
- AUTHORITY(验证):由这里我们可以知道 linux.vbird.org 是由哪部 DNS 服务器所提供的答案! 结果是 dns.vbird.org 及 dns2.vbird.org 这两部主机管理的。另外,那个 600 是啥咚咚?图 19.1-4 提到过的流程,就是允许查询者能够保留这笔记录多久的意思 (快取),在 linux.vbird.org 的设定中,预设可以保留 600 秒。
# 2. 查询 linux.vbird.org 的 SOA 相关信息吧! [root@www ~]# dig -t soa linux.vbird.org ; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> -t soa linux.vbird.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57511 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;linux.vbird.org. IN SOA ;; AUTHORITY SECTION: vbird.org. 600 IN SOA dns.vbird.org. root.dns.vbird.org. 2007091402 28800 7200 720000 86400 ;; Query time: 17 msec ;; SERVER: 168.95.1.1#53(168.95.1.1) ;; WHEN: Thu Aug 4 14:15:57 2011 ;; MSG SIZE rcvd: 78
# 3. 查询 120.114.100.20 的反解信息结果 [root@www ~]# dig -x 120.114.100.20 ; <<>> DiG 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 <<>> -x 120.114.100.20 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60337 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION: ;20.100.114.120.in-addr.arpa. IN PTR ;; ANSWER SECTION: 20.100.114.120.in-addr.arpa. 3600 IN PTR mail-out-r2.ksu.edu.tw. 20.100.114.120.in-addr.arpa. 3600 IN PTR mail-smtp-proxy.ksu.edu.tw. 20.100.114.120.in-addr.arpa. 3600 IN PTR mail.ksu.edu.tw. ;; AUTHORITY SECTION: 100.114.120.in-addr.arpa. 3600 IN NS dns1.ksu.edu.tw. 100.114.120.in-addr.arpa. 3600 IN NS dns3.twaren.net. 100.114.120.in-addr.arpa. 3600 IN NS dns2.ksu.edu.tw. ;; ADDITIONAL SECTION: dns1.ksu.edu.tw. 3036 IN A 120.114.50.1 dns2.ksu.edu.tw. 2658 IN A 120.114.150.1 dns3.twaren.net. 449 IN A 211.79.61.47 ;; Query time: 29 msec ;; SERVER: 168.95.1.1#53(168.95.1.1) ;; WHEN: Thu Aug 4 14:17:58 2011 ;; MSG SIZE rcvd: 245
2.3 查询领域管理者相关信息: whois
- whois
[root@www ~]# whois [domainname]<==注意啊!是 domain 而不是 hostname [root@www ~]# whois centos.org [Querying whois.publicinterestregistry.net] [whois.publicinterestregistry.net] # 这中间是一堆 whois 服务器提供的讯息告知!底下是实际注册的数据 Domain ID:D103409469-LROR Domain Name:CENTOS.ORG Created On:04-Dec-2003 12:28:30 UTC Last Updated On:05-Dec-2010 01:23:25 UTC Expiration Date:04-Dec-2011 12:28:30 UTC<==记载了建立与与失效的日期 Sponsoring Registrar:Key-Systems GmbH (R51-LROR) Status:CLIENT TRANSFER PROHIBITED Registrant ID:P-8686062 Registrant Name:CentOS Domain Administrator Registrant Organization:The CentOS Project Registrant Street1:Mechelsesteenweg 170 # 底下则是一堆联络方式,鸟哥将它取消了,免得多占篇幅~
[root@www ~]# whois vbird.idv.tw [Querying whois.twnic.net] [whois.twnic.net] <==这个 whois 服务器查到的数据 Domain Name: vbird.idv.tw <==这个 domain 的信息 Contact: <==联络者的联络方式 Der-Min Tsai vbird@pc510.ev.ncku.edu.tw Record expires on 2018-09-17 (YYYY-MM-DD) Record created on 2002-09-13 (YYYY-MM-DD) Registration Service Provider: HINET
呵呵!这个 domain 会在 2018/09/17 失效的意思啦!报告完毕!无论如何,我们都可以透过 nslookup, host, dig 等等的指令来查询主机名与 IP 的对应,这些指令的用法可以请你以 man command 来查询更多的用法喔!
3 DNS 服务器的软件、种类与 cache only DNS 服务器设定
3.1 DNS软件(Berkeley Internet Name Domain, BIND)
- BIND 本身的配置文件:主要规范主机的设定、zone file 的所在、权限的设定等;
- 正反解数据库档案 (zone file):记录主机名与 IP 对应的等。
- /etc/named.conf :这就是我们的主配置文件啦!
- /etc/sysconfig/named :是否启动 chroot 及额外的参数,就由这个档案控制;
- /var/named/区域名称 :数据库档案默认放置在这个目录 解析库文件
- /var/run/named :named 这支程序执行时默认放置 pid-file 在此目录内。
- /etc/sysconfig/named 与 chroot 环境
[root@www ~]# cat /etc/sysconfig/named ROOTDIR=/var/named/chroot
- /var/named/chroot/etc/named.conf
- /var/named/chroot/var/named/zone_file1
- /var/named/chroot/var/named/zone_file.....
- /var/named/chroot/var/run/named/...
3.3 单纯的 cache-only DNS 服务器与 forwarding 功能
-
什么是 cache-only 与 forwarding DNS 服务器呢?
- 什么时候有架设 cache-only DNS 的需求?
- 实际设定 cache-only DNS server
- 编辑主要配置文件: /etc/named.conf
- 批注数据是放置在两条斜线『 // 』后面接的数据
- 每个段落之后都需要以分号『 ; 』来做为结尾!
[root@www ~]# cp /etc/named.conf /etc/named.conf.raw [root@www ~]# vim /etc/named.conf// 在预设的情况下,这个档案会去读取 /etc/named.rfc1912.zones 这个领域定义档 // 所以请记得要修改成底下的样式啊!options { listen-on port 53 { any; }; //可不设定,代表全部接受directory "/var/named";//数据库默认放置的目录所在 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 { any; }; //可不设定,代表全部接受 recursion yes; //将自己视为客户端的一种查询模式forward only;//可暂时不设定forwarders { //是重点! 168.95.1.1; //先用中华电信的 DNS 当上层 139.175.10.20; //再用 seednet 当上层 };};//最终记得要结尾符号!
- listen-on port 53 { any; };
- directory "/var/named";
- dump-file, statistics-file, memstatistics-file
- allow-query { any; };
- forward only ;
- forwarders { 168.95.1.1; 139.175.10.20; } ;
- 启动 named 并观察服务的埠口
# 1. 启动一下 DNS 这玩意儿! [root@www ~]# /etc/init.d/named start Starting named: [ OK ] [root@www ~]# chkconfig named on# 2. 到底用了多少埠口呢? [root@www ~]# netstat -utlnp | grep named Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 192.168.100.254:53 0.0.0.0:* LISTEN 3140/named tcp 0 0 192.168.1.100:53 0.0.0.0:* LISTEN 3140/named tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 3140/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 3140/named tcp 0 0 ::1:953 :::* LISTEN 3140/named udp 0 0 192.168.100.254:53 0.0.0.0:* 3140/named udp 0 0 192.168.1.100:53 0.0.0.0:* 3140/named udp 0 0 127.0.0.1:53 0.0.0.0:* 3140/named
- 检查 /var/log/messages 的内容讯息 (极重要!)
[root@www ~]# tail -n 30 /var/log/messages | grep namedAug 4 14:57:09 www named[3140]: starting BIND 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 -u named -t /var/named/chroot<==说明的是 chroot 在哪个目录下! Aug 4 14:57:09 www named[3140]: adjusted limit on open files from 1024 to 1048576 Aug 4 14:57:09 www named[3140]: found 1 CPU, using 1 worker thread Aug 4 14:57:09 www named[3140]: using up to 4096 sockets Aug 4 14:57:09 www named[3140]: loading configuration from '/etc/named.conf' Aug 4 14:57:09 www named[3140]: using default UDP/IPv4 port range: [1024, 65535] Aug 4 14:57:09 www named[3140]: using default UDP/IPv6 port range: [1024, 65535] Aug 4 14:57:09 www named[3140]: listening on IPv4 interface lo, 127.0.0.1#53 Aug 4 14:57:09 www named[3140]: listening on IPv4 interface eth0, 192.168.1.100#53 Aug 4 14:57:09 www named[3140]: listening on IPv4 interface eth1, 192.168.100.254#53 Aug 4 14:57:09 www named[3140]: generating session key for dynamic DNS Aug 4 14:57:09 www named[3140]: command channel listening on 127.0.0.1#953 Aug 4 14:57:09 www named[3140]: command channel listening on ::1#953 Aug 4 14:57:09 www named[3140]: the working directory is not writable Aug 4 14:57:09 www named[3140]: running
Tips: 如果你在 /var/log/messages 里面一直看到这样的错误信息: couldn't add command channel 127.0.0.1#953: not found 那表示你还必需要加入 rndc key ,请参考本章后面的 利用 RNDC 指令管理 DNS 服务器 的介绍,将他加入你的 named.conf 中!
- 测试:
- 特别说明:Forwarders 的好处与问题分析
- 利用 Forwarder 的功能来增进效能的理论:
- 利用 Forwarder 反而会使整体的效能降低:
4 DNS 服务器的配置
- DNS 服务器的架设需要上层 DNS 的授权才可以成为合法的 DNS 服务器 ;
- 配置文件位置:目前 bind 程序已进行 chroot,相关目录可参考 /etc/sysconfig/named;
- named 主要配置文件是 /etc/named.conf;
- 每个正、反解领域都需要一个数据库档案,而文件名则是由 /etc/named.conf 所设定;
- 当 DNS 查询时,若本身没有数据库档案,则前往 root (.) 或 forwarders 服务器查询;
- named 是否启动成功务必要查阅 /var/log/messages 内的信息!
4.1 正解文件记录的数据 (Resource Record, RR)
- 正解文件资源记录 (resource record, RR) 格式
[root@www ~]# dig www.ksu.edu.tw....(前面省略).... ;; ANSWER SECTION: www.ksu.edu.tw. 2203 IN A 120.114.100.101 ;; AUTHORITY SECTION: ksu.edu.tw. 911 IN NS dns1.ksu.edu.tw.....(后面省略).... # 上面的输出数据已经被简化过了,重点是要大家了解 RR 的格式
[domain] [ttl] IN [[RR type] [RR data]] [待查数据] [暂存时间(秒)] IN [[资源类型] [资源内容]]
# 常见的正解文件 RR 相关信息 [domain] IN [[RR type] [RR data]] 主机名. IN A IPv4 的 IP 地址 主机名. IN AAAA IPv6 的 IP 地址 领域名. IN NS 管理这个领域名的服务器主机名字. 领域名. IN SOA 管理这个领域名的七个重要参数(容后说明) 领域名. IN MX 顺序数字 接收邮件的服务器主机名字 主机别名. IN CNAME 实际代表这个主机别名的主机名字.
- A, AAAA :查询 IP 的记录
[root@www ~]# dig [-t a] www.ksu.edu.tw ;; ANSWER SECTION: www.ksu.edu.tw. 2987 IN A 120.114.100.101 # 主机FQDN. ttl 这部主机的 IP 就是这里# 仅列出答案阶段的资料,后续的 RR 相关标志也是这样显示的喔! # 指令列中的 [-t a] 可以不加,而最左边主机名结尾都会有小数点喔!
- NS :查询管理领域名 (zone) 的服务器主机名
[root@www ~]# dig -t ns ksu.edu.tw ;; ANSWER SECTION: ksu.edu.tw. 1596 IN NS dns1.ksu.edu.tw. ;; ADDITIONAL SECTION: dns1.ksu.edu.tw. 577 IN A 120.114.50.1 # 除了列出 NS 是哪部服务器之外,该服务器的 IP 也会额外提供!
- SOA :查询管理领域名的服务器管理信息
[root@www ~]# dig -t soa ksu.edu.tw ;; ANSWER SECTION: ksu.edu.tw. 3600 IN SOA dns1.ksu.edu.tw. abuse.mail.ksu.edu.tw. 2010080369 1800 900 604800 86400 # 上述的输出结果是同一行喔!
- Master DNS 服务器主机名:这个领域主要是哪部 DNS 作为 master 的意思。在本例中, dns1.ksu.edu.tw 为 ksu.edu.tw 这个领域的主要 DNS 服务器啰;
- 管理员的 email:那么管理员的 email 为何?发生问题可以联络这个管理员。要注意的是, 由于 @ 在数据库档案中是有特别意义的,因此这里就将 abuse@mail.ksu.edu.tw 改写成 abuse.mail.ksu.edu.tw ,这样看的懂了吗?
- 序号 (Serial):这个序号代表的是这个数据库档案的新旧,序号越大代表越新。 当 slave 要判断是否主动下载新的数据库时,就以序号是否比 slave 上的还要新来判断,若是则下载,若不是则不下载。 所以当你修订了数据库内容时,记得要将这个数值放大才行! 为了方便用户记忆,通常序号都会使用日期格式『YYYYMMDDNU』来记忆,例如昆山科大的 2010080369 序号代表 2010/08/03 当天的第 69 次更新的感觉。不过,序号不可大于 2 的 32 次方,亦即必须小于 4294967296 才行喔。
- 更新频率 (Refresh):那么啥时 slave 会去向 master 要求数据更新的判断? 就是这个数值定义的。昆山科大的 DNS 设定每 1800 秒进行一次 slave 向 master 要求数据更新。那每次 slave 去更新时, 如果发现序号没有比较大,那就不会下载数据库档案。
- 失败重新尝试时间 (Retry):如果因为某些因素,导致 slave 无法对 master 达成联机, 那么在多久的时间内,slave 会尝试重新联机到 master。在昆山科大的设定中,900 秒会重新尝试一次。意思是说,每 1800 秒 slave 会主动向 master 联机,但如果该次联机没有成功,那接下来尝试联机的时间会变成 900 秒。若后来有成功,则又会恢复到 1800 秒才再一次联机。
- 失效时间 (Expire):如果一直失败尝试时间,持续联机到达这个设定值时限, 那么 slave 将不再继续尝试联机,并且尝试删除这份下载的 zone file 信息。昆山科大设定为 604800 秒。意思是说,当联机一直失败,每 900 秒尝试到达 604800 秒后,昆山科大的 slave 将不再更新,只能等待系统管理员的处理。
- 快取时间 (Minumum TTL):如果这个数据库 zone file 中,每笔 RR 记录都没有写到 TTL 快取时间的话,那么就以这个 SOA 的设定值为主。
- Refresh >= Retry *2
- Refresh + Retry < Expire
- Expire >= Rrtry * 10
- Expire >= 7Days
- CNAME :设定某主机名的别名 (alias)
[root@www ~]# dig www.google.com ;; ANSWER SECTION: www.google.com. 557697 IN CNAME www.l.google.com.www.l.google.com. 298 IN A 72.14.203.99
- MX :查询某领域名的邮件服务器主机名
[root@www ~]# dig -t mx ksu.edu.tw ;; ANSWER SECTION: ksu.edu.tw. 3600 IN MX 8 mx01.ksu.edu.tw. ;; ADDITIONAL SECTION: mx01.ksu.edu.tw. 3600 IN A 120.114.100.28
4.2 反解文件记录的 RR 数据
[root@www ~]# dig -x 120.114.100.101 ;; ANSWER SECTION: 101.100.114.120.in-addr.arpa. 3600 IN PTR www.ksu.edu.tw.
- PTR :就是反解啊!所以是查询 IP 所对应的主机名
4.3 步骤一:DNS 的环境规划:正解、反解 zone 的预先定义案例说明
- named.conf (主要配置文件)
- named.centos.vbird (主要的 centos.vbird 的正解檔)
- named.192.168.100 (主要的 192.168.100.0/24 的反解檔)
- named.ca (由 bind 软件提供的 . 正解檔)
操作系统与IP
|
主机名与 RR 标志
|
说明
|
Linux (192.168.100.254)
|
master.centos.vbird (NS, A) www.centos.vbird (A) linux.centos.vbird (CNAME) ftp.centos.vbird (CNAME) forum.centos.vbird (CNAME) www.centos.vbird (MX)
|
DNS 设置是使用 master.centos.vbird 这个 DNS 服务器名称。至于这部主机的另一个主要名称是 www.centos.vbird,其他的都是 CNAME,这样未来比较好修改。同时给予一个 MX 的标志给主要主机名喔
|
Linux (192.168.100.10)
|
slave.centos.vbird (NS, A) clientlinux.centos.vbird(A)
|
未来作为 slave DNS 的接班人~
|
WinXP (192.168.1.101)
|
workstation.centos.vbird (A)
|
一部经常用来工作的工作机
|
WinXP (192.168.100.20)
|
winxp.centos.vbird (A)
|
一部用来测试的 Windows XP
|
Win7 (192.168.100.30)
|
win7.centos.vbird (A)
|
一部用来测试的 Windows 7
|
Tips: 在自家设的没有经过合法授权的 DNS 最好不要以 Internet 上面已经存在的领域名来练习架设! 举例来说,假设今天你以 192.168.100.254 那部机器来架设 *.yahoo.com 的领域, 因为我将 192.168.100.254 放置在第一位,导致每次的查询其实 yahoo.com 这个领域的数据都是直接由 192.168.100.254 所提供,这很不好~因为可能会造成你的客户端的不便~
- options:全局配置规范 DNS 服务器的权限 (可否查询、forward 与否等);
- zone:设定出 zone (domain name) 以及 zone file 的所在 (包含 master/slave/hint);
- 其他:设定 DNS 本机管理接口以及其相关的密钥档案 (key file)。(本章稍后进阶应用再谈)
[root@www ~]# vim /etc/named.conf options { directory "/var/named"; 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 { any; }; recursion yes; allow-transfer { none; };// 不许别人进行 zone 转移 }; zone "." IN { type hint; file "named.ca"; }; zone "centos.vbird" IN { // 这个 zone 的名称 type master; // 是什么类型 file "named.centos.vbird"; // 档案放在哪里 }; zone "100.168.192.in-addr.arpa" IN { type master; file "named.192.168.100"; };
- allow-transfer ( none; };
zone 内的相关参数说明
|
|
设定值
|
意义
|
type
|
该 zone 的类型,主要的类型有针对 . 的 hint,以及自己手动修改数据库档案的 master,与可自动更新数据库的 slave。
|
file
|
就是 zone file 的檔名啊!(注意 chroot 与否呦!)
|
反解 zone
|
主要就是 in-addr.arpa 这个玩意儿!请参考 19.4.2 的解释
|
- ftp://rs.internic.net/domain/named.root
[root@www ~]# vim /var/named/named.ca . <==这里有个小数点 518400 IN NS A.ROOT-SERVERS.NET. A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4 # 上面这两行是成对的!代表点由 A.ROOT-SERVERS.NET. 管理,并附上 IP 查询 . <==这里有个小数点 518400 IN NS M.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET. 3600000 IN A 202.12.27.33 M.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:dc3::35 # 上面这三行是成对的,代表 M 开头的服务器有 A 与 AAAA 的记录
- 关于本领域的基础设定方面:例如快取记忆时间 (TTL)、领域名 (ORIGIN) 等;
- 关于 master/slave 的认证方面 (SOA);
- 关于本领域的领域名服务器所在主机名与 IP 对应 (NS, A);
- 其他正反解相关的资源记录 (A, MX, CNAME 等)。
字符
|
意义
|
一定从行首开始
|
所有设定数据一定要从行首开始,前面不可有空格符。若有空格符,代表延续前一个 domain 的意思~非常重要~
|
@
|
这个符号代表 zone 的意思!例如写在 named.centos.vbird 中,@ 代表 centos.vbird.,如果写在 named.192.168.100 档案中,则 @ 代表 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. 才对!
|
;
|
代表批注符号~似乎 # 也是批注~两个符号都能使用
|
[root@www ~]# vim /var/named/named.centos.vbird# 与整个领域相关性较高的设定包括 NS, A, MX, SOA 等标志的设定处!$TTL 600 @ IN SOA master.centos.vbird. vbird.www.centos.vbird. (2011080401 3H 15M 1W 1D ); 与上面是同一行 @ IN NS master.centos.vbird.; DNS 服务器名称 master.centos.vbird. IN A 192.168.100.254; DNS 服务器 IP @ IN MX 10 www.centos.vbird.; 领域名的邮件服务器# 针对 192.168.100.254 这部主机的所有相关正解设定。 www.centos.vbird. IN A 192.168.100.254 linux.centos.vbird. IN CNAME www.centos.vbird. ftp.centos.vbird. IN CNAME www.centos.vbird. forum.centos.vbird. IN CNAME www.centos.vbird. # 其他几部主机的主机名正解设定。 slave.centos.vbird. IN A 192.168.100.10 clientlinux.centos.vbird. IN A 192.168.100.10 workstation.centos.vbird. IN A 192.168.1.101 winxp.centos.vbird. IN A 192.168.100.20 win7 IN A 192.168.100.30; 这是简化的写法!
关于本领域的一些设定值
|
|
设定值
|
说明
|
$TTL
|
为了简化每笔 RR 记录的设定,因此我们将 TTL 挪到最前面统一设定。因为鸟哥的 DNS 服务器还在测试中,所以 TTL 写了个比较小的数值,可以存在对方 DNS 服务器的快取 600 秒而已。
|
$ORIGIN
|
这个设定值可以重新指定 zone 的定义。在预设的情况下,这个正反解数据库档案中的 zone 是由 named.conf 所指定的,就是 zone 那个参数的功能。 不过,这个 zone 是可以改的,就是用 $ORIGIN 来修订就是了。通常这个设定值不会用到的
|
19.4.7 步骤五:反解数据库档案的设定
[root@www ~]# vim /var/named/named.192.168.100 $TTL 600 @ IN SOA master.centos.vbird. vbird.www.centos.vbird. ( 2011080401 3H 15M 1W 1D ) @ IN NS master.centos.vbird. 254 IN PTR master.centos.vbird.; 将原本的 A 改成 PTR 的标志而已 254 IN PTR www.centos.vbird. ; 这些是特定的 IP 对应 10 IN PTR slave.centos.vbird. 20 IN PTR winxp.centos.vbird. 30 IN PTR win7.centos.vbird. 101 IN PTR dhcp101.centos.vbird. ; 可能针对 DHCP (第十二章) 的 IP 设定 102 IN PTR dhcp102.centos.vbird. ....(中间省略).... 200 IN PTR dhcp200.centos.vbird.
4.8 步骤六:DNS 的启动、观察与防火墙
[root@www ~]# /etc/init.d/named restart<==也可能是需要 restart 喔 [root@www ~]# chkconfig named on
[root@www ~]# tail -n 30 /var/log/messages | grep named named[3511]: starting BIND 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 -u named -t /var/named/chroot named[3511]: adjusted limit on open files from 1024 to 1048576 named[3511]: found 1 CPU, using 1 worker thread named[3511]: using up to 4096 sockets named[3511]: loading configuration from '/etc/named.conf' named[3511]: using default UDP/IPv4 port range: [1024, 65535] named[3511]: using default UDP/IPv6 port range: [1024, 65535] named[3511]: listening on IPv4 interface lo, 127.0.0.1#53 named[3511]: listening on IPv4 interface eth0, 192.168.1.100#53 named[3511]: listening on IPv4 interface eth1, 192.168.100.254#53 named[3511]: command channel listening on 127.0.0.1#953 named[3511]: command channel listening on ::1#953 named[3511]: the working directory is not writable named[3511]: zone 100.168.192.in-addr.arpa/IN: loaded serial 2011080401 named[3511]: zone centos.vbird/IN: loaded serial 2011080401 named[3511]: running
- 语法设定错误:
- 逻辑设定错误:
named: /etc/named.conf:8: missing ';' before '}' # 注意到上面提到的文件名与数字吗?说明的是 /etc/named.conf 的第 8 行, # 至于错误是因为缺少分号 (;) 所致!去修正一下即可。 dns_rdata_fromtext: named.centos.vbird:4: near eol: unexpected end of input zone centos.vbird/IN: loading master file named.centos.vbird: unexpected end of input _default/centos.vbird/IN: unexpected end of input # 指的是 named.centos.vbird 的第 4 行有问题,察看档案内容第 4 行是 SOA 的项目, # 通常是 SOA 那五个数字没有完全!赶紧去修订一下即可啊! dns_rdata_fromtext: named.centos.vbird:7: near 'www.centos.vbird.': not a valid number # 说明第 7 行在 www.centos.vbird 附近需要有一个合法的数字!刚好是 MX , # 所以,赶紧加上一个合法的数字,去瞧瞧改改即可!
[root@www ~]# vim /usr/local/virus/iptables/iptables.rule# 找到如下两行,将批注拿掉即可! iptables -A INPUT -p UDP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT iptables -A INPUT -p TCP -i $EXTIF --dport 53 --sport 1024:65534 -j ACCEPT [root@www ~]# /usr/local/virus/iptables/iptables.rule
4.9 步骤七:测试与数据库更新
[root@www ~]# vim /etc/resolv.confnameserver 192.168.100.254<==自己的 IP 一定要最早出现! nameserver 168.95.1.1
# 1. 检查 master.centos.vbird 以及 www.centos.vbird 的 A 标志 [root@www ~]# dig master.centos.vbird ;; ANSWER SECTION: master.centos.vbird. 600 IN A 192.168.100.254 [root@www ~]# dig www.centos.vbird ;; ANSWER SECTION: www.centos.vbird. 600 IN A 192.168.100.254# 2. 检查 ftp.centos.vbird 与 winxp 等等的 A 标志 [root@www ~]# dig ftp.centos.vbird ;; ANSWER SECTION: ftp.centos.vbird. 600 IN CNAME www.centos.vbird. www.centos.vbird. 600 IN A 192.168.100.254 [root@www ~]# dig winxp.centos.vbird ;; ANSWER SECTION: winxp.centos.vbird. 600 IN A 192.168.100.20# 3. 检查 centos.vbird 这个 zone 的 MX [root@www ~]# dig -t mx centos.vbird ;; ANSWER SECTION: centos.vbird. 600 IN MX 10 www.centos.vbird.# 4. 检查 192.168.100.254 及 192.168.100.10 的反解 [root@www ~]# dig -x 192.168.100.254 ;; ANSWER SECTION: 254.100.168.192.in-addr.arpa. 600 IN PTR www.centos.vbird. 254.100.168.192.in-addr.arpa. 600 IN PTR master.centos.vbird. [root@www ~]# dig -x 192.168.100.10 ;; ANSWER SECTION: 10.100.168.192.in-addr.arpa. 600 IN PTR slave.centos.vbird.
- 先针对要更改的那个 zone 的数据库档案去做更新,就是加入 RR 的标志即是!
- 更改该 zone file 的序号 (Serial) ,就是那个 SOA 的第三个参数 (第一个数字),因为这个数字会影响到 master/slave 的判定更新与否喔!
- 重新启动 named ,或者是让 named 重新读取配置文件即可。
19.5 协同工作的 DNS: Slave DNS 及子域授权设定
- 为了不间断的提供 DNS 服务,你的领域至少需要有两部 DNS 服务器来提供查询的功能;
- 承上,这几部 DNS 服务器应该要分散在两个以上的不同 IP 网域才好;
- 为方便管理,通常除了一部主要 Master DNS 之外,其他的 DNS 会使用 slave 的模式;
- slave DNS 服务器本身并没有数据库,他的数据库是由 master DNS 所提供的;
- master/slave DNS 必需要可以相互传输 zone file 的相关信息才行,这部份需要 /etc/named.conf 之设定辅助。
19.5.1 master DNS 权限的开放
- 提供 slave DNS 服务器进行 zone transfer 的服务器为 master.centos.vbird
- centos.vbird 及 100.168.192.in-addr.arpa 两个 zone 都提供给 slave DNS 使用
- master.centos.vbird 的 named 仅提供给 slave.centos.vbird 这部主机进行 zone transfer
- Slave DNS server 架设在 192.168.100.10 这部服务器上面 (所以 zone file 要修订)
# 1. 修订 named.conf,主要修改 zone 参数内的 allow-transfer 项目 [root@www ~]# vim /etc/named.conf....前面省略.... zone "centos.vbird" IN { type master; file "named.centos.vbird"; allow-transfer { 192.168.100.10; };// 在这里新增 slave 的 IP }; zone "100.168.192.in-addr.arpa" IN { type master; file "named.192.168.100"; allow-transfer { 192.168.100.10; };// 在这里新增 slave 的 IP };
# 2. 在 zone file 里面新增 NS 标志,要注意需要有 A(正解) 及 PTR(反解) 的设定 [root@www ~]# vim /var/named/named.centos.vbird $TTL 600 @ IN SOA master.centos.vbird. vbird.www.centos.vbird. ( 2011080402 3H 15M 1W 1D ) @ IN NS master.centos.vbird. @ IN NS slave.centos.vbird. master.centos.vbird. IN A 192.168.100.254 slave.centos.vbird. IN A 192.168.100.10 @ IN MX 10 www.centos.vbird. ....(底下省略).... [root@www ~]# vim /var/named/named.192.168.100 $TTL 600 @ IN SOA master.centos.vbird. vbird.www.centos.vbird. ( 2011080402 3H 15M 1W 1D ) @ IN NS master.centos.vbird. @ IN NS slave.centos.vbird. 254 IN PTR master.centos.vbird. 10 IN PTR slave.centos.vbird.....(底下省略).... # 要特别注意一件事,那就是,你的 zone file 内的序号要增加!鸟哥测试日期是 8/4, # 第 2 次进行,所以序号就以该天的日期为准来设计的!最后记得 restart 一下啦! [root@www ~]# /etc/init.d/named restart [root@www ~]# tail -n 30 /var/log/messages | grep named starting BIND 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 -u named -t /var/named/chroot ....(中间省略).... zone 100.168.192.in-addr.arpa/IN: loaded serial 2011080402 zone centos.vbird/IN: loaded serial 2011080402 zone 100.168.192.in-addr.arpa/IN: sending notifies (serial 2011080402) zone centos.vbird/IN: sending notifies (serial 2011080402)
19.5.2 Slave DNS 的设定与数据库权限问题
# 1. 准备 named.conf 的内容: [root@clientlinux ~]# vim /etc/named.conf....(前面的部分完全与 master.centos.vbird 相同,故省略).... zone "centos.vbird" IN { type slave; file "slaves/named.centos.vbird"; masters { 192.168.100.254; }; }; zone "100.168.192.in-addr.arpa" IN { type slave; file "slaves/named.192.168.100"; masters { 192.168.100.254; }; }; # 2. 检查 zone file 预计建立的目录权限是否正确!底下目录为系统默认值: [root@clientlinux ~]# ll -d /var/named/slavesdrwxrwx---. 2 named named 4096 2011-06-25 11:48 /var/named/slaves # 注意权限、使用者以及群组三个字段的数据!需要与 named 这个用户及群组有关! [root@clientlinux ~]# ll -dZ /var/named/slaves drwxrwx---. named named system_u:object_r:named_cache_t:s0 /var/named/slaves # 也不要忘记与 SELinux 有关的事情!
[root@clientlinux ~]# /etc/init.d/named start [root@clientlinux ~]# chkconfig named on [root@clientlinux ~]# tail -n 30 /var/log/messages | grep named starting BIND 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 -u named -t /var/named/chroot loading configuration from '/etc/named.conf' ....(中间省略).... running zone 100.168.192.in-addr.arpa/IN: Transfer started. zone 100.168.192.in-addr.arpa/IN: transferred serial 2011080402 zone centos.vbird/IN: Transfer started. zone centos.vbird/IN: transferred serial 2011080402<==注意序号正确否# 你会看到如上的讯息,重点是还有告知序号喔!非常重要! [root@clientlinux ~]# ll /var/named/slaves -rw-r--r--. 1 named named 3707 2011-08-05 14:12 named.192.168.100 -rw-r--r--. 1 named named 605 2011-08-05 14:12 named.centos.vbird # 这两个 zone file 会主动被建立起来呢! [root@clientlinux ~]# dig master.centos.vbird @127.0.0.1 [root@clientlinux ~]# dig -x 192.168.100.254 @127.0.0.1# 上述两个检测的指令如果是正确的显示出 A 与 PTR 的话,那就完成了!
zone centos.vbird/IN: Transfer started. transfer of 'centos.vbird/IN' from 192.168.100.254#53: connected using 192.168.100.10#58187 dumping master file: tmp-a1bYfCd3i3: open: permission denied transfer of 'centos.vbird/IN' from 192.168.100.254#53: failed while receiving responses: permission denied transfer of 'centos.vbird/IN' from 192.168.100.254#53: end of transfer
19.5.3 建置子域 DNS 服务器:子域授权课题
- 上层 DNS 服务器:亦即是 master.centos.vbird 这一部,只要在 centos.vbird 那个 zone file 内,增加指定 NS 并指向下层 DNS 的主机名与 IP (A) 即可,而 zone file 的序号也要增加才行;
- 下层 DNS 服务器:申请的领域名必须是上层 DNS 所可以提供的名称,并告知上层 DNS 管理员,我们这个 zone 所需指定的 DNS 主机名与对应的 IP 即可。然后就开始设定自己的 zone 与 zone file 相关数据。
- 上层 DNS 服务器:只需新增 zone file 的 NS 与 A 即可
[root@www ~]# vim /var/named/named.centos.vbird @ IN SOA master.centos.vbird. vbird.www.centos.vbird. ( 2011080501 3H 15M 1W 1D ) # 上面的 SOA 部分序号加大,底下新增这两行即可 (原本的数据都保留不动)!niki.centos.vbird. IN NS dns.niki.centos.vbird. dns.niki.centos.vbird. IN A 192.168.100.200 [root@www ~]# /etc/init.d/named restart [root@www ~]# tail -n 30 /var/log/messages | grep named Aug 5 14:22:36 www named[9564]: zone centos.vbird/IN: loaded serial 2011080501# 登录档的关键是上面的序号部分~必须是我们填写的新的序号才对! [root@www ~]# dig dns.niki.centos.vbird @127.0.0.1# 你会发现是错误的!找不到 A 喔!
- 下层 DNS 服务器:需要有完整的 zone 相关设定
# 1. 修改 named.conf ,增加 zone 的参数,假设档名为 named.niki.centos.vbird [root@niki ~]# vim /etc/named.conf....(前面省略)....zone "niki.centos.vbird" IN { type master; file "named.niki.centos.vbird"; };# 2. 建立 named.niki.centos.vbird [root@niki ~]# vim /var/named/named.niki.centos.vbird$TTL 600 @ IN SOA dns.niki.centos.vbird. root.niki.centos.vbird. ( 2011080501 3H 15M 1W 1D ) @ IN NS dns.niki.centos.vbird. dns IN A 192.168.100.200 www IN A 192.168.100.200 @ IN MX 10 www.niki.centos.vbird. @ IN A 192.168.100.200# 为了简化整个版面,所以鸟哥都使用 hostname 而非 FQDN!请见谅!# 3. 启动并观察相关登录信息 [root@niki ~]# /etc/init.d/named restart [root@niki ~]# tail -n 30 /var/log/messages | grep named....(前面省略).... zone niki.centos.vbird/IN: loaded serial 2011080501....(底下省略).... # 同时,记得处理一下防火墙的放行问题!否则测试会失败!! [root@niki ~]# dig www.niki.centos.vbird @192.168.100.254# 上述的动作必须要有响应才行!否则就会出问题~
5.4 依不同接口给予不同的 DNS 主机名: view 功能的应用
- 建立一个名为 intranet 的名字,这个名字代表客户端为 192.168.100.0/24 的来源;
- 建立一个名为 internet 的名字,这个名字代表客户端为非 192.168.100.0/24 的其他来源
- intranet 使用的 zone file 为本章前面各小节所建立的 zone filename,internet 使用的 zone filename 则在原本的档名后面累加 inter 的扩展名,并修订各标志的结果。
[root@www ~]# vim /etc/named.conf options { directory "/var/named"; 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 { any; }; recursion yes; allow-transfer { none; }; }; acl intranet { 192.168.100.0/24; }; <==针对 intranet 给予的来源 IP 指定 acl internet { ! 192.168.100.0/24; any; };<==加上惊叹号 (!) 代表反向选择的意思view "lan" { <==只是一个名字,代表的是内网 match-clients { "intranet"; };<==吻合这个来源的才使用底下的 zone zone "." IN { type hint; file "named.ca"; }; zone "centos.vbird" IN { type master; file "named.centos.vbird"; allow-transfer { 192.168.100.10; }; }; zone "100.168.192.in-addr.arpa" IN { type master; file "named.192.168.100"; allow-transfer { 192.168.100.10; }; }; }; view "wan" { <==同样,只是个名字而已! match-clients { "internet"; };<==代表的则是外网的 internet 来源 zone "." IN { type hint; file "named.ca"; }; zone "centos.vbird" IN { type master; file "named.centos.vbird.inter";<==档名必须与原有的不同! }; // 外网因为没有使用到内网的 IP,所以 IP 反解部分可以不写于此};
[root@www ~]# cd /var/named [root@www named]# cp -a named.centos.vbird named.centos.vbird.inter [root@www named]# vim named.centos.vbird.inter $TTL 600 @ IN SOA master.centos.vbird. vbird.www.centos.vbird. ( 2011080503 3H 15M 1W 1D ) @ IN NS master.centos.vbird. master.centos.vbird. IN A 192.168.1.100 @ IN MX 10 www.centos.vbird. www.centos.vbird. IN A 192.168.1.100 linux.centos.vbird. IN CNAME www.centos.vbird. ftp.centos.vbird. IN CNAME www.centos.vbird. forum.centos.vbird. IN CNAME www.centos.vbird. workstation.centos.vbird. IN A 192.168.1.101 [root@www named]# /etc/init.d/named restart [root@www named]# tail -n 30 /var/log/messages [root@www named]# dig www.centos.vbird @192.168.100.254 www.centos.vbird. 600 IN A 192.168.100.254# 要得到上面的 IP 才是对的喔!因为接口来自于 192.168.100.0/24 网段 [root@wwww named]# dig www.centos.vbird @192.168.1.100 www.centos.vbird. 600 IN A 192.168.1.100# 要得到上面的 IP 才是对的喔!因为接口来自非 192.168.100.0/24 网段
例题: 你的网站读者非常的多,但是分布在世界各地。你想让亚洲区的读者联机到台湾的站台,而其他国家的联机则连到美国的站台, 但又不想要让使用者自己挑选不同的主机名,想使用同一组主机名,此时该如何是好? 答: 鸟哥可以想到的最简单的方案,就是透过 DNS 来设定相同主机名的不同 IP 目标,亦即是透过 view 来规范即可。 不过,与上述鸟哥的区网简单范例不同,我们得要收集亚洲区的 IP 才行,这些区段可能可以透过底下的网站来取得: 五大洲的 IP 管理所属人:http://www.iana.org/numbers/ 每个单位的 IP 分布: http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml 台湾地区 IP 分布: http://rms.twnic.net.tw/twnic/User/Member/Search/main7.jsp?Order=inet_aton%28Startip%29 然后再透过 acl 以及 view 来规范即可。鸟哥的收集资料如下,如果有误,还请告知! 如上所示,加入 asia 与 nonasia 的相关设定,再使用 view 来处理相关的 zone ,并修改 zone file 内容, 就能够处理好这个案例的需求啰!
acl asia { 1.0.0.0/8; 14.0.0.0/8; 27.0.0.0/8; 36.0.0.0/8; 39.0.0.0/8; 42.0.0.0/0; 49.0.0.0/8; 58.0.0.0/8; 59.0.0.0/8; 60.0.0.0/8; 61.0.0.0/8; 101.0.0.0/8; 103.0.0.0/8; 106.0.0.0/8; 110.0.0.0/8; 111.0.0.0/8; 112.0.0.0/8; 113.0.0.0/8; 114.0.0.0/8; 115.0.0.0/8; 116.0.0.0/8; 117.0.0.0/8; 118.0.0.0/8; 119.0.0.0/8; 120.0.0.0/8; 121.0.0.0/8; 122.0.0.0/8; 123.0.0.0/8; 124.0.0.0/8; 125.0.0.0/8; 126.0.0.0/8; 175.0.0.0/8; 180.0.0.0/8; 182.0.0.0/8; 183.0.0.0/8; 202.0.0.0/8; 203.0.0.0/8; 210.0.0.0/8; 211.0.0.0/8; 218.0.0.0/8; 219.0.0.0/8; 220.0.0.0/8; 221.0.0.0/8; 222.0.0.0/8; 223.0.0.0/8; 139.175.0.0/16; 140.0.0.0/8;150.116.0.0/16;150.117.0.0/16; 163.0.0.0/8; 168.95.0.0/16;192.0.0.0/8; }; acl nonasia { ! "asia"; any; };
6 DNS 服务器的高级应用
6.1 架设一个合法授权的 DNS 服务器
- 1. 申请一个合法的 domain name ...就是要花钱!
- 进入主画面:
- 选择需要的域名,并查询该网域是否已存在:
- 逐步进行注册:
- 选择网站代管或架设 DNS 模式:
- 2. 以 DNS 服务器的详细设定 (19.4) 之设定内容来设定你的主机:
- 3. 测试:
more /var/log/messages 1 Oct 5 05:02:30 test named[432]: lame server resolving '68.206.244.205. in-addr.arpa' (in '206.244.205.in-addr.arpa'?): 205.244.200.3#53 2 Oct 5 05:02:31 test named[432]: lame server resolving '68.206.244.205. in-addr.arpa' (in '206.244.205.in-addr.arpa'?): 206.105.201.35#53 3 Oct 5 05:02:41 test named[432]: lame server resolving '68.206.244.205. in-addr.arpa' (in '206.244.205.in-addr.arpa'?): 205.244.112.20#53
# 1. 修改 /etc/named.conf [root@www ~]# vim /etc/named.conf// 加入底下这个参数:logging { category lame-servers { null; }; };# 2. 重新启动 bind [root@www ~]# /etc/init.d/named restart
command channel listening on 127.0.0.1#953
couldn't add command channel 127.0.0.1#953: not found
# 1. 先建立 rndc key 的相关数据吧! [root@www ~]# rndc-confgen# Start of rndc.conf <==底下没有 # 的第一部份请复制到 /etc/rndc.conf 中 key "rndc-key" { algorithm hmac-md5; secret "UUqxyIwui+22CobCYFj5kg=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; }; # End of rndc.conf # 至于底下的 key 与 controls 部分,则请复制到 named.conf 且解开 # 喔! # Use with the following in named.conf, adjusting the allow list as needed: # key "rndc-key" { # algorithm hmac-md5; # secret "UUqxyIwui+22CobCYFj5kg=="; # }; # # controls { # inet 127.0.0.1 port 953 # allow { 127.0.0.1; } keys { "rndc-key"; }; # }; # End of named.conf # 请注意,这个 rndc-confgen 是利用随机数计算出加密的那把 key , # 所以每次执行的结果都不一样。所以上述的数据与你的屏幕会有点不同。# 2. 建立 rndc.key 档案 [root@www ~]# vim /etc/rndc.key# 在这个档案当中将原本的数据全部删除,并将刚刚得到的结果给他贴上去key "rndc-key" { algorithm hmac-md5; secret "UUqxyIwui+22CobCYFj5kg=="; };# 3. 修改 named.conf [root@www ~]# vim /etc/named.conf# 在某个不被影响的角落建置如下的内容:key "rndc-key" { algorithm hmac-md5; secret "UUqxyIwui+22CobCYFj5kg=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; [root@www ~]# /etc/init.d/named restart
[root@www ~]# rndc Usage: rndc [-c config] [-s server] [-p port] [-k key-file ] [-y key] [-V] command command is one of the following: reload Reload configuration file and zones. stats Write server statistics to the statistics file. dumpdb Dump cache(s) to the dump file (named_dump.db). flush Flushes all of the server's caches. status Display status of the server. # 其他就给他省略啦!请自行输入这个指令来参考啰!
# 范例一:将目前 DNS 服务器的状态显示出来 [root@www ~]# rndc status version: 9.7.0-P2-RedHat-9.7.0-5.P2.el6_0.1 CPUs found: 1 worker threads: 1 number of zones: 27 <==这部 DNS 管理的 zone 数量 debug level: 0 <==是否具有 debug 及 debug 的等级 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF <==是否具有 debug 及 debug 的等级 recursive clients: 0/0/1000 tcp clients: 0/100 server is up and running <==是否具有 debug 及 debug 的等级# 范例二:将目前系统的 DNS 统计数据记录下来 [root@www ~]# rndc stats# 此时,预设会在 /var/named/data 内产生新档案,你可以去查阅: [root@www ~]# cat /var/named/data/named_stats.txt +++ Statistics Dump +++ (1312528012) ....(中间省略).... ++ Zone Maintenance Statistics ++ 2 IPv4 notifies sent ++ Resolver Statistics ++ ....(中间省略).... ++ Cache DB RRsets ++ [View: lan (Cache: lan)] [View: wan (Cache: wan)] [View: _bind (Cache: _bind)] [View: _meta (Cache: _meta)] ++ Socket I/O Statistics ++ 5 UDP/IPv4 sockets opened 4 TCP/IPv4 sockets opened 2 UDP/IPv4 sockets closed 1 TCP/IPv4 sockets closed 2 TCP/IPv4 connections accepted ++ Per Zone Query Statistics ++ --- Statistics Dump --- (1312528012) # 范例三:将目前高速缓存当中的数据记录下来 [root@www ~]# rndc dumpdb# 与 stats 类似,会将 cache 的数据放置成为一个档案,你可以去查阅: # /var/named/data/cache_dump.db
rndc: connection to remote host closed This may indicate that the remote server is using an older version of the command protocol, this host is not authorized to connect, or the key is invalid.
6.4搭建动态DNS服务器 --- 动态 DNS (Dynamic DNS, DDNS)
- 1. DDNS Server 端的设定:
[root@www ~]# dnssec-keygen -a [算法] -b [密码长度] -n [类型] 名称选项与参数: -a :后面接的 [type] 为演算方式的意思,主要有 RSAMD5, RSA, DSA, DH 与 HMAC-MD5 等。建议你可以使用常见的 HMAC-MD5 来演算密码; -b :你的密码长度为多少?通常给予 512 位的 HMAC-MD5; -n :后面接的则是客户端能够更新的类型,主要有底下两种,建议给 HOST 即可: ZONE:客户端可以更新任何标志及整个 ZONE; HOST:客户端仅可以针对他的主机名来更新。 [root@www ~]# cd /etc/named [root@www named]# dnssec-keygen -a HMAC-MD5 -b 512 -n HOST web Kweb.+157+36124 [root@www named]# ls -l -rw-------. 1 root root 112 Aug 5 15:22 Kweb.+157+36124.key -rw-------. 1 root root 229 Aug 5 15:22 Kweb.+157+36124.private # 上面那把是公钥,下面那把则是私钥档案! [root@www named]# cat Kweb.+157+36124.key<==看一下公钥! web. IN KEY 512 3 157 xZmUo8ozG8f2OSg/cqH8Bqxk59Ho8....3s9IjUxpFB4Q==# 注意到最右边的那个密码长度,等一下我们要复制的仅有那个地方!
[root@www ~]# vim /etc/named.conf// 先在任意地方加入这个 Key 的相关密码信息!key "web" { algorithm hmac-md5; secret "xZmUo8ozG8f2OSg/cqH8Bqxk59Ho8....3s9IjUxpFB4Q=="; };// 然后将你原本的 zone 加入底下这一段宣示 zone "centos.vbird" IN { type master; file "named.centos.vbird"; allow-transfer { 192.168.100.10; }; update-policy { grant web name web.centos.vbird. A; }; }; [root@www ~]# chmod g+w /var/named [root@www ~]# chown named /var/named/named.centos.vbird [root@www ~]# /etc/init.d/named restart [root@www ~]# setsebool -P named_write_master_zones=1
- 2. Client 端的更新:
[root@web ~]# cd /usr/local/ddns [root@web ddns]# nsupdate -k Kweb.+157+36124.key > server 192.168.100.254 > update delete web.centos.vbird <==删除原有的 > update add web.centos.vbird 600 A 192.168.100.200<==更新到最新的 > send > 最后在此按下 [ctrl]+D 即可
[root@web ~]# vim /usr/local/ddns/ddns_update.sh #!/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin export PATH # 0. keyin your parameters basedir="/usr/local/ddns" # 基本工作目录 keyfile="$basedir"/"Kweb.+157+36124.key" # 将档名填进去吧! ttl=600 # 你可以指定 ttl 的时间喔! outif="eth0" # 对外的联机接口! hostname="web.centos.vbird" # 你向 ISP 取得的那个主机名啦! servername="192.168.100.254" # 就是你的 ISP 啊! # Get your new IP newip=`ifconfig "$outif" | grep 'inet addr' | \ awk '{print $2}' | sed -e "s/addr\://"` checkip=`echo $newip | grep "^[0-9]"` if [ "$checkip" == "" ]; then echo "$0: The interface can't connect internet...." exit 1 fi # create the temporal file tmpfile=$basedir/tmp.txt cd $basedir echo "server $servername" > $tmpfile echo "update delete $hostname A " >> $tmpfile echo "update add $hostname $ttl A $newip" >> $tmpfile echo "send" >> $tmpfile # send your IP to server nsupdate -k $keyfile -v $tmpfile