全方面讲解OpenWrt的DNS配置与DHCP,并介绍dnsmasq DNS缓存工具、nslookup/dig DNS测试工具

一、主机系统的概念

  • 在主流的操作系统上,均有一个hosts的配置文件,这个配置文件的主要作用是定义 IP 地址和主机名的映射关系,这个配置可以使用文本编辑器打开并进行编辑。(在Windows操作系统也有一个类似这样的文件,其位置为 C:\Windows\System32\Drivers\etc\hosts)。
  • 工作原理:当用户在浏览器中输入所想访 问的网址时,系统首先从这个hosts文件中查找域名的IP地址,如果找到就打开 IP 地址 的网页,如果没有找到就向 DNS 服务器进行查询。
  • 现在主流的现代操作系统中,主机系统表已经很少使用,已经被域名查找机制 DNS 取代, 但它仍广泛地使用在一些场景下(见下面的三)。

二、/etc/hosts文件

  • 在Linux系统,主机配置文件为/etc/hosts,这是主机名的静态查找表。这个文件是简单的文本文件,用于保存主机名称和IP之间对应关系。

格式

  • 其格式为一个 IP 地址占用一行, 每一个主机关联一个IP地址(各个域之间用空格或制表字符分开)。格式如下:
127.0.0.1 localhost [aliases...]

三、/etc/hosts文件的作用

  • 现在主流的现代操作系统中,主机系统表已经很少使用,已经被域名查找机制 DNS 取代,但它仍广泛地使用在以下 5 个场景。

  • 启动中。大多数系统都包含名称和地址为本地网络上的信息主机信息表。这是非 常有用的,因为在系统启动时 DNS 解析库还没有装载到内存中。
  • 例如:

②DNS 输入

  • 网络信息服务站点使用主机表作为 DNS 服务主机数据库的输入,或 者使用主机表作为备用配置。

③加快域名解析,节省网络流量

  • hosts 文件在主机上配置具有加快域名解析的作用, 对于经常访问的网站和主机,我们可以在 hosts 文件中配置域名和 IP 的对应关系。由于有 了映射关系,当我们访问域名时,可以直接从 hosts 文件中解析得出,而不用访问网络上 的域名服务器,不用消耗网络流量。

④屏蔽网站(域名重定向)

  • 屏蔽广告网站,有很多网站带有广告,但广告和网站 本身域名不同,因此如果能屏蔽一些众所周知的广告网站域名,这样我们利用 hosts 把这 些广告的网站的域名映射到本机 IP 或非法目的 IP,这样就不会看到这些广告图片了,也不 会浪费网络流量。
  • 例如:(这样计算机解析域名 a.com 时,就解析到错误的 IP,达到了屏蔽广告网站的目的)。

⑤防止 DNS 污染和 DNS 劫持

  • DNS 劫持就是攻破了 DNS 服务器防护,从而获得 域名解析记录的控制权,进而修改域名解析的结果。这将导致对原始域名的访问转到另外 的 IP 地址。
  • DNS 污染是因为 DNS 查询没有任何认证机制,而且 DNS 查询通常采用的 UDP 是无 连接不可靠的协议,因此 DNS 的查询非常容易被篡改:通过对 UDP 端口 53 上的 DNS 查 询报文进行分析,一旦发现与关键词相匹配的请求则立即伪装成目标域名的解析服务器给 查询者返回虚假结果。
  • 如果我们已知服务器的 IP 地址,就可以在 hosts 文件中设置正确的 IP 地址,从而避 免 DNS 劫持和污染。

四、DNS介绍

  • 前一篇文章介绍的主机系统适合小型网络等一些特殊的场景。在因特网中,主机地址非常庞大,并且主 机的IP地址经常改变,因此使用域名系统 DNS 代替主机系统
  • DNS 可以被视为一种用于 TCP/IP 应用程序的分布式数据库,它提供主机名字和 IP 地址间的相互转换。这里提到的分布式是指在因特网上的单个站点不能拥有所有的信息。每 个站点(如大学中的系、校园、公司或公司的部门)保留它自己的信息数据库,并运行一 个服务器程序供因特网上的其他系统查询。

五、域名结构

  • 其最顶端有一个未命名的根节点,然后其下分为好几个基本类别名称(称 为顶层域名),例如 com、org、net 和 gov 等 3 字符域名,还有 cn、sg、jp 和 us 等两个字 符国家地区域名。
  • 每个节点有一个至多 63 个字符长的标识,域名总长度则不能超过 253 个字符。命名标识中不区分大写和小写。
  • 命名树上任何一个节点的域名就是将从该节点到 最高层的域名串连起来,中间使用一个点“.”分隔这些节点。例如,一个完整的域名为 www.bjbook.net。
  • 域名树中的每个节点必须有一个唯一的名称,但域名树中的不同层级节 点可使用相同的标识,只要在不同的父节点下即可。

六、DNS报文格式

  • DNS采用客户机/服务器模型。DNS默认使用TCP和UDP端口 53。DNS的请求和应答封装在UDP报文中。

会话标识

  • 报文头部的会话标识字段由客户端生成随机值填充并由服务器原样 返回。客户端通过该字段来匹配请求和响应。

flags

  • flags部分非常复杂,如果是请求一般为0x0100。如果为响应,通常有两种情况:0x8182表示服务器失败;0x8180表示服务器 成功响应。

问题数目、回答资源记录数、授权资源记录数目、额外资源记录数目

  • 对于查询报文,问题数目通常是1,而其他3项则均为0。对于应答报文,问题数目还是1,回答数至少是1。

问题

  • 问题部分中每个问题的格式由 3 部分顺序组成:查询内容、类型(Type)和类(Class)。 类型和类均为固定的两个字节长度。
  • 查询内容长度不定,它是一个或多个标识符的序列。每个标识符以首字节的计数值来 说明随后字符串的字节长度,每个名字的最后字节为 0 表示结束。计数字节的值必须是 0~ 63 的数字,因为标识符的最大长度为 63。高位字节为二进制 11 时,用于压缩格式,指向 报文的查询字符串位置,字符串位置是从 DNS 报文头部开始计算的。

回答资源记录、授权资源记录、附加信息资源记录

  • DNS 报文中最后 3 个字段分别为回答字段、授权字段和附加信息字段,均采用资源记 录(Resource Record,RR)格式。资源记录格式内容顺序包含域名、类型、类、生存时间、 数据长度和数据6部分。
  • 如下图所示:域名是记录中资源数据对应的名字。它的格式和前面介绍的查询名字段格式相同。类 型和类与问题域内容格式相同。生存时间字段占4个字节,是客户程序保留该资源记录的 秒数,这里已转换为 15 分钟。资源数据长度占两个字节长度。数据部分的格式依赖于类型字段的值,这里的资源数据是4字节的IP地址。

七、域名解析器原理

  • 用户程序通过解析器与名字服务器交互;用户查询和响应是 C 语言编程接口的入参和 返回值,用户查询一般是调用 getaddrinfo 函数获取 IP 地址,Linux 操作系统通常不缓存查 询结果,每次均调用接口函数进行查询。现在域名解析器动态库已经成为 Linux 主机操作 系统的一部分,供给每一个进程使用。
  • 注意,如果未配置名字服务器,解析器将默认向 127.0.0.1 发起查询。
  • 下图所示为 Linux 系统的 DNS 解析实现原理。解析器通常对几个不同的名字服务 器进行多个查询,才能回答特定用户的查询,因此用户域名查询可能涉及对几个网络的访问和很长的时间。

  • ①解析库首先查询主机执行流程,查询hosts文件是否有对应域名配置。
  • ②如果host文件没有该域名,则在resolv.conf文件中取出第一个域名服务器地址。
  • ③然后向域名服务器地址发起域名查询请求。
  • ④等待查询响应。如果超时,则向下一个域名服务器发起查询。

/etc/resolv.conf配置文件

  • 域名解析器提供因特网域名系统(DNS)的解析C函数库。解析器配置文件名默认为resolv.conf,包含C函数库所需的信息,域名解析时首先读取这个文件。
  • 这个文件的可读 性非常好,包含一系列的关键词,提供各种类型的解析器信息。
  • 常见的配置如下:
    • nameserver:用于配置名字服务器,最多可以设置 3 个名字服务器,每一行一个。 如果有多个名字服务器地址,解析库将按照列表顺序查询。若第一个名字服务器查询超 时,再顺序查询下面的名字服务器,直到所有的名字服务器都尝试一遍。如果没有名 字服务器地址或者这个配置文件不存在,则默认使用本机(127.0.0.1)作为名字服务器 地址。
    • domain:可以使用相对于本地域名的短名来查询。如果域名没有配置,则返回主机名。
    • search:search 定义域名的搜索列表,当要查询没有域名的主机时,将在由 search 声明的域中分别顺序进行查找,是只有使用短名时所要附加的域名后缀。domain 和 search 不能共存,如果同时存在,后面出现的将覆盖前面的定义。

八、域名解析实例

①没有/etc/resolv.conf 配置文件

  • 解析库默认向本机(127.0.0.1)发起域名查询,因 OpenWrt 本身带有 dnsmasq 提供服 务,因此可以返回响应。
  • 下图为访问域名时的请求和响应报文。

②配置多个域名服务器地址

  • resolv.conf 配置如下:

  • ping 163.com:首先向第一个服务器 59.108.61.61 发起查询 163.com 的 IP 地址,如果 查不到将使用下一个域名服务器来进行查询。

③配置有domain

  • resolv.conf配置如下图所示,这种情况下如果访问完全合格域名,则直接向域名 服务器发起查询;如果不是完全合格域名,则首先在 hosts 文件中进行查找,如果在 hosts 文件中找不到主机名的 IP 地址,则再向名字服务器发起查询请求。如果是不带点的字符 串,则加上域名后缀向名字服务器发起查询请求,如果中间带有点,则认为是一个域名, 将不用加上域名后缀,直接使用该字符串向名字服务器发起请求。

  • ①执行“ping 163.com”命令,首先在 hosts 文件中查询主机 163.com 的 IP 地址, 如果查不到将直接向名字服务器查询 163.com 的 IP 地址,找到后向目的 IP 发起 ICMP 请求。
  • ②执行“ping openwrt”命令,首先在 hosts 文件中查询主机 openwrt 的 IP 地址,如 果查不到将拼接域名后缀“bjbook.net”,然后向名字服务器查询 openwrt.bjbook.net 的 IP 地址,找到后向目的 IP 发起 ICMP请求。

九、DHCP简介

  • 在 TCP/IP 网络上,每台主机在访问网络及其资源之前,都必须进行基本的网络信息 配置,包含 IP 地址、子网掩码、默认网关和 DNS 等。在大型网络中,如果每台终端主 机的地址都由不同的使用者来分配,那么就很容易出现地址相同的情况。对于经常移动 的终端,重新配置可能需要很长时间,并且容易出错,如果 IP 配置错误将会导致不能访问网络。因此需要一种机制来简化主机 IP 地址的配置。动态主机配置协议 DHCP 应运而生。
  • 采用 DHCP 的好处在于减少了网络管理员和用户的负担。这将可以减少手工配置 IP 地址导致的地址冲突,以及网关地址或 DNS 地址错误导致的不能访问网络等问题。

DHCP原理

  • DHCP 服务器拥有一个 IP 地址池,当任何启用 DHCP 的客户机连接到网络时,可 从服务器那里租借一个 IP 地址,不再使用的 IP 地址自动回收到地址池中,供再次分配 使用。
  • DHCP 保证同一时刻的任何 IP 地址只能分给一个客户机使用。当 DHCP 客户机重新 启动时,应配置为相同的 IP 地址。在 DHCP 服务器重启的情况下,也应当给每一个客户机分配相同的 IP 地址,并且和手动分配的 IP 地址共存。这要求 DHCP 服务器对已分配的 地址进行保存,并且在客户端不使用时进行回收。
  • DHCP 是一种动态地向网络终端提供配置参数的协议。在终端提出申请之后,DHCP 服务器可以向终端提供 IP 地址及子网掩码、网关和 DNS 服务器地址等参数。
  • DHCP 协议基于 UDP 协议,客户端的端口号是68,服务器的端口号是67。

十、DHCP报文

  • DHCP的请求和应答封装在UDP报文中。
  • 传输层使用 UDP 协议,使用两个固定的端口号,服务器使用 67,客户端使用 68。这 样可以非常方便地区分是请求还是响应。
  • IP 层在请求 IP 地址时采用链路层广播,链路层广播地址为“FF:FF:FF:FF:FF:FF”。网 络层目的 IP 使用广播地址 255.255.255.255,源地址采用 0.0.0.0,这是因为请求时自身没有 IP 地址,并且不知道服务器的 IP 地址。

报文字段

  • 1表示请求,2表示应答。

硬件类型、硬件地址长度

  • 硬件类型字段为1表示以太网。
  • 以太网的硬件地址长度为 6 字节。

跳数

  • 字段由客户端设置为 0,如果和 DHCP 服务器之间有中继器的话将被修改。

事务ID

  • 是一个由客户端设置并由服务器返回的 4 字节整数。客户机使用它对 请求和应答进行匹配。对于每个请求客户端首先将该字段设置为一个随机数。

秒数

  • 客户端开始 进行 DHCP 请求时,将“秒数”字段设置为一个时间值。服务器能够看到这个时间值,备用服务器在等待时间超过这个时间值后才会响应客户的请求,这意味着备用服务器接管 DHCP 服务。

flags

  • 是保留值,设置为0。

一系列IP地址字段

  • 客户端 IP 地址字段填 0,如果上次成功配置过 IP 地址,它将写到“客户端 IP 地址” 字段。服务器返回应答时将该客户的 IP 地址写入“你的 IP 地址”字段,并将自身 IP 地址 填写到“服务器 IP 地址”字段。在同一网络中继地址填0。

客户端MAC地址

  • 填写网卡硬件地址,不足部分填0。

服务器主机名

  • 服务器主机名字段由服务 器来填写,通常为 0。

引导文件名

  • 引导文件名字段用于填充 TFTP 下载的文件全路径,通常用于无盘 启动工作站。

可选字段

  • 选项字段用于扩展,但实际上有一些选项在终端节点接入互联网时是必须的。 这些包含 DNS 地址、网关地址和子网掩码等。
  • 可选字段部分均以 TLV(类型-长度-值)来表示。
  • 子网掩码选项用于指定客户端的子网掩码。子网掩码的类型码为 1,长度为 4 字节。
  • 路由选项指定了客户端子网的下一跳地址。如果有多个,路由器将按照优先顺序排列, 一般为路由器自身 IP 地址。类型码为 3,长度为 4 的倍数。
  • 域名服务器选项用于将名字服务器提供给客户端,并且以优先顺序给出,选项代码为 6,最小长度为 4 个字节,并且是 4 的倍数。

十一、DHCP工作流程

  • DHCP 通常由客户端发起广播请求,服务器收到请求后在配置文件中查询,如果符合 要求则向客户端提供服务。
  • 下图所示为DHCP配置IP地址的报文流程

  • ①客户端在以太网上广播“DHCP Discover”报文来发现 DHCP 服务器。
  • ②IP 为 10.0.2.2 的服务器收到广播请求后,向客户端回应请求,发出单播“DHCP Offer”报文,并且目的 IP 为 10.0.2.15。
  • ③客户端再次以广播形式发出“DHCP Request”报文。这是因为客户端可能收到多 个服务器“DHCP Offer”报文,客户端会根据报文的内容来选择一个给予响应,采用广播 形式可以让多个服务器均可收到。
  • ④当服务器收到“DHCP Request”报文后,服务器在将客户端的 MAC 地址同分配 的 IP 地址绑定后,将 IP 信息(IP、掩码、网关地址和 DNS 等)发送给客户机。
  • ⑤客户机收到“DHCP ACK”报文后,将 IP 信息设置到主机系统上。这时 IP 设置 就完成了,客户机就可使用 IP 来访问网络了。

十二、DDNS(动态DNS)

  • 待续

十三、dnsmasq工具介绍

  • 智能路由器服务于家庭和小型企业网络,当多个人同时上网时,客户机经常进行DNS查询,大多查询会是重复的域名,如果有一个 DNS缓存代理服务于局域网,这样将减少DNS的因特网存取,加快DNS访问速度和节省网络流量,dnsmasq软件就是在这种情况 下应运而生的。
  • dnsmasq是轻量级DHCP、TFTP和DNS缓存服务器,给小型网络提供DNS和DHCP服务。它的设计目标是轻量级的DNS,并且占用空间小,适用于资源受限的路由器和防火墙,以及智能手机、便携式热点设备等。
  • 工作原理:dnsmasq接收DNS请求,并从本地缓存中读取,如果缓存不存在就转发到一个真正的递归 DNS 服务器。它也可以读取/etc/hosts的内容,这样就可以对局域网的主机查询进行DNS查询响应,这些局域网的主机名称不会暴露在全局DNS域中。

本地DNS服务器

  • DNS子系统提供网络的本地DNS服务器,即只服务于局域网的DNS服务器。转发所有类型的查询请求到上游递归DNS服务器,并且缓存通用记录类型(A、AAAA、CNAME 和 PTR)。
  • 支持的主要特性有以下几方面:
    • 本地DNS服务器可以通过读取/etc/hosts来定义,或者通过导入DHCP子系统的名字,或者通过各种各样的用户配置。
    • 上行服务器可以各种遍历的配置,包括动态配置。
    • 认证DNS模式允许本地DNS名称导出到全球DNS区域。dnsmasq作为这个区域的认证服务器,也可以提供区域传送。
    • 从上游服务器DNS响应执行DNSSEC验证,防止欺骗和缓存中毒。
    • 指定子域名可以继承自它们的上行 DNS 服务器,这样使VPN配置更容易。
    • 国际化域名支持等

十四、dnsmasq配置文件(/etc/config/dhcp)

  • dnsmasq配置文件位于/etc/config/dhcp控制着DNS和DHCP服务选项。默认配置包含一个通用的配置节来指定全局选项,还有一个或多个DHCP来定义动态主机配置服务的网络接口和地址池等。还可以包含多个域名和主机配置,并且提供客户端地址列表来查询。

①全局配置

  • 下图所示的是dnsmasq的所有配置选项。

②DHCP地址池配置

  • 类型为dhcp的配置节指定了每一个接口的DHCP设置,通常最少有一个服务于局域网接口的dhcp配置设置。
  • 配置选项如下:

  • 例如下图中:
    • 指定了DHCP服务器的服务接口“lan”。
    • start、limit:100 是客户端分配的IP地址起点, 总共可以分配150个IP 地址。
    • 12h 表示客户端得到的地址租约时间为 12 小时。

③域名配置

  • dnsmasq 支持自定义主机或者是自定义域名,使用 domain 配置节来管理自定义域名。
  • 配置选项如下:

  • 演示案例:
  • 第一步:我们使用uci命令来增加两条自定义域名记录。首先创建一个类型为domain匿名的配置节, 然后设置其名称和 IP 地址。

  • 第二步:记录被写到/etc/config/dhcp 文件中,但现在功能并未生效。调用重启 dnsmasq 进程命 令来使 dnsmasq 读取这些配置更改。
/etc/init.d/dnsmasq restart
  • 第三步:实际的配置将转换为 dnsmasq 的配置,配置文件为/var/etc/dnsmasq.conf,生效后内容如下:

  • 第四步:然后在 OpenWrt shell 中 ping 主机名称 bjbook.net。这时将访问 192.168.6.20 这个 IP 地址,并从 192.168.6.20 收到响应。这和主机系统的功能完全相同,只是在/etc/hosts 文件 中只在本机生效,如果加载这里就可以服务于家庭网。

④主机配置

  • DHCP 在分配 IP 时,选择一个未使用的 IP 地址进行分配。假定有一个服务器,也是 通过 DHCP 进行 IP 分配的,这样每次重启后分配的 IP 地址可能发生改变,这在访问服务 器时还需查看其 IP 地址。根据 MAC 地址分配固定 IP 地址可以解决这个问题。在 DHCP 配置文件中使用 host 来配置。
  • 配置选项如下:

  • 演示案例:
  • 第一步:通过 uci 命令进行增加(这将增加固定的 IP 地址 192.168.6.120。然后重启 DHCP 服务器,这时 MAC 地址为 “08:00:27:9d:89:e7”的计算机再次获取的 IP 地址将设置为固定 IP 地址 192.168.6.120,主机 名称设置为 buildServer)。

  • 第二步:查看配文文件。

  • 第三步:重启服务。
/etc/init.d/dnsmasq restart

⑤DHCP客户端信息

  • DHCP 还有一个功能是记录客户端列表。客户端列表显示当前所有通过 DHCP 服务器 获得 IP 地址主机的相关信息,包括客户端主机名称、MAC 地址、所获得的 IP 地址及 IP 地址的有效期。下图列出了所有保存字段的含义,我们可以通过/tmp/dhcp.leases 文件来 查看所有通过 DHCP 服务器获得 IP 地址的计算机信息。
  • 配置选项如下:

十五、nslookup工具

  • “nslookup”是一个命令行域名查询工具。
  • 有两种工作模式:
    • 交互式:用于向域名服务器查询各种主机和域名信息并输出。
    • 非交互式:仅向服务器查询请 求的信息。

非交互式

  • 非交互式模式用于查询主机名或主机 IP 地址为第一个参数,可选的第二个参数为域 名服务器 IP 地址。其他选项参数以“-”开始。
  • 例如:查询域名 IP 地址。

  • 指定域名服务器来查询域名 IP 地址。

  • 查询 IP 地址的域名,即进行反向查询。

十六、dig工具

  • dig是另一款域名查询工具,其功能非常强大,并且可以指定源 IP 地址,这在主机上有多个接口及 IP 地址时非常有用。
  • dig 在进行域名查询时,如果第一个域名服务器无响应,将在 1 秒后向第二个 DNS 地 址发起请求。在这点上它和 nslookup 不同,nslookup 需要等待 5 秒之后再向第二个域名服 务器发起查询请求。

基本的用法

  • ①@后面表示 DNS 服务器地址:
dig @server baidu.com
  • ②“-b”表示指定源 IP,在系统有多个接口地址时使用。
dig -b 192.168.1.100 baidu.com
  • dig 提供了大量的查询选项和输出结果显示选项。一些查询选项会设置查询报头的标 志位,有些是设置超时和重试策略,还有些是控制屏幕输出。dig 的查询选项和其他软件 不同,采用“+”开头的标识符来表示。
  • dig 还有很多选项可以定制查询和输出。例如+short 可以简化输出。默认 dig 会输出 DNS 报头信息,包含查询问题个数和回答问题个数等信息。

演示案例


  • 我是小董,V公众点击"笔记白嫖"解锁更多OpenWrt资料内容。

相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页