域名系统:DNS
1.1 DNS
基础
DNS
可以被视为一种用于TCP/IP
应用程序的分布式数据库,它提供主机名字和IP
地址之间的相互转换。
1.2 域名结构
DNS
是一个分层级的分布式名称对应系统,采用类似Linux
目录树的层级结构(如下图)。
其中最顶断有一个未命名的根节点。
1.3 域名解析器原理
用户通过解析器与名字服务器交互。用户查询和响应是C语言编程接口的入参和返回值。用户查询一般调用getaddrinfo
获取IP
地址。linux
操作系统通常不缓存查询结果,每次均调用接口函数进行查询。解析器通常对几个不同的名字服务器进行多个查询,才能回答特定的用户。
- 解析器首先查询主机执行流程,查询
hosts
文件是否有对应域名配置 - 如果
hosts
文件没有该域名,则在resolv.conf
文件中取出第一个域名服务器地址 - 然后向域名服务器地址发起域名查询请求
- 等待查询响应。如果超时,则向下一个域名服务器发起查询
域名解析器提供因特网域名系统(DNS
)的解析。解析配置文件名默认为resolv.conf
。此文件常用的配置信息有nameserver、domain、search
nameserver
用于配置名字服务器。最多可以设置3个名字服务器,每一行一个。如果存在多个名字服务器地址,解析库按照列表顺序查询。如果没有名字服务器或者这个配置文件不存在,则默认使用本机(127.0.0.1
)作为名字服务器地址。domain
可以使用相对于本地域名的短名来查询。如果域名没有配置,则返回主机名。search
定义域名的搜索列表。当要查询没有域名的主机时,将在由search
声明的域中分别顺序查找。domain
和search
不能共存,如果同时存在,后面的会覆盖前面的定义
1.4 域名解析实例
- 没有
/etc/resolv.conf
配置
~# cat /etc/resolv.conf
~#
解析库默认向本机(127.0.0.1
)发起域名查询。因为OpenWrt
本身带有dnsmasq
,因此可以返回响应。
- 配置多个域名服务器地址
resolv.conf
nameserver 59.108.61.61
nameserver 219.232.48.61
ping 163.com
首先向第一个服务器59.108.61.61
发起查询163.con
的IP
。如果查询不到就使用下一个域名服务器
- 配置有
domain
resolv.conf
domain bjbook.net
nameserver 8.8.8.8
如果访问完全合格域名,则直接向域名服务器发起查询。如果不是完全合格域名,则首先在hosts
文件中进行查找,如果在hosts
文件中找不到主机的IP
地址,则在向名字服务器发起查询请求。如果是不带点的字符创,则加上域名后缀向名字服务器发起查询。如果中间带有点,则认为是一个域名。不用加上域名后缀,直接对齐发起请求。
示例:
1、ping 163.com
首先在hosts
文件中查询直接的IP
如果查不到将直接向名字服务器查询163.com
的IP
,找到后向目的IP
发起ICMP
请求
2、ping openwrt
首先在hosts
文件中查询直接的IP
如果查不到将直接向名字服务器查询openwrt
的IP
,则进行拼接为openwrt.bjbook.net
。对齐进行查询
3.1 dnsmasq
3.2 概述
当多个设备同时上网时,客户机经常进行DNS
查询,大多数查询会是重复的域名。如果有一个DNS
缓存代理服务于局域网,这样将减少DNS
的因特网存取。加快DNS
访问速度和节省网络流量。dnsmasq
的存在便源于此。
dnsmasq
是轻量级DHCP、TFTP
和DNS
缓存服务器,给小型网络提供DNS
和DHCP
服务。
dnsmasq
接收DNS
请求,并从本地缓存中读取,如果缓存不存在就转发到一个真正的递归DNS
服务器。它可以读取/etc/hosts
的内容,这样就可以对局域网的主机查询进行DNS
查询相应,这些局域网的主机名称不会暴露在全局DNS
域中。
DNS
子系统提供网络的本地DNS
服务器,即只服务与局域网的DNS
服务器。转发所有类型的查询请求到上游递归DNS
服务器,并且缓存通用记录类型(A、AAA、CNAME
和PTR
)
- 本地
DNS
服务器可以通过读取/etc/hosts
来定义,或者通过导入DHCP
子系统的名字等 - 上行服务器可以遍历各种配置,包括动态配置
- 认证
DNS
模式允许本地DNS
名称导出到全球DNS
区域。dnsmasq
作为这个区域的认证服务器,也可以提供区域传送 - 从上游服务器
DNS
响应执行DNSSEC
验证,防止欺骗和缓存中毒 - 指定子域名可以继承自他们的上行
DNS
服务器 - 国际化域名支持
3.3 配置
dnsmasq
的配置文件位于/etc/config/dhcp
,控制着DNS
和DHCP
服务选项。默认配置包含一个通用的配置节来指定全局选项,还有一个或多个DHCP
来定义动态主机配置服务的网络接口和地址池等。还可以包含多个域名和主机配置,并且提供客户端地址列表来查询。
3.3.1 DHCP
地址池配置
配置节
config dhcp lan
option interface lan
option start 100
option limit 150
option leasetime 12h
指定了DHCP
服务器的服务接口lan
,100
是客户端分配的IP
地址起点,总共可以分配150
个IP
。租赁时间为12h
interface
服务的网络接口,接口名称是network
中配置的虚拟接口start
IP
的起始地址limit
地址空间范围leasetime
DHCP
分配地址的租期ignore
dnsmasq
将忽略从该接口来的请求
4.1 动态DNS
4.2 DDNS
原理
利用DNS
可以将域名解析为IP
从而实现上网。
但是DNS
提供的域名和IP
是静态的对应关系。当主机IP
发生改变时,设备边无法正常上网。
DDNS
动态更新DNS
服务器上域名和IP
的关系。从而保证通过域名解析到正确的IP
DDNS
采用客户端和服务器模型。
DDNS
客户端:需要动态更新域名和IP
地址对应关系的设备软件。当服务器的IP
地址发生变化时将作为DDNS
客户端,向DDNS
服务器发生更新域名好和IP
地址对应关系的DDNS
更新请求。
DDNS
服务器:负责通知DNS
服务器动态更新域名和IP
地址之间的对应关系。接收到DDNS
客户端的更新请求后。DDNS
服务器通知DNS
服务器重新建立域名和IP
的对应关系。
4.2.1 DDNS
配置
OpenWrt
通过Ez-Ipupdate
来支持DDNS
enabled 是否启动DDNS客户端
interface 设置改DDNS所绑定的接口。DDNS更新的域名所对应的IP地址为该接口的IP
service 服务类型,支持多种DDNS更新协议。如:gnudip
username 设置DDNS服务器的认证用户名
password DDNS服务器认证密码
hostname 绑定的域名后缀
4.3 DNS
测试工具
4.3.1 nslookup
nslookup
是一个命令行域名查询工具,有两种工作模式:交互式和非交互式
交互式:用于向域名服务器查询各种主机和域名信息并输出。
非交互式:仅向服务器查询请求信息
主机名/主机IP
域名服务器IP
其他选项参数以-
开始
查询域名IP地址
nslookup openwrt.org
指定域名服务器来查询域名IP地址
nslookup openwrt.org 8.8.8.8
查询`IP`地址的域名,即进行反向查询
nslookup 8.8.8.8