一:DNS 概述

 1.1 DNS 的作用

在互联网中,人们使用域名来访问服务器,但是,互联网是使用 IP地址 进行通信的,所以就需要DNS来将域名和IP地址相互转换。这个过程称为域名解析。

 一个 IP 地址可以对应多个域名,但是 一个完整的域名只可以对应一个 IP 地址

 

DNS解析耗时怎么用java解析 dns解析用的哪个端口_服务器

 

 

 

1.2 DNS 的定义

 DNS((Domain Name System): 域名解析服务,可以将域名解析为对应的IP地址。

使用 TCP 和 UDP 的53 端口 。TCP 53 端口用于连接 DNS 服务器。UDP 的53 端口用于解析DNS

每一级 域名长度 限制 是63 个字符,域名总长度 则不能超过 253 个字符

 

1.3 域名结构

http://www.sina.com.cn./

www :主机名

.sina : 子域

.com : 二级域

.cn : 顶级域 

" . "  : 根域

DNS解析耗时怎么用java解析 dns解析用的哪个端口_DNS解析耗时怎么用java解析_02

 

 

 

DNS 整个结构图是树状结构,最顶层称为 根域, 用 点  " . " 表示,相应服务器称为根服务器,整个域名空间的解析权都归根服务器所有。

因为负载庞大,所以采用  “ 委派” 机制,根域下设置顶级域,将顶级域解析权委派给顶级域服务器

同理,顶级域 下面设置 二级域, 二级域 下设 三级域

 

根域: 

位于域名空间最顶层, 一般用 一个 点  " .  " 表示

 

顶级域:

一般代表一种类型的组织机构或者国家地区。

.net  (网络供应商),  .com (工商企业) , .org (团体组织),   .edu (教育机构) , .gov (政府部门) , .cn (中国国家域名)

 

二级域:

用来标明顶级域内的一个特定组织,国家顶级域下面的二级域名有国家网络部门统一管理

如  .cn 顶级域名下面设置的二级域名 : .com.cn   ,  .net.cn   , .edu.cn

 

子域:

二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名

 

主机:

主机位于域名空间最下层,就是一台具体的计算机

如 : www ,mail , 等 都是具体计算机的名字

www.sina.com.cn   , mail.sina.com.cn  这种完整的表示方式,称为  FQDN (完整合格域名)

 

1.4 DNS 域名解析方式和查询模式

1.4.1解析方式

正向解析: 根据域名查找对应的 IP 地址

反向解析:根据IP地址查找对应的域名

 

1.4.2 查询模式

递归查询:

查询到根域名服务器,没有结果。

然后根域名服务器帮助本地域名服务器向下查询一级域名服务器,依次递归查询。

查询到权限域名服务器器后,获取结果,结果依次递归传递到根域名服务器,根域名服务器告知本地服务器查询结果

 

迭代查询:

根域名服务器不会向下查询,只会告诉本地域名服务器去查找哪个顶级域名服务器(一级域名服务器)。

顶级域名服务器再告诉本地域名服务器去哪个权限域名服务器查询。

本地域名再查询对应的权限域名服务器,直接从权限域名服务器获取结果

 

1.5 DNS 服务器类型

(1)主域名服务器:

负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。

构建主域名服务器时,需要自行建立所负责区域的地址数据文件。

 

(2)从域名服务器:

当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。

从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。

构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。

 

(3)缓存域名服务器:

只提供域名解析结果的缓存功能, 目的在于提高查询速度和效率,但没有域名数据库。

它从某个远程服务器取得每次域名服务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它予以响应。

缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。

构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。

 

(4)转发域名服务器:

负责所有非本地域名的本地查询。

转发域名服务器接到查询请求后,在其缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止,否则返回无法映射的结果。

 

二: 配置DNS

2.1  下载安装软件包,查看配置文件

BIND (Berkeley  Internet  Name  Daemon) 软件包下载

相关软件包:

bind-9.9.4-37.el7.x86_64.rpm

bind-utils-9.9.4-37.el7.x86_64.rpm

bind-llibs-9.9.4-37.el7.x86_64.rpm

bind-chroot-9.9.4-37.el7.x86_64.rpm

 

主要执行程序:/usr/sbin/named

默认监听端口:53

主配置文件 /etc/named.conf

保存DNS 解析记录的数据文件在 /var/named 目录

[root@promote ~]# yum -y install bind

[root@promote ~]# rpm  -qc bind  #查询bind 文件所在路径
/etc/named.conf                 #主配置文件       
/etc/named.rfc1912.zones        #区域配置文件
/var/named/named.ca             #13台根域DNS 服务器     
/var/named/named.localhost      #区域数据配置文件

 

2.2 修改主配置文件

[root@promote ~]# vim /etc/named.conf 
#options 区域为全局配置,其优先级小于区域配置
options {
        listen-on port 53 { 192.168.23.10; };        
        #监听 53 端口。ip地址使用提供服务的本地ip。
        #也可以使用  any 表示所有

#       listen-on-v6 port 53 { ::1; };    #ipv6地址
        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     { 192.168.23.0/24; 192.168.1.0/24; };
        #允许使用本DNS 解析服务的网段,也可以设置为单个ip ,多个参数使用 分号 ; (注意,使用英文分号) 隔开 
        #可以使用 any 表示所有
        
       recursion yes;
       #递归解析
       ......
};
zone "." IN {                    #正向解析 " . " 根区域
        type hint;               #类型为根区域
        file "named.ca";         #区域文件为 named.ca  记录了13 台 根区域服务器的域名和 ip 地址等信息
};
include "/etc/named.rfc1912.zones";
#包含区域配置文件里的所有配置

 

 

 2.3 修改区域配置文件,和正向区域数据文件

2.3.1添加正向区域配置

[root@promote ~]# vim /etc/named.rfc1912.zones 
zone "mynet.com" IN {                 #正向解析"mynet.com"
        type master;                  #类型为主区域
        file "mynet.com.zone";        #指定区域数据文件为  mynet.com.zone  ,
                                      #数据配置文件 默认在 /var/named/ 目录下。文件记录了 主机名和ip地址的映射关系 
        allow-update { none; };
};

 

 

2.3.2 配置正向区域数据文件

[root@promote ~]# cd /var/named/
[root@promote named]# cp -p named.localhost  mynet.com.zone
# mynet.com.zone 默认不存在,复制模板文件
# 要使用 cp -p 命令复制文件因为服务是使用 用户 named 启动的

[root@promote named]# vim mynet.com.zone
$TTL 1D                                                               #有效解析记录的生存周期
@       IN SOA  mynet.com.  admin.mynet.com. (                        # @ 表示变量,代表当前DNS 区域名
                                                                      #  mynet.com.  域名是要完整合格域名 "." 不可以少
                                                                     #  admin.mynet.com  管理员邮箱
                                                                                                                                           
                                        0       ; serial             # 更新序列号,可以是 10位数 以内的整数。主从服务器不可以一样
                                        1D      ; refresh            # 刷新时间,重新下载地址数据的间隔
                                        1H      ; retry              # 重试延时,下载失败后的重试间隔
                                        1W      ; expire             # 失效时间,超过该时间仍无法下载则放弃
                                        3H )    ; minimum            # 无效解析记录的生存周期
                                        
           NS      mynet.com.                      # NS 用于记录当前区域的 DNS 名称, 使用完整合格域名
           A       192.168.23.10                   # 记录 主机的 IP 地址, 也就是 服务器IP 地址
IN   MX    10     mail.mynet.com.                  # MX 为邮件交换记录,数字越大越优先。 可以不配本条配置     
www  IN    A     192.168.23.10                     # 设置正向解析 www.mynet.com  对应的 IP
mail IN    A     192.168.23.11                     # 设置正向解析 mail.mynet.com  对应的 IP
ftp  IN    CNAME www                               # CNAME 使用别名 ,设置 ftp 是www 的别名
*    IN    A     192.168.23.12                     # 泛域名解析,"*" 代表任意主机名 ,代表除了上面设置的主机名,其他主机名

 

 

# SOA 记录中的更新序列号用于同步主从服务器区域数据, 当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载

# 管理员admin 名字可以自己设置。后面应该是"@" 但是,因为"@" 有其他意思,所有使用 "."来表示

# " mynet.com." 应该为 完整合格域名(FQDN) , 后面的 " . " 不可以少

 

2.4 检测配置文件语法,启动服务

[root@promote named]# systemctl stop firewalld         #关闭 firewalld 防火墙
[root@promote named]# systemctl disable firewalld      #禁止 firewalld 自启
[root@promote named]# setenfoce 0                      #设置 selinux 为 Permissive
[root@promote named]# vim /etc/selinux/config          # 或者 修改配置文件,将selinux 设置为 disabled 或者 permissive (重启生效)
SELINUX=disabled

[root@promote named]# named-checkconf         #检测 主配置文件 语法。 没有任何输出表示 /etc/named.conf没有语法错误

[root@promote named]# named-checkzone "mynet.com" "mynet.com.zone"   # 正向解析区域检查 
zone mynet.com/IN: loaded serial 0
OK

[root@promote named]# systemctl start named                # 启动服务named 
[root@promote named]# systemctl enable named               # 设置服务named 开机自启
root@promote named]# netstat -natup | grep named           # 查看服务named 的端口
tcp        0      0 192.168.23.10:53        0.0.0.0:*               LISTEN      3638/named          
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      3638/named          
tcp6       0      0 ::1:953                 :::*                    LISTEN      3638/named          
udp        0      0 192.168.23.10:53        0.0.0.0:*                           3638/named

 

 

 2.5  客户端域名解析文件 添加DNS 服务器地址

[root@promote ~]# vim /etc/resolv.conf     #修改后立即生效,但是重启系统,或者重启网卡后,DNS 地址会变成 网卡配置文件里的 DNS 项设置的地址
nameserver 192.168.23.10
或者
[root@promote ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33   #修改网卡配置文件,修改后需要重启网卡
DNS1=192.168.23.10
:wq
[root@localhost ~]# systemctl restart network    #重启网卡服务

 

 

2.6 测试DNS 解析

使用 host [-a] 命令 或者 nslookup 命令


 

#使用 host 命令
[root@promote ~]# host www.mynet.com               # 解析 www.mynet.com
www.mynet.com has address 192.168.23.10            # 该域名 对应 IP

[root@promote ~]# host mail.mynet.com              # 解析 mail.mynet.com
mail.mynet.com has address 192.168.23.11

[root@promote ~]# host ftp.mynet.com               # 解析 ftp.mynet.com.
ftp.mynet.com is an alias for www.mynet.com.       # 表明 ftp.mynet.com 是 www.net.com. 的别名
www.mynet.com has address 192.168.23.10     
     
[root@promote ~]# host xxxxxxx.mynet.com          # 泛域名解析
xxxxxxx.mynet.com has address 192.168.23.12


#使用 nslookup 命令(windows 只支持nslookup,不支持host)
[root@promote ~]# nslookup www.mynet.com          # 解析域名 www.mynet.com
Server:        192.168.23.10                         # DNS 服务器地址
Address:    192.168.23.10#53                      # 监听端口  
Name:    www.mynet.com                             # 域名
Address: 192.168.23.10                            # 域名解析出来的地址

[root@promote ~]# nslookup ftp.mynet.com
Server:        192.168.23.10
Address:    192.168.23.10#53
ftp.mynet.com    canonical name = www.mynet.com.
Name:    www.mynet.com
Address: 192.168.23.10

[root@promote ~]# nslookup mail.mynet.com
Server:        192.168.23.10
Address:    192.168.23.10#53
Name:    mail.mynet.com
Address: 192.168.23.11

[root@promote ~]# nslookup xxxxxx.mynet.com
Server:        192.168.23.10
Address:    192.168.23.10#53
Name:    xxxxxx.mynet.com
Address: 192.168.23.12

 

 

2.7 将DNS 加入 到 DHCP 配置中

 

#在 DHCP 服务器上
  [root@promote ~]# vim /etc/dhcp/dhcpd.conf 
subnet 192.168.23.0 netmask 255.255.255.0 {
  range 192.168.23.10  192.168.23.200;
  option routers 192.168.23.254;
  option domain-name-servers 192.168.23.10;    # 对应的DNS服务器地址
}
     #DNS配置可以配置在全局,也可以配置在相应的局部
  
[root@promote ~]# systemctl restart dhcpd

 

 

windows 中解析

DNS解析耗时怎么用java解析 dns解析用的哪个端口_DNS解析耗时怎么用java解析_03

 

 

DNS解析耗时怎么用java解析 dns解析用的哪个端口_域名服务器_04

 

 

2.8  /etc/resolv.conf  文件中search 项作用

先修改DNS 服务器

[root@localhost ~]# vim /var/named/mynet.com.zone
;*    IN A       192.168.23.12                #用 分号 ; 注释此项

[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.23.10
search  mynet.com example.com

 

 

例 1 

[root@localhost named]# host -a www
Trying "www.mynet.com"

[root@localhost named]# host -a mail
Trying "mail.mynet.com"


[root@localhost named]# host -a centos7          
Trying "centos7.mynet.com"                      #添加 mynet.com  ,组成域名  centos7.mynet.com
Trying "centos7.example.local"                  #添加 example.local,组成域名 centos7.example.local
;; connection timed out; trying next origin 
Trying "centos7"                                #直接作为域名解析

 

查询主机名,因为主机名后面 没有 点,所以,认为是主机名。

先添加search 里的每一项,一次组成FQDN 完整合格域名来查询。

如果没有查询到,就认为 输入的 就是 FQDN,将其作为FQDN 查询

 

例2 

[root@localhost named]# host -a centos7.com
Trying "centos7.com"                                  #直接将 centos7.com 作为域名查询
;; connection timed out; trying next origin
Trying "centos7.com.mynet.com"                        #将centos7.com 作为主机名,后面添加域名 mynet.com
Trying "centos7.com.example.local"                    #将centos7.com 作为主机名,后面添加域名 example.local
;; connection timed out; no servers could be reached

 

查询主机名,因为主机名中有点(不是末尾有点),就认为是完全合格域名,先用它来查询。

查询失败就把它当成是主机名来进行,添加search里的每一项组成FQDN(完全合格域名)来查询。

 

例3

[root@localhost named]# host -a centos.
Trying "centos"                                   #因为 centos 后面有 点 "." ,所以确定其作为域名,不会在添加search里的项,只会匹配查询
Received 24 bytes from 192.168.23.10#53 in 5000 ms
Trying "centos"
;; connection timed out; trying next origin
Trying "centos"

 

查询主机名,因为主机名中末尾有点,则认为是完全合格域名,只用它来查询(不会再添加search里的每一项)。

查询次数会与search里项域名个数有关。