linux的DNS服务详解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux的DNS服务详解相关的知识,希望对你有一定的参考价值。
一. DNS理论: DNS:域名服务(domain nsme service) 作用:将域名解析成IP(正向解析)或者把IP解析成域名(反向解析) DNS顶级域的分类: 组织域:.com .net .org ..... 国家域:.cn .tw .jp ..... 反向域:将ip解析为域名 DNS记录类型: A:正向解析条目 PTR:反向解析条目 NS:代表域内的DNS服务器 MX:代表域内的邮件服务器 CNAME:别名 SOA:用于标识域内的DNS服务器 注意:每添加一条NS记录,就应该为其添加一条相应的A记录 DNS服务器的类型: 主DNS服务器:master 从DNS服务器:slave 根DNS服务器:hint DNS缓存服务器:生活中接触最多的,一般都是作为我们的默认DNS(localDNS). 默认DNS服务器: 一般都是可以为我们进行迭代查询的DNS服务器 在Internet中,顶级域的DNS服务器不会为我们进行迭代查询,所有一般只要DNS缓存服务器会为我们进行迭代 DNS的查询类型: 迭代查询(tcp:53) 递归查询(udp:53) DNS的查询顺序: 1.DNS缓存 2.本地host文件 3.DNS服务器 IP和FQDN的对应关系:(FQDN:完全限定域名) ICANN:名称分配机构,他以及其下辖机构管理Internet上的所有域名 一个IP可以有多个域名(http虚拟主机的实现原理之一) 一个域名可以有多个ip(集群的负载均衡实现的原理之一) 从DNS的作用: 1.实现DNS的负载均衡 2.当主服务器出现故障时可以代替主服务器的工作 子域和委派: 委派:当区域中子域过多时,在一台服务器上不能很好的维护,就可以将一些子域分配给指定服务器进行维护 子域:解析文件存放在父域 委派:有独立的区域文件 检查工具(由bind-utils软件包提供) 检查DNS服务主配置文件是否有错误:named-checkconf 配置文件路径 检查DNS服务正反向文件是否有错误:named-checkzone 域名 与之对应的反向解析文件 二. DNS配置: ###主根DNS服务器配置: 三.配置文件 /etc/named.conf:DNS的主配置文件 /bind/named:此目录下存放DNS的区域数据文件 /bind/named/named.root 存放DNS的区域声明文件 ###配置文件详解: named.conf 主配置文件详解: options //全局配置区域 directory //区域数据文件的默认存放位置 pid-file //pid文件存放位置。向运行的DNS服务器发送信号的程序使用的。 dump-file //缓存文件存放路径,named的数据文件存放位置。 request-ixfr yes; //决定本地服务器是否作为辅域名服务器,会向主域名服务器发送域的增量传送请求。 recursion yes; //允许所有客户机递归(默认) statistics-file //统计信息的文件路径。 memstatistics-file //内存使用统计文件的路径名 allow-transfer {none;}; //设定哪台主机允许和本地服务器进行域传输,可设置在zone语句中.默认允许和所有主机进行域传输。 allow-query {any;}; //允许哪些客服机使用本DNS查询信息,可以是IP网段,或any。 listen-on port 53 { any; }; //DNS服务器的ip地址或any, 监听的ipv4和端口,(any:任意,53:udp53和tcp:53) zone区域部分解释: allow-transfer {none;}; //设定哪台主机允许和本地服务器进行域传输,可设置在zone语句中.默认允许和所有主机进行域传输。 allow-update { none; }; //是否允许"从服务器"更新DNS信息(none:拒绝) masterIP: 192.168.1.1 slaveIP: 192.168.1.2 北京localDNS: 192.168.1.4 山西localDNS: 192.168.1.5 GSLB地址: 192.168.1.41 修改主配置named.conf文件: [[email protected]~]# vim /etc/named.conf options { directory "/bind/named"; pid-file "/var/run/named/named.pid"; dump-file "/var/named/dump.named"; request-ixfr yes; // save bandwidth recursion yes; // please restrict this allow-transfer {none;}; listen-on { any; }; // listen on all IPv4 interfaces listen-on-v6 { any; }; // listen on all IPv6 interfaces }; /************* zone info *************/ // main zone zone "." in { //定义根域。 type master; //域类型. file "named.root"; //定义根域解析文件。 allow-transfer { 192.168.1.2; }; notify yes; //根DNS修改一个域后,notify消息会被发送到在域NS记录的上的服务器。 }; ##主根DNS服务器区域声明文件配置: [[email protected]~]# vim /bind/named/named.root $ORIGIN . //权威解析DNS服务器 @ 1D IN SOA @ root ( //域名 2018070402 //序列号,每一次修改都往上加,否则从根DNS不同步 1H //刷新时间,重新下载地址数据的间隔。 15M //重试间隔时间,下载失败之后的重试间隔。 1W //失效时间,超过该时间任无法下载则放弃。 5M ) //无法解析记录的生存期.1D也可以,表示1天。 . 518400 IN NS we.yuan.net.jp //DNS域名(NS域名服务器). we.yuan.net.jp 518400 IN A 192.168.1.1 //主根DNS服务器。 . 518400 IN A 192.168.1.1 . 518400 IN NS slave.we.yuan.net.jp slave.we.yuan.net.jp 518400 IN A 192.168.1.2 //从根DNS服务器。 . 518400 IN A 192.168.1.2 //从根DNS服务器。 ;GSLB地址。 ly.we.yuan.net.jp 518400 IN NS ns1.ly.we.yuan.net.jp ns1.ly.we.yuan.net.jp 518400 IN A 192.168.1.41 ;主根和从根DNS地址。 . 518400 IN NS we. we. 518400 IN A 192.168.1.1 . 518400 IN A 192.168.1.1 . 518400 IN NS slave.we. slave.we. 518400 IN A 192.168.1.2 . 518400 IN A 192.168.1.2 ly.we. 518400 IN NS ns3.ly.we. ns3.ly.we. 518400 IN A 192.168.1.41 ;山西 sx.we.yuan.net.jp 518400 IN NS ns5.sx.we.yuan.net.jp ns5.sx.we.yuan.net.jp 518400 IN A 192.168.1.5 ;北京 bj.we.yuan.net.jp 518400 IN NS ns6.bj.we.yuan.net.jp ns6.bj.we.yuan.net.jp 518400 IN A 192.168.1.4 ###从根DNS服务器配置: #vim /etc/named.conf options { directory "/bind/named/slave"; pid-file "/var/run/named/named.pid"; dump-file "/var/named/dump.named"; // cache file request-ixfr yes; // save bandwidth recursion yes; // please restrict this allow-transfer {none;}; allow-query {any;}; listen-on { any; }; // listen on all IPv4 interfaces listen-on-v6 { any; }; // listen on all IPv6 interfaces }; /************* zone info *************/ zone "." in { type slave; file "slave.root.hint"; masters { 192.168.1.1; }; //主根DNS地址 notify yes; }; ##从根DNS服务器区域声明文件配置: #vim /bind/named/slave.root.hint $ORIGIN . $TTL 86400 ; 1 day //生命周期 @ IN SOA . root. ( 2018070402 ; serial 3600 ; refresh (1 hour) 900 ; retry (15 minutes) 604800 ; expire (1 week) 300 ; minimum (5 minutes) ) $TTL 518400 ; 6 days //生命周期 NS we. NS we.yuan.net.jp NS slave.we. NS slave.we.yuan.net.jp A 192.168.1.2 A 192.168.1.1 we.yuan.com.cn A 192.168.1.1 $ORIGIN we.yuan.net.jp ly NS ns1.ly $ORIGIN ly.we.yuan.net.jp ns1 A 192.168.1.41 $ORIGIN we.yuan.net.jp slave A 192.168.1.2 ;山西localDNS sx NS ns3.sx $ORIGIN sx.we.yuan.net.jp ns3 A 192.168.1.5 ;北京localDNS $ORIGIN we.yuan.net.jp bj NS ns4.bj $ORIGIN bj.we.yuan.net.jp ns4 A 192.168.1.4 $ORIGIN . we A 192.168.1.1 $ORIGIN we. ly NS ns3.ly $ORIGIN ly.we. ns3 A 192.168.1.41 $ORIGIN we. slave A 192.168.1.2 ###山西localDNS配置: #vim /etc/named.conf options { directory "/var/named"; allow-query { any; }; listen-on port 53 { any; }; // listen on all IPv4 interfaces recursion yes; #dnssec-enable yes; #dnssec-validation yes; #dnssec-lookaside auto; }; zone "we.yuan.net.jp" IN { type forward; forwarders {192.168.1.2; }; }; zone "sx.we.yuan.net.jp" IN { type master; file "sx.we.yuan.net.jpzone"; }; zone "1.168.192-in-addr.arpa" IN { type master; file "1.168.192.zone"; }; ## ##vim /var/named/sx.we.yuan.net.jpzone $TTL 1D @ IN SOA dns root.tj.we.yuan.net.jp ( 0;serial 1D;refresh 1H;retry 1W;expire 3H);minimum @ NS ns5 ns5 A 192.168.1.5 test A 192.168.1.5 #vim /var/named/1.168.192.zone $TTL 1D @ IN SOA dns root.abc.sx.we.yuan.net.jp ( 0;serial 1D;refresh 1H;retry 1W;expire 3H);minimum NS abc.sx.we.yuan.net.jp 5 PTR abc.sx.we.yuan.net.jp ###北京localdns配置: #vim /etc/named.conf options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; 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; #dnssec-enable yes; #dnssec-validation yes; #dnssec-lookaside auto; }; //DNS日志系统,语法 logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "bj.we.yuan.net.jp" IN { type master; file "bj.we.yuan.net.jpzone"; }; zone "1.168.192-in-addr.arpa" IN { type master; file "1.168.192.zone"; }; zone "we.yuan.net.jp" IN { type forward; forwarders { 192.168.1.2; }; }; #vim bj.we.yuan.net.jpzone $ORIGIN bj.we.yuan.net.jp @ 1D IN SOA @ root ( 2009082604 3H 15M 1W 1D ) 1D IN NS @ IN A 192.168.1.4 test IN A 192.168.1.4 ###调试命令: named -g -u named named -g -u named -t 配置文件(named.conf)目录 -c 指定配置文件路径named.conf 三.转发器配置: 1.在需要做转发的服务器上做转发,一般都是在子域服务去上,将他转发给父域服务器 区域声明文件配置: 1.可以在主配置文件中的全局配置中配置,在全局配置中配置的对整个DNS服务器生效 2.在区域声明文件中声明转发域,这里是第二种方法: zone "we.yuan.net.jp" IN { //将we.yuan.net.jp的解析请求转发给we.yuan.net.jp type forward; //服务器类型 forward first; //指定转发类型 forwarders { 192.168.1.2; }; //转发给指定域 }; 转发域类型: first:转发给指定域,如果指定域没有给出解析则进行迭代查询 only:转发给指定域,如果指定域没有给出解析则返回给客户机无法解析的结果 主配置文件: 全局选项修改: dnssec-enable no; dnssec-validation no; 删除:dnssec-lookaside auto; 四.ACL ACL的概念:通过将指令编写在ACL中,可以实现同样的指令重复使用,类似于函数的功能(acl一般配合智能DNS使用) dns默认有两个ACL:any和none acl的编写原则:一般都编写在文件的最前面,因为acl必须先声明,再调用的 语法: acl acl名 { 指令; 指令; ....; };
如果不明白,请看图:
注意: 需要在防火墙开放DNS,TCP53和UDP53端口。 如果是山西localDNS服务器,采用的是GSLB负载均衡器,将山西的一部分域名转发给GSLB,那么必须要在主根DNS服务器配置一条A记录指向GSLB地址。 北京的从根DNS服务器需要与北京localdns和山西localdns互通,可以ping通。 结论: 在北京localdns服务器可以解析到山西的域名。在山西localdns可以解析到北京localdns的域名。 用nslookup和dig命令解析。 nslookup test.sx.we.yuan.net.jp命令返回192.168.1.5的地址。 nslookup test.bj.we.yuan.net.jp命令返回192.168.1.4的地址。 linux用rndc flush命令 清空DNS缓存。 dig命令输出详解: #dig www.baidu.com 下面说明各项意义: ; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.6 <<>> baidu.com ;; global options: printcmd dig程序的版本号,和要查询的域名 Dig的部分输出告诉我们一些有关于它的版本信息(version 9.2.3)和全局的设置选项,如果+nocmd在命令行下 是第一个参数的话,那么这部分输出可以通过加+nocmd的方式查询出来 ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54864 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0 在这里,Dig告诉我们一些从DNS返回的技术信息,这段信息可以用选项 +[no]comments来控制显示,但是小心 ,禁止掉comments也可能关闭一些其它的选项。 opcode 操作码,QUERY,代表是查询操作 status 状态,NOERROR,代表没有错误 id 编号,54864,16bit数字,在dns协议中,通过编号匹配返回和查询。 flags 标志,如果出现就表示有标志,如果不出现就未设置标志: qr query,查询标志,代表是查询操作 rd recursion desired, 代表希望进行递归(recursive)查询操作 ra recursive available 在返回中设置,代表查询的服务器支持递归(recursive)查询操作。 aa Authoritative Answer 权威回复,如果查询结果由管理域名的域名服务器而不是缓存服务器提供的,则称为权威回复。 QUERY 查询数,1代表1个查询,对应下面的QUESTION SECTION中的记录数 ANSWER 结果数,4代表有4项结果,对应下面ANSWER SECTION中的记录数 AUTHORITY 权威域名服务器记录数,0代表该域名有0个权威域名服务器,可供域名解析用。 ADDITIONAL 格外记录数,0代表有0项格外记录。 ;; QUESTION SECTION: ;baidu.com. INA 在这个查询段中,Dig显示出我们查询的输出,默认的查询是查询A记录,你可以显示或者禁止掉这些用+[no]question 查询部分,从左到右各部分意义: 1、要查询的域名,这里是baidu.com.,'.'代表根域名,com顶级域名,baidu二级域名 2、class,要查询信息的类别,IN代表类别为IP协议,即Internet。还有其它类别,比如chaos等,由于现在都是互联网,所以其它基本不用。 3、type,要查询的记录类型,A记录(Address),代表要查询ipv4地址。AAAA记录,代表要查询ipv6地址。 ;; ANSWER SECTION: baidu.com. 600IN A 123.125.114.144 baidu.com. 600IN A 180.149.132.47 baidu.com. 600IN A 111.13.101.208 baidu.com. 600IN A 220.181.57.217 最后,我们得到我们查询的结果。baidu.com的地址是123.125.114.144,但是你可以用+[no]answer来保留或不保留这些选项。 回应部分,回应都是A记录,A记录从左到右各部分意义: 1、对应的域名,这里是baidu.com.,'.'代表根域名,com顶级域名,baidu二级域名 2、TTL,time ro live,缓存时间,单位秒。600,代表缓存域名服务器,可以在缓存中保存76秒该记录。 3、class,要查询信息的类别,IN代表类别为IP协议,即Internet。还有其它类别,比如chaos等,由于现在都是互联网,所以其它基本不用。 4、type,要查询的记录类型,A记录,代表要查询ipv4地址。AAAA记录,代表要查询ipv6地址。 5、域名对应的ip地址。 ;; Query time: 2 msec 查询耗时 ;; SERVER: 192.168.132.1#53(192.168.132.1) 查询使用的服务器地址和端口 ;; WHEN: Mon Jul 18 16:31:03 2016 查询的时间 ;; MSG SIZE rcvd: 91 回应的大小。收到(rcve, recieved)91字节
以上仅为测试使用,具体需要根据生产环境而定。 仅为个人工作经验总结,如有错误之处,希望各位博友可以指正错误之处。谢谢各位博友。
以上是关于linux的DNS服务详解的主要内容,如果未能解决你的问题,请参考以下文章