dnsmasq简介及基于域名的流量管理

1、DNS的解析过程简述

为叙述方便,以百度为例,在浏览器的地址栏输入https://www.baidu.com,之后敲回国,这时电脑会执行以下一系列操作:

  • (1)首先根据输入的网址,提取出域名,如www.baidu.com。
  • (2)如果系统中配置了hosts文件,系统会先查询hosts文件,看www.baidu.com这个域名是否在hosts文件中有对应的记录,如果有,就直接拿到记录中的IP地址,域名解析过程就结束了。
  • (3)如果hosts文件中没有对应的记录,系统会查看有没有设置域名服务器(DNS服务器),如果没有设置,系统就没办法了,浏览器会直接报错,说域名无法解析。
  • (4)如果设置了域名服务器,系统会向该域名服务器发送一个域名查询请求(DNS Query),然后等待域名服务器的回应。
  • (5)如果域名服务器始终没有回应(如域名服务器挂了,或域名服务器的IP填错了,或者DNS查询请求没有到达域名服务器,等等等等),那么浏览器也会报错,说域名无法解析。
  • (6)如果域名服务器回应了,则系统就可以根据其返回的信息,得到该域名的IP地址。之后浏览器就会向这个IP地址对应的WEB端口发送HTTP请求。

2、dnsmasq简介

dnsmasq是一个小巧且方便的工具,提供DNS缓存和DHCP服务、TFTP服务功能,轻量且易配置,适用于个人用户或少于50台主机的小型网络。

当接受到一个DNS请求时,dnsmasq首先会查找 /etc/hosts 这个文件,然后查找 /etc/resolv.conf 中定义的外部DNS。所以说Dnsmasq是一个很不错的外部DNS中继。

配置dnsmasq为DNS缓存服务器,同时在/etc/hosts文件中加入本地内网解析,这样一来每当内网机器查询时就会优先查询hosts文件,这就等于将/etc/hosts共享给全内网机器使用,从而解决内网机器互相识别的问题。

3、/etc/resolv.conf 文件

/etc/resolv.conf 文件是DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。该文件是域名解析器(resolver,一个根据主机名解析IP地址的库)使用的配置文件。它的格式很简单,每行以一个关键字开头,后接一个或多个由空格隔开的参数。

resolv.conf的关键字主要有四个,分别如下:

  • search:定义域名的搜索列表,它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。
  • domain:定义本地域名,声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( .)前面的内容。
  • sortlist:对返回的域名进行排序,允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序(其实我不明白它的意思)。
  • nameserver:定义DNS服务器的IP地址,表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的,且只有当第一个nameserver没有反应时才查询下面的nameserver,并且有个数限制(3个)。

备注:domain和search不能共存;如果同时存在,后面出现的将会被使用。

4、配置文件设置

dnsmasq的默认配置文件为 /etc/dnsmasq.conf 文件。

也可以新建一个配置文件,如创建目录 /etc/dnsmasq.d/,并在该目录下创建 new_rules.conf 文件。
在 /etc/dnsmasq.conf 文件中加入以下语句,重启dnsmasq即可:

5、规则配置

(1)将指定域名通过指定DNS解析

对baidu.com和*.baidu.com使用指定的DNS服务器解析。

(2)对指定域名通过指定DNS和其使用的非标准端口解析进行

(3)将指定域名解析到指定IP

(4)利用ipset

表示将baidu.com的域名解析IP结果存储到名为ipset_name的ipset结构中,准备交给iptables识别和转发(在此之前需要建立ipset_name表)。
ipset表可以指定多个,例如:

可以通过dnsmasq -v 命令查看其是否添加了ipset支持:

(5)同时指定DNS(和非标准端口)和ipset

表示在查询baidu.com的DNS信息的时候,通过127.0.0.1的5353端口,并将查询的结果保存到ipset_name中。

6、使用iptables设置转发规则

通过iptables,对指定的ipset做相应的规则转发配置。
例如将目标地址在ipset中的流量转发到指定端口:

将目标地址不在ipset中的流量转发到指定端口:

参考

————————————————————

原创文章,转载请注明: 转载自孙希栋的博客

本文链接地址: 《dnsmasq简介及基于域名的流量管理》

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Scroll Up