DNS:Domain Name Service 域名服务
- DNS协议
- 基于C/S架构
- Client:发起应用请求的程序
- Server:相应请求(提供服务)的程序;
- 名称解析: ID和名称之间的转换的过程
- 名称解析库:存放域名主机名的文件
DNS名称解析方式
- 正向解析和反向解析:其不在同一个名称空间,也非同一个解析库
- 正向解析过程
- 主机名到ip解析过程:
- 当一个客户端
- DNS查询过程
- 迭代:服务器自己遍历分布式服务系统反馈客户端请求
- 递归:客户端向本机记录或所属DNS服务器发出一次请求,而获取结果的.
- 一般查询分为两段:首段递归(客户端向所属DNS发出请求),二段迭代(服务器遍历分布式服务系统响应客户端请求)
- 完整的一次查询请求过程:
- 客户端先查询本机hosts文件没有则在查询本机缓冲后向主服务器发出请求,服务器如果是自己负责的解析域则将请求反馈回来,然后主机根据服务器反馈的ip找到相对应的客户端;如果不是则遍历互联网服务器系统迭代查询最终返回是或者否.
- 主机名称自右而左:
- 示例
- www(主机名).baidu(二级域).com(顶级域).(根域)
- 从ip到主机名
- 其过程与主机名到ip完全不相同, 它是由一个特殊的顶级域来完成映射
-
DNS服务器类型:
- 负责解析至少一个域:
- 主名称服务器
- 辅助名称服务器
- 负责缓存名称服务器不负责解析
- 冗余机制:提高服务器冗余功能
- 主从服务器:
- 主DNS服务器:维护所负责解析的域数据库的那台服务器;读写操作均可进行;
- 从DNS服务器每个一段时间从主服务器同步数据(解析库文件)只能进行读操作
- 同步的操作实时方式
- 对比序列号:数据库的版本号;主机数据库内容发生变化,其版本号递增.
- 刷新时间间隔:refresh, 从服务器每多久到主服务器检查序列号更新状况;
- 重试时间间隔:retry, 从服务器从主服务器请求同步解析库失败时,再次发起尝试请求的时间间隔;
- 过期时长:expire,从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
- 否定答案的缓存时长:
- 如果主服务器数据更新也会通知从服务器随时更新数据
- 同步方式:区域传送
- 区域传送: 全量传送;增量传送
- 全量传送:axfr,主服务器把整个区域的数据传送给从服务器
- 从服务器第一次上线需要全部传送
- 增量传送:lxfr,仅传送更新的数据;
- 传送时基于tcp53号端口
- 增量时基于udp53号端口
区域(zone)和域(domain):
- 每一个数据库是为一个区域
- 比如:
- 机名到IP需要正向解析库是为区域
- IP到机名反向解析库是为区域
- 所以每个与都由两个区域正向和反向解析,但是所谓域为逻辑概念,它们之间没有绝对的比较.
- 区域数据库文件:
- 记录类型:A, AAAA, PTR,SOA,NS,CNAME,MX
- 资源记录的定义格式:
- 语法: name (根据正反向而定义) [TTL] IN RR_TYPE value(值)
- SOA:必须为一个区域的第一条资源记录
- name: 当前区域的名字;例如”正向123.com.”或者反向“2.3.4.in-addr.arpa.:可以用@取代
- value:有多部分组成
- (1) 当前区域的区域名称(也可以使用主DNS服务器名称);
- (2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般使用点号来替代;
- (3) (主从服务协调属性的定义以及否定答案的TTL)
- 例如:
- 123.com. 86400(缓存时长) IN SOA 123.com. admin.wds.com. (
- 2017052301(数字不要超过十位,自己定义) ; serial(注释)
- 2H ; refreshtime(刷新时间)
- 10M ; retry(重试时间)
- 1W ; expire (过期时间)
- 1D ; negative answer ttl (否定答案ttl值)
- )
- NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
- name: 当前区域的区域名称
- value:当前区域的某DNS服务器的名字,例如ns.wdscom.;
- 注意:一个区域可以有多个ns记录;
- 例如:
- wds.com. 86400 IN NS ns1.wds.com.
- wds.com. 86400 IN NS ns2.wds.com.
- MX:Mail eXchanger,邮件交换器;
- name: 当前区域的区域名称
- value:当前区域某邮件交换器的主机名;
- 注意:MX记录可以有多个;但每个记录的value之前应该有一个数字表示其优先级;
- 优先级:0-99,数字越小优先级越高;
- 如果有多个根据优先级高的优先提供服务
- 正向反向不能互相包含
- 例如:
- wds.com. IN MX 10 mx1.wds.com.
- wds.com. IN MX 20 mx2.wds.com.
- A:Address, 地址记录,FQDN主机名 --> IPv4;
- name:某个FQDN,例如www.abc.com.
- value:某个IPv4地址;
- 例如:
- www.abc.com. IN A 1.1.1.1
- www.abc.com. IN A 1.1.1.2
- asd.abc.com. IN A 1.1.1.1
- 一个主机可以有多个名
- AAAA:地址记录, FQDN 主机名--> IPv6;
- name:FQDN
- value: IPv6
- PTR:Pointer,IP --> FQDN主机名
- 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.wds.com.
- CNAME:Canonical Name(正式名称),也称别名记录;
- name:FQDN格式的别名;
- value:FQDN格式的正式名字;
- 例如:
- abc.wds.com. IN CNAME www.wds.com.
- 要想自己解析必须先定义区域
- 注意:
- (1) TTL可以从全局继承;
- (2) @表示当前区域的名称可以取代当前区域;
- (3) 相邻的两条记录其name相同时,后面的可省略;
- 例如:
- www.abc.com. IN A 1.1.1.1
- IN A 1.1.1.2
- (4) 对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;
DNS协议的实现 "BIND", PowerDNS(互联网服务器标准)
- 首先下载bind
- 程序环境:
- 主程序:/usr/sbin/named
- Unit File:/usr/lib/systemd/system/named.service
- 配置文件:/etc/named.conf
- 区域解析库文件:/var/named一般名字为:ZONENAME.zone
- 配置解析一个正向区域:
- 以wds.io域为例:
- (1) 定义区域
- 在主配置文件中(/etc/named.conf)或主配置文件辅助配置文件(/etc/named.rfc1912.conf)中实现;
- zone "ZONE_NAME" IN {
- type {master|slave|hint|forward};
- file "ZONE_NAME.zone";
- };
- 例如:
- 编辑 /etc/named.rfc1912.zones,:定义区域
- 区域名字即为域名;
- 修改主配置文件:
- 缓存名称服务器的配置:
- 监听能与外部主机通信的地址;
- listen-on port 53;
- listen-on port 53 { 172.16.253.183; };
- 关闭dnssec功能:不做安全性校验
- /etc/named.conf
- 允许所有人来查询:
- (2) 建立区域数据文件(主要记录为A或AAAA记录)
- 在/var/named目录下建立区域数据文件;
- 定义区域文件内容
- 任何计算机负责域解析要把域拆成区域正向或反向 要想自己解析必须先要定义区域
- /var/named下的工具:
- 检查配置文件语法错误
- named-checkconf
- 检查自己定的区域文件错误(只能检查语法不能检查逻辑错误)
- 要确保named有访问权限,以及让其他用户没有访问权
- 启动服务:service named start
-
host:测试工具
- host -t A www.wds.io
-
dig 测试工具
- 全量区域传送
- rndc status 查询当前服务器状
- rndc flush 清除缓存
-
反向解析:步骤如下
- 编辑 /etc/named.rfc1912.zones,:定义区域
- 建立区域数据文件(主要记录为A或AAAA记录)
- 在/var/named目录下建立区域数据文件
- 定义区域文件内容
- 让服务器重载配置文件和区域数据文件
- 反向解析: 测试
- dig -x ip
- 反向区域传送
主从服务器:
- 从服务器是区域级别的概念;
- (1) 定义区域
- 定义一个从区域;
- zone "ZONE_NAME" IN {
- type slave;
- file "slaves/ZONE_NAME.zone";
- masters { MASTER_IP; };
- };
- 示例:正反向区域定义
- (2) 重载配置
- rndc reload
- systemctl reload named.service
子域授权:
- 正向解析区域授权子域的方法:
- 配置数据文件分子域
- 定义转发:
- 注意:被转发的服务器必须允许为当前服务做递归;
- (1) 区域转发:仅转发对某特定区域的解析请求;
- zone "ZONE_NAME" IN {
- type forward;
- forward {first|only};
- forwarders { SERVER_IP; };
- };
- first:首先转发;转发器不响应时,自行去迭代查询;
- only:只转发;
- (2) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;
- options {
- ... ...
- forward {only|first};
- forwarders { SERVER_IP; };
- .. ...
- };
bind中的安全相关的配置:
- acl:访问控制列表;把来访的一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现统一调用;
- acl acl_name {
- ip;
- net/prelen;
- };
- 示例:
- acl mynet {
- 172.16.0.0/16;
- 127.0.0.0/8;
- };
- bind有四个内置的acl
- none:没有一个主机;
- any:任意主机;
- local:本机;
- localnet:本机的IP所属的网络;
- 访问控制指令:
- allow-query {}; 允许查询的主机;白名单;
- allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
- allow-recursion {}; 允许哪此主机向当前DNS服务器发起递归查询请求;
- allow-update {}; DDNS,允许动态更新区域数据库文件中内容;
时间: 2024-11-11 12:37:09