域名系统(DomainNameSystem,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
DNS协议运行在UDP协议之上,使用端口号53。关于UDP协议与TCP协议。
DNS服务器体系的架构可以看做是一种分布式集群。各个DNS服务器间采取分布式的层次数据库模式以及缓存方法来存储和交换数据。
域名解析过程
以下是在电脑浏览器中输入网址后发生的事情:
先检查本地的hosts文件是否有这个网址映射关系
则查找本地DNS解析器缓存,是否有这个网址映射关系
TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器
如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询
转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。
不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
递归查询于迭代查询
DNS服务器集群做域名解析的时候,会产生两种查询方式,递归查询与迭代查询。
dnsmasq的介绍
提供DNS缓存和DHCP服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存DNS请求来提高对访问过的网址的连接速度。作为DHCP服务器,dnsmasq可以为局域网电脑提供内网ip地址和路由。DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,此外它还自带了一个PXE服务器以及对邮件服务器的mx记录的支持,jabber的srv记录的支持等。它提供了DNS功能和可选择的DHCP功能可以取代dhcpd服务和bind等服务,配置起来更简单,更适用于虚拟化和大数据环境的部署。
dnsmasq配置文件
dnf-yinstalldnsmasq
/etc/dnsmasq.conf#主配置文件/etc/hosts#本地映射文件/etc/resolv.conf#域名配置文件systemctlstartdnsmasq
dnsmasq能够缓存外部DNS记录,同时提供本地DNS解析或者作为外部DNS的代理,即dnsmasq会首先查找/etc/hosts等本地解析文件,然后再查找/etc/resolv.conf等外部nameserver配置文件中定义的外部DNS。所以说dnsmasq是一个DNS中继。DNS配置同样写入dnsmasq.conf配置文件里。
同时在/etc/hosts文件中加入本地内网解析,这样一来每当内网机器查询时就会优先查询hosts文件,这就等于将/etc/hosts共享给全内网机器使用,从而解决内网机器互相识别的问题,比如像hadoop添加datanode节点时。相比逐台机器编辑hosts文件或者添加Bind记录,仅需要编辑一个/etc/hosts文件。
/etc/hosts文件:hosts文件包含了ip地址和主机名之间的映射,包括主机名的别名,在没有域名服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的ip地址,否则就需要使用DNS服务程序来解决。
对于检查的顺序可以通过systemd-resolve完成一个简单的测试。(systemd-resolved.service用于运行DNS查询和维护DNS缓存。)
dnsmasq的配置文件
vi/etc/dnsmasq.conf此为该服务对应的端口,默认是53端口取消注释则为使用5353端口
表示强制使用完整的解析名,从不转发格式错误的域名
domain-needed表示强制使用完整的解析名,从不转发格式错误的域名
resolv-file=可以自定义resolv.conf文件
no-resolv可以设置不使用/etc/resolv.conf
no-hosts可以设置不使用/etc/hosts
expand-host主机名扩展,自动的给hosts中的name增加一个域名例如,/etc/hosts中的主机www将扩展成farmsec.cn
interface=lo默认监听的网卡
启用日志文件:log-queries这里默认是没有开的log-facility=/var/log/dnsmasq.log这行要自己加上,定义日志的文件
nslookup的使用
nslookup命令:查询DNS解析用的命令可以指定dns服务器serverwww.baidu.com
Tips:
绕云waf的一个小技巧:在我们遇到存在云waf的网站时,我们访问并不是直接解析到该网站,而是将我们的请求解析到云waf上,云waf会将请求进行一个过滤,将含有危害的请求过滤掉,将正常的请求发送给网站服务器进行响应。所以在我们找到该网站的真实ip前提条件下,那么我们就可以在hosts文件中添加一个解析指向该网站的真实ip,从而达到绕过云waf。