官方论坛产品帮助刷图视频问题反馈

Dnsmasq安装与配置-搭建本地DNS服务器

发表于 秦海传媒

    默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢。其次是部分网站域名不能正常被解析,莫名其妙地打不开,或者时好时坏。
    如果碰上不稳定的本地DNS,还可能经常出现无法解析的情况。除了要避免“坏”的DNS的影响,我们还可以利用DNS做些“好”事,例如管理局域网的DNS、给手机App Store加速、纠正错误的DNS解析记录、保证上网更加安全、去掉网页讨厌的广告等等。
    这时候搭建一个属于自己的本地DNS服务器就十分必要了,本篇文章就来分享一下Dnsmasq安装与配置方法,利用Dnsmasq来搭建一个属于自己的本地DNS服务器,享受更干净无污染、更智能快速和没有广告干扰的DNS解析服务。
    选择好的本地DNS可以让我们上网更快更舒心,而对于网站,选择一个好的DNS域名解析服务也是十分重要:
    1、DNS排名:十大免费DNS域名解析服务-稳定,可靠,好用的免费DNS服务
    2、国外DNS:Linode免费DNS使用方法和He.net稳定功能强大的DNS解析服务
    3、国内DNS:360网站卫士免费DNS和CDN申请使用及CDN缓存无法切换移动主题
    Dnsmasq安装与配置-搭建本地DNS服务器 享受更干净更快无广告DNS解析
    一、Dnsmasq安装
    1、执行以下命令在VPS上安装Dnsmasq:

    yum install dnsmasq -y
    service dnsmasq start

    二、Dnsmasq配置
    1、Dnsmasq的配置文件是放在 /etc/dnsmasq.conf 中。

    2、打开编辑,配置:resolv-file=/etc/resolv.dnsmasq.conf,表示dnsmasq 会从这个指定的文件中寻找上游dns服务器。同时取消 strict-order 前面的注册#号。

    3、检查一下no-hosts前面是不是已经有了#号,默认的情况下是有的,dnsmasq 会首先寻找本地的 hosts 文件再去寻找缓存下来的域名, 最后去上游dns 服务器寻找。

    4、设置:listen-address=127.0.0.1,表示这个 dnsmasq 本机自己使用有效。注意:如果你想让本机所在的局域网的其它电脑也能够使用上Dnsmasq,应该把本机的局域网IP加上去:listen-address=192.168.1.123,127.0.0.1

    5、修改好了dnsmasq.conf 后,就可以将它重新上传覆盖原文件了。
    6、另外我们还需要修改/etc/resolv.conf这个文件,执行以下命令:

    echo ‘nameserver 127.0.0.1’ > /etc/resolv.conf
    cp /etc/resolv.conf /etc/resolv.dnsmasq.conf
    echo ‘nameserver 8.8.8.8’ > /etc/resolv.dnsmasq.conf
    echo ‘nameserver 199.91.73.222’ > /etc/resolv.dnsmasq.conf
    cp /etc/hosts /etc/dnsmasq.hosts
    echo ‘addn-hosts=/etc/dnsmasq.hosts’ >> /etc/dnsmasq.conf

    7、resolv.dnsmasq.conf中设置的是真正的Nameserver,可以用谷歌、V2EX等公共的DNS。
    三、Dnsmasq启动
    1、执行以下命令设置Dnsmasq开机启动并启动Dnsmasq服务:

    chkconfig dnsmasq on
    /etc/init.d/dnsmasq restart

    2、执行命令:netstat -tunlp|grep 53 可以查看Dnsmasq是不是已经正常启动:

    3、测试:dig www.freehao123.com,第一次是没有缓存,所以时间是200多。

    4、第二次再次测试,因为已经有了缓存,所以查询时间已经变成了0.

    四、Dnsmasq使用
    1、本地DNS。将Dnsmasq作为本地DNS服务器使用,直接修改电脑的本地DNS的IP地址即可。

    2、应对ISP的DNS劫持。输入一个不存在的域名,正常的情况下浏览器是显示无法连接,DNS劫持会跳转到一个广告页面。先随便nslookup 一个不存在的域名,看看ISP商劫持的IP地址。

    3、接着编辑/etc/dnsmasq.conf文件,将:bogus-nxdomain=123.123.123.123 加入进去,后面的IP是刚刚查询到的DNS劫持IP地址。
    4、重启dnsmasq,再尝试打开不存在的域名,这时浏览器就会显示正常的无法连接页面了。

    5、智能DNS加快解析速度。打开/etc/dnsmasq.conf文件,server=后面可以添加指定的DNS,例如国内外不同的网站使用不同的DNS。

    #国内指定DNS
    server=/cn/114.114.114.114
    server=/taobao.com/114.114.114.114
    server=/taobaocdn.com/114.114.114.114
    #国外指定DNS
    server=/google.com/223.5.5.5
    6、server=/cn/表示所有的cn域名都使用114这个公共DNS,server=/taobao.com/表示所有的taobao.com域名都用114,223.5.5.5 是阿里云的公共DNS,你可以换成其它的。
    7、屏蔽网页广告。将指广告的URL指定127这个IP,就可以将网页上讨厌的广告给去掉了。

    address=/ad.youku.com/127.0.0.1
    address=/ad.iqiyi.com/127.0.0.1
    8、指定域名解析到特定的IP上。这个功能可以让你控制一些网站的访问,非法的DNS就经常把一些正规的网站解析到不正确IP上。

    address=/freehao123.com/123.123.123.123
    9、内网DNS。首先将局域网中的所有的设备的本地DNS设置为已经安装Dnsmasq的服务器IP地址。然后修改已经安装Dnsmasq的服务器Hosts文件:/etc/hosts,指定域名到特定的IP中。
    10、例如想让局域网中的所有用户访问www.freehao123.com时跳转到192.168.0.2,添加:192.168.0.2 www.freehao123.com在Hosts文件中既可,整个过程也可以说是“DNS劫持”。
    五、Dnsmasq小结
    1、Dnsmasq作为本地DNS服务器安装方便,操作简单,改动的地方也不是很多,如果用国内的VPS来搭建本地DNS,响应的速度会更快,也更稳定。
    2、Dnsmasq的功能强大,反DNS劫持、加快解析速度、屏蔽广告、控制内网DNS、强制域名跳转到特定IP上等这些功能在我们的实际的生活中都是很有用的。
    Dnsmasq提供DNS缓存和DHCP服务功能。作为域名解析服务器(DNS),dnsmasq可以通过缓存DNS请求来提高对访问过的网址的连接速度。作为DHCP服务器,dnsmasq可以为局域网电脑提供内网ip地址和路由,DNS和DHCP两个功能可以同时或分别单独实现。dnsmasq轻量且易配置,此外它还自带了一个PXE服务器。

    本文对这两项功能做比较实用的使用说明,有自己也有他人的经验。

    Dnsmasq的默认的配置文件中有许多选项,而且在设置上有很当灵活。dns与dhcp的许多功能它都具备。它可服务于那些只在本地适用的域名,这些域名是不会在全球DNS服务器中出现的(私有域名)。DHCP服务器和DNS服务器结合,并且允许DHCP分配的地址能在DNS中正常解析,而这些DHCP分配的地址和相关命令可以配置到每台主机中,也可以配置到一台核心设备中(比如路由器),DNSmasq支持静态和动态两种DHCP配置方式。

    一般情况下,我们可以用bind解决dns的问题,dhcpd解决dhcp的问题,可用dnsmasq解决下面的一些维护问题:

    1、局域网有很多机器希望使用一致的hosts文件,你需要经常维护这份列表。

    2、你希望局域网的人访问某个域名时,拦截下来到指定的ip,做缓存节省带宽或者其它用途都可以。优先使用本地自定义dns。

    3、阻止对某个域名的正常解析。

    —————————
    DNS配置
    要在本机上以守护进程方式启动dnsmasq做DNS缓存服务器,编辑/etc/dnsmasq.conf,添加监听地址:
    listen-address=127.0.0.1

    如果用此计算机作为一组主机的默认 DNS,就需要使用固定 IP 地址:
    listen-address=192.168.1.1 # Example IP

    其它主机的dns设置使用这个ip为dns服务器(/etc/resolv.conf)。

    默认情况下:
    resolv-file指定dnsmasq从哪里获取上行DNS Server, 默认是从/etc/resolv.conf获取。配置 dnsmasq 的上游 dns 服务器,(因为这是一个 dns 缓存, 那么其还是需要有上级服务器进行一次域名解析的来源)

    addn-hosts指定dnsmasq从哪个文件中读取“地址 域名”记录, 默认是系统文件/etc/hosts。配置系统的 dns 服务器, 将 dnsmasq 设置在首位寻找。

    listen-address默认是监控在所有网卡上的,设置 dnsmasq 需要监听的 IP 地址。

    1、首先配置 resolv-file=/etc/resolv.dnsmasq.conf 这个参数表示 dnsmasq 会从这个指定的文件中寻找上级 dns 服务器列表,而不是从本机的(resolv.conf)中读取dns服务器列表,如果机器的地址是通过dhcp取得的话,该文件容易受到影响从而影响dnsmasq。

    系统首先寻找本地的 dnsmasq 服务器 取消注释的 strict-order 表示严格安装 resolv-file 文件中的顺序从上到下进行 DNS 解析, 直到第一个成功解析成功为止

    2、no-hosts, 默认情况下这是注释掉的, dnsmasq 会首先寻找本地的 hosts 文件,再去寻找缓存下来的域名, 最后去上级 dns 服务器中寻找;而addn-hosts可以使用额外的hosts文件。所以说dnsmasq是一个很不错的外部DNS中继。

    3、设置 listen-address=127.0.0.1,192.168.0.1 表示该 dnsmasq 服务可以在哪些地址上侦听,127那个地址即本机,对外提供服务的话要写上对应的网口所有的地址。

    4、其他配置项:
    cache-size=1024 设置缓存大小

    log-queries 开启debug模式,记录客户端查询记录到/var/log/debug中

    5、客户端机器配置,编辑/etc/resolv.conf ,调整内容为 ‘nameserver 192.168.0.1’ (其中该IP是内部dns的IP,也即dnsmasq的地址)

    客户端测试域名是否生效:nslookup www.freeoa.net检查解析的IP即可,或使用dig指令。

    自定义主机名的ip地址指向
    先在’/etc/hosts’文件里加入两行:
    192.168.0.1 gateway
    192.168.0.8 home.freeoa.net

    编辑dnsmasq.conf,找到如下配置行:
    # Add local-only domains here, queries in these domains are answered
    # from /etc/hosts or DHCP only.
    local=/localnet/

    # Add domains which you want to force to an IP address here.
    # The example below send any host in doubleclick.net to a local
    # webserver.
    #address=/doubleclick.net/127.0.0.1
    address=/163.com/192.168.0.2

    重启dnsmasq即可,我们可在局域网另外一个机器用dig命令测试。
    $ dig gateway

    ; < <>> DiG 9.8.4-rpz2+rl005.12-P1 < <>> gateway
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 43215 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;gateway. IN A ;; ANSWER SECTION: gateway. 0 IN A 192.168.0.1 ;; Query time: 2 msec 由于默认的本机所使用的dns服务是dnsmasq所的机器,所以上面的查询是有效的。 $ dig gateway @8.8.8.8 ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 < <>> gateway @8.8.8.8
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER< <- opcode: QUERY, status: NXDOMAIN, id: 31552 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;gateway. IN A ;; AUTHORITY SECTION: . 910 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2014041000 1800 900 604800 86400 ;; Query time: 35 msec 上面是使用google的dns所返回的结果,明显是没有找到,另外从'Query time'也可看出,使用了dnsmasq后性能提高了不少。 在来看一下拦截并修改过的dns记录。 $ dig home.freeoa.net ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 < <>> home.freeoa.net

    ;; QUESTION SECTION:
    ;home.freeoa.net. IN A

    ;; ANSWER SECTION:
    home.freeoa.net. 0 IN A 192.168.0.8

    $ dig home.freeoa.net @8.8.4.4

    ; < <>> DiG 9.8.4-rpz2+rl005.12-P1 < <>> home.freeoa.net @8.8.4.4

    ;; QUESTION SECTION:
    ;home.freeoa.net. IN A

    ;; ANSWER SECTION:
    home.freeoa.net. 199 IN A 180.158.255.10

    上面是从内外部机器上查询的记录结果,后面的公网ip地址其实是我的公网地址,前者是内部nat地址,在内外部访问出来的结果是一样的,因为它们就是出自于同一台机器。

    对’*.163.com'(像news.163.com、money.163.com)的请求都将内部的地址上(依据定义而定)。这个跟泛解析的概念相类似。

    —————————
    DHCP配置
    dnsmasq 配置文件(/etc/dnsmasq.conf),必要的配置如下:

    #选定需要侦听的网口
    # Only listen to routers’ LAN NIC. Doing so opens up tcp/udp port 53 to
    # localhost and udp port 67 to world:
    interface=

    # dnsmasq will open tcp/udp port 53 and udp port 67 to world to help with
    # dynamic interfaces (assigning dynamic ips). Dnsmasq will discard world
    # requests to them, but the paranoid might like to close them and let the
    # kernel handle them:
    bind-interfaces

    #设定可分配的ip地址段和租约时间
    # Dynamic range of IPs to make available to LAN pc
    dhcp-range=192.168.1.50,192.168.1.100,12h

    #绑定某些机器的ip-mac地址对,使其具有固定的ip地址
    # If you’d like to have dnsmasq assign static IPs, bind the LAN computer’s
    # NIC MAC address:
    dhcp-host=aa:bb:cc:dd:ee:ff,192.168.1.50
    dhcp-host=00:0e:7b:ca:1c:6e,daunbook,192.168.0.12
    #为192.168.0.12设置主机名:dannbook

    总结相关的配置选项如下:
    expand-hosts

    domain=freeoa.net

    dhcp-range=192.168.0.20,192.168.0.100,12h

    dhcp-option=3,192.168.0.1

    以上配置选项开启了DHCP服务,并且设置domain为“freeoa.net”。DHCP服务提供地址范围为 ‘192.168.0.20到 192.168.0.100’ 续订期为12个小时。最后的一个选项指定了默认网关。

    如果要配置静态地址,可以对dhcp-host选项作以下设置:
    dhcp-host=00:0e:7b:ca:1c:6e,daunbook,192.168.0.12

    这样就会对MAC地址 11:22:33:44:55:66 赋主机名为 daunbook (.freeoa.net) IP 地址 192.168.0.12。

    dnsmasq另外一个特性是能够提供tftp服务,让网络启动(PXE)也得以实现。它可以设定默认MX记录,多种caching。提LDAP使用的SRV记录信息,PTR、SPF甚至是zeroconf记录等。

    测试
    测试一下 DNS 查询然后测量响应时间:
    $ dig archlinux.org | grep “Query time”

  • 此条目发表在 闲言碎语 分类目录。将固定链接加入收藏夹。

Google ADs

除非另有声明,本站文章遵循知识共享署名-非商业性使用 2.5 中国大陆许可协议。 Copyright © 2008-2012 99288.NET.CN.