1.什么是DNS服务?
DNS服务是实现把主机名或域名解析为一个IP的服务,或者这样理解,当你搜索一个网址时,你需要键入刚网站对应的ip地址(因为计算机更理解数字啊),但是大量的ip地址作为网址搜索时,无疑是一件很麻烦的事情,好比通讯录一样,因此我们就需要通过一个容易记忆的字符串记录,而DNS服务就是完成字符串与ip地址之间的转换。
2.了解一些基础概念:
FQDN:全限定域名,即逻辑上的主机名加上主机在域中的位置,
TLD:顶级域名,有两个词组成,中间有小数点,全球一共13个根节点
分类:
国家个地区的顶级域名
国际顶级域名
DNS:域名服务器
通过域名数据库记录的数据,进行域名与ip地址之间的转换,工作在udp/tcp的53号端口上
[扩展]tcp:传输控制协议:双方通信前需要事先建立虚连接的的面向连接的协议
udp:数据控制协议:双方通信前无需事先建立虚连接的协议
3.DNS查询的类型:
根据上图:简单的可以看出DNS的查询类型分为两种:
第一种:递归查询,即客户端到本地DNS服务器之间的通信
第二种:迭代查询,即本地DNS服务器与其他DNS服务器之间的查询
4.DNS的解析方式:
正向解析:名称到ip转换的操作
反向解析:ip到名称之间的转换操作
5.DNS解析的过程
递归查询:
客户端首先访问hosts文件查看是否有该条名称记录的ip地址,如果没有在本地的DNS服务进行查询,如果有,则直接返回给客户端,这样的过程就是递归,本地的dns只是传递给客户端最终的结果(有or没有)
迭代查询:首先访问hosts文件,如果没有,切换到本地的dns服务,本地客户端倘若也没有该条记录,则直接会询问跟节点,根节点会返回本地DNS服务器一个该名称对应的的二级域,dns会继续向该二级域查询该名称的地址,知道查询到该地址的权威服务器回应的权威答案ip,本地DNS服务器然后将结果返回给客户端,这就是完成了dns解析过程中迭代与递归的过程
6.DNS的配置文件
区域(物理概念)和域(逻辑概念)
正向解析库: FQDN-IP
反向解析库 : IP-FQDN
7.区域数据库文件
资源记录:Resource Record, 简称rr;
记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
A: Address, 地址记录,FQDN --> IPv4;
AAAA:地址记录, FQDN --> IPv6;
CNAME:Canonical Name,别名记录;
PTR:Pointer,IP --> FQDN
MX:Mail eXchanger,邮件交换器;
优先级:0-99,数字越小优先级越高;
资源记录的定义格式:
语法:name [TTL] INRR_TYPE value
SOA:
name: 当前区域的名字;例如”linuxedu.com.”,或者“2.3.4.in-addr.arpa.”;
value:有多部分组成
(1) 当前区域的区域名称(也可以使用主DNS服务器名称);
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
(3) (主从服务协调属性的定义以及否定答案的TTL)
例如:
linuxedu.com. 86400 IN SOA linuxedu.com. admin.linuxedu.com. ( 2017010801 ; serial 2H ; refresh 10M ; retry 1W ; expire 1D ; negative answer ttl)
NS:
name: 当前区域的区域名称
value:当前区域的某DNS服务器的名字,例如ns.linuxedu.com.;
注意:一个区域可以有多个ns记录;
例如:
linuxedu.com. 86400 IN NS ns1.linuxedu.com. linuxedu.com. 86400 IN NS ns2.linuxedu.com.
MX:
name: 当前区域的区域名称
value:当前区域某邮件交换器的主机名;
注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
例如:
linuxedu.com. IN MX 10 mx1.linuxedu.com. linuxedu.com. IN MX 20 mx2.linuxedu.com.
A:
name:某FQDN,例如www.linuxedu.com.
value:某IPv4地址;
例如:
www.linuxedu.com. IN A 1.1.1.1 www.linuxedu.com. IN A 1.1.1.2 bbs.linuxedu.com. IN A 1.1.1.1
AAAA:
name:FQDN
value: IPv6
PTR:
name:IP地址,有特定格式,IP反过来写,而且加特定后缀;例如1.2.3.4的记录应该写为4.3.2.1.in-addr.arpa.;
value:FQND
例如:
4.3.2.1.in-addr.arpa. IN PTR www.linuxedu.com.
CNAME:
name:FQDN格式的别名;
value:FQDN格式的正式名字;
8.概念那么多,我们来实践一下,如何实现DNS解析(centos7平台)
了解bind:Berkeley Internet Name Domain伯克利互联网名称域
bind是dns服务的一种实现
named:是bind程序运行的进程名
bind中包括的程序包:
bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
bind-utils:bind客户端程序集,例如dig, host, nslookup等;
bind:提供的dns server程序、以及几个常用的测试程序;
bind-chroot:选装,让named运行于jail模式下;
首先安装bind程序包
[root@bogon yum.repos.d]# yum info bind Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: * extras: mirrors.aliyun.com Available Packages Name : bind Arch : x86_64 Epoch : 32 Version : 9.9.4 Release : 29.el7 Size : 1.8 M Repo : base/7/x86_64 Summary : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server URL : http://www.isc.org/products/BIND/ License : ISC Description : BIND (Berkeley Internet Name Domain) is an implementation of the DNS : (Domain Name System) protocols. BIND includes a DNS server (named), : which resolves host names to IP addresses; a resolver library : (routines for applications to use when interfacing with DNS); and : tools for verifying that the DNS server is operating properly.
安装bind程序包:
[root@bogon yum.repos.d]# yum install -y bind*
9.dns的配置文件
(1)主配置文件
/etc/named.conf或包含进来的其他文件/etc/named.iscdlv.key,/etc/named.rfc1912.zones,
/etc/named.root.key
(2)解析库文件
/var/named/目录下,一般为ZONE_NAME.zone
[注意]
(1)一台DNS服务器可同时为多个区域提供解析;
(2) 必须要有根区域解析库文件: named.ca;
(3) 还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
正向:named.localhost
[root@bogon yum.repos.d]# cat /var/named/named.localhost $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS @ A 127.0.0.1 AAAA ::1
反向:named.loopback
[root@bogon yum.repos.d]# cat /var/named/named.loopback $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS @ A 127.0.0.1 AAAA ::1 PTR localhost.
rndc:远程名称域控制
工作在953/tcp端口,但默认监听于127.0.0.1地址,因此仅允许本地使用,不允许远程
bind程序安装完成之后,默认即可做缓存名称服务器使用;如果没有专门负责解析的区域,直接即可启动服务;
CentOS 6: service named start
CentOS 7: systemctl start named.service
主配置文件的格式:每个语句必须使用分号结尾
全局配置段:options{...}
日志配置段:logging{...}
区域配置段:zone{...}
options {#全局配置段 listen-on port 53 { 127.0.0.1; };#缓存名称服务器只监听在本机,也可是一个ip范围 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 { localhost; };#测试时建议关闭,表示仅允许贝斯查询 recursion yes; dnssec-enable yes; dnssec-validation yes;
缓存名称服务器的配置
监听能与外部主机通信的地址
listen-on port 53;
listen-on port 53 { 192.168.1.100 ;};
listen-on port 53 { 192.168.1.100,192.168.1.200 ;};
测试时建议关闭dnssec,需要时开启
dnssec-enable no; dnssec-validation no;
建议关闭仅允许本地查询
#allow-query{localhost;};
检查语法错误命令
named-checkconf
开启服务,检查端口
[root@bogon ~]# systemctl start named.service [root@bogon ~]# netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 1355/named tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1094/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1096/cupsd tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 1355/named tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1212/master tcp6 0 0 ::1:53 :::* LISTEN 1355/named tcp6 0 0 :::22 :::* LISTEN 1094/sshd tcp6 0 0 ::1:631 :::* LISTEN 1096/cupsd tcp6 0 0 ::1:953 :::* LISTEN 1355/named tcp6 0 0 ::1:25 :::* LISTEN 1212/master udp 0 0 0.0.0.0:2294 0.0.0.0:* 886/dhclient udp 0 0 127.0.0.1:323 0.0.0.0:* 837/chronyd udp 0 0 127.0.0.1:53 0.0.0.0:* 1355/named udp 0 0 0.0.0.0:68 0.0.0.0:* 886/dhclient udp6 0 0 ::1:323 :::* 837/chronyd udp6 0 0 :::13128 :::* 886/dhclient udp6 0 0 ::1:53 :::* 1355/named
介绍几款测试工具
dig命令
格式:dig [-t RR_TYPE] NAME [@SERVER] [query options]
主要是检测DNS系统,因此不会查询host文件;
注意两个选项:
+[no]trace:跟踪解析过程
+[no]recurse:进行递归解析
反向解析:dig -x IP
模拟完全区域传送:dig -t axfr DOMAIN [@server]
host命令:
host [-t RR_TYPE] name SERVER_IP
nslookup命令:
nslookup [-options] [name] [server]
交互式模式:
nslookup>
server IP:以指定的IP为DNS服务器进行查询;
set q=RR_TYPE:要查询的资源记录类型;
name:要查询的名称;
rndc命令:named服务控制命令
rndc status
rndc flush
配置一个正向区域:
(1)定义区域
在主配置文件中或主配置文件辅助配置文件中实现/etc/named.rfc.1912.zones中追加
zone "linuxedu.top" IN { type master; file "linuxedu.top.zone"; }
(2)定义区域数据文件(主要记录为A或AAAA记录)路径为/var/named目录下
创建linuxedu.top数据文件
1) $TTL 变量,全局继承此处的缓存周期,单位是秒
2) @代替/etc/named.rfc1912.zones配置的ZONE_NAME,也可以自己定义补全宏:$ORIGIN linuxedu.top.
3) 定义第二条记录,若写全称最后一个点绝对不能省略
简写时会自动补全/etc/named.rfc1912.zones配置的ZONE_NAME,此时一定不能有这个点
示例格式:ns1==ns1.linuxedu.top.
4) 同一个地址可以有两个名字
5) 一台DNS服务器上配置可以为正常的在互联网上运行的服务器解析,指向为www的具体地址
www IN A [www服务器地址]
6) 可以定义别名类型:例如web IN CNAME www #定义别名
[root@bogon named]# cd /var/named/ [root@bogon named]# vim linuedu.top.zone [root@bogon named]# cat linuedu.top.zone $TTL 3600 @ IN SOA ns1.linuxedu.top. 1451032707.qq.com ( 2016050113 ;serial 3H ;refresh 10M ;retry 1W ;expire 1D ;negative answer ttl ) IN NS ns1.linuxedu.top. ns1 IN A 192.168.1.100 www IN A 192.168.1.100
权限及数组修改:
# chgrp named /var/named/magedu.com.zone # chmod o= /var/named/172.16.100.zone
检查语法错误:
# named-checkzone ZONE_NAME ZONE_FILE # named-checkconf
让服务器重载配置文件和区域数据文件
# rndc reload 或者 # systemctl reload named.service
测试主机
[root@localhost named]# dig -t A www.linuxedu.top @192.168.168.128 ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> -t A www.linuxedu.top @192.168.168.128 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30492 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.linuxedu.top. IN A ;; ANSWER SECTION: www.linuxedu.top. 3600 IN A 192.168.168.128 ;; AUTHORITY SECTION: linuxedu.top. 3600 IN NS ns1.linuxedu.top. ;; ADDITIONAL SECTION: ns1.linuxedu.top. 3600 IN A 192.168.168.128 ;; Query time: 1 msec ;; SERVER: 192.168.168.128#53(192.168.168.128) ;; WHEN: Sun May 01 14:09:46 CST 2016 ;; MSG SIZE rcvd: 95
配置解析一个反向区域
定义区域:
在主配置文件中或主配置文件辅助配置文件中实现
$TTL 3600 $ORIGIN 168.168.192.in-addr.arpa. @ IN SOA ns1.linuxedu.top 1451032707.qq.com ( 2016050116 ;serial 1H ;reflush 10M ;retry 3D ;expire 12H ;ttl ) IN NS ns1.linuxedu.top. 129 IN PTR ns2.linuxedu.top. 129 IN PTR www.linuxedu.top.
其他步骤,与正向解析一样
本文出自 “Touch Dream” 博客,请务必保留此出处http://xuelong.blog.51cto.com/10573089/1769318
原文地址:http://xuelong.blog.51cto.com/10573089/1769318