16 DNS

域名系统:DNS

1.1 DNS基础

DNS可以被视为一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的相互转换。

1.2 域名结构

DNS是一个分层级的分布式名称对应系统,采用类似Linux目录树的层级结构(如下图)。
其中最顶断有一个未命名的根节点。

1.3 域名解析器原理

用户通过解析器与名字服务器交互。用户查询和响应是C语言编程接口的入参和返回值。用户查询一般调用getaddrinfo获取IP地址。linux操作系统通常不缓存查询结果,每次均调用接口函数进行查询。解析器通常对几个不同的名字服务器进行多个查询,才能回答特定的用户。

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

域名解析器提供因特网域名系统(DNS)的解析。解析配置文件名默认为resolv.conf。此文件常用的配置信息有nameserver、domain、search

  • nameserver
    用于配置名字服务器。最多可以设置3个名字服务器,每一行一个。如果存在多个名字服务器地址,解析库按照列表顺序查询。如果没有名字服务器或者这个配置文件不存在,则默认使用本机(127.0.0.1)作为名字服务器地址。
  • domain可以使用相对于本地域名的短名来查询。如果域名没有配置,则返回主机名。
  • search定义域名的搜索列表。当要查询没有域名的主机时,将在由search声明的域中分别顺序查找。domainsearch不能共存,如果同时存在,后面的会覆盖前面的定义

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.conIP。如果查询不到就使用下一个域名服务器

  • 配置有domain
resolv.conf
domain bjbook.net
nameserver 8.8.8.8

如果访问完全合格域名,则直接向域名服务器发起查询。如果不是完全合格域名,则首先在hosts文件中进行查找,如果在hosts文件中找不到主机的IP地址,则在向名字服务器发起查询请求。如果是不带点的字符创,则加上域名后缀向名字服务器发起查询。如果中间带有点,则认为是一个域名。不用加上域名后缀,直接对齐发起请求。
示例:
1、ping 163.com
首先在hosts文件中查询直接的IP如果查不到将直接向名字服务器查询163.comIP,找到后向目的IP发起ICMP请求
2、ping openwrt
首先在hosts文件中查询直接的IP如果查不到将直接向名字服务器查询openwrtIP,则进行拼接为openwrt.bjbook.net。对齐进行查询

3.1 dnsmasq

3.2 概述

当多个设备同时上网时,客户机经常进行DNS查询,大多数查询会是重复的域名。如果有一个DNS缓存代理服务于局域网,这样将减少DNS的因特网存取。加快DNS访问速度和节省网络流量。dnsmasq的存在便源于此。
dnsmasq是轻量级DHCP、TFTPDNS缓存服务器,给小型网络提供DNSDHCP服务。
dnsmasq接收DNS请求,并从本地缓存中读取,如果缓存不存在就转发到一个真正的递归DNS服务器。它可以读取/etc/hosts的内容,这样就可以对局域网的主机查询进行DNS查询相应,这些局域网的主机名称不会暴露在全局DNS域中。
DNS子系统提供网络的本地DNS服务器,即只服务与局域网的DNS服务器。转发所有类型的查询请求到上游递归DNS服务器,并且缓存通用记录类型(A、AAA、CNAMEPTR

  • 本地DNS服务器可以通过读取/etc/hosts来定义,或者通过导入DHCP子系统的名字等
  • 上行服务器可以遍历各种配置,包括动态配置
  • 认证DNS模式允许本地DNS名称导出到全球DNS区域。dnsmasq作为这个区域的认证服务器,也可以提供区域传送
  • 从上游服务器DNS响应执行DNSSEC验证,防止欺骗和缓存中毒
  • 指定子域名可以继承自他们的上行DNS服务器
  • 国际化域名支持

3.3 配置

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

3.3.1 DHCP地址池配置

配置节
config dhcp lan
    option interface lan
    option start     100
    option limit     150
    option leasetime 12h

指定了DHCP服务器的服务接口lan100是客户端分配的IP地址起点,总共可以分配150IP。租赁时间为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

dig

posted @ 2022-01-25 15:40  人民广场的二道贩子  阅读(110)  评论(0编辑  收藏  举报