美文网首页Linux树莓派
用 dnsmasq 快速搭建本地 DNS Server

用 dnsmasq 快速搭建本地 DNS Server

作者: niefdad | 来源:发表于2017-04-07 11:19 被阅读170次

什么是 DNS Server

简单的说,DNS Sever 就是把域名转换为 IP 地址的一个服务。如 Google 提供了 8.8.8.8

为什么需要搭建本地的 DNS Server?

最常见的两种情况是:

  1. 你有一些虚拟主机,本次都通过 IP 地址去访问的太麻烦,因为 IP 地址很不容易记。
  2. 本地开发时,不想每次都用 http://127.0.0.1:3000, http://127.0.0.1:3001 这种来访问,而是想用 http://app1.dev

这两种情况都需要把虚拟的域名转换为对应的 IP, 最简单的方式是直接修改 /etc/hosts, 还有一种方式就是搭建一个本地的 DNS Server

安装前

/本文所有操作都是在 macOS 下完成,其他 *nix 操作系统会稍有区别/

首先查看一下当前配置了哪些的 DNS resolver

scutil --dns

可以看到类似这样的输出

DNS configuration

resolver #1
  nameserver[0] : 192.168.31.1
  if_index : 4 (en0)
  flags    : Request A records
  reach    : Reachable, Directly Reachable Address

后面还有 resolver #2 resolver #3

另外先了解一下 dig 命令, dig 是用来查询 DNS 的一个工具。

dig www.google.com

输出

; <<>> DiG 9.8.3-P1 <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11696
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.            IN  A

;; ANSWER SECTION:
www.google.com.     30  IN  A   93.46.8.89

;; Query time: 7 msec
;; SERVER: 192.168.31.1#53(192.168.31.1)
;; WHEN: Wed Apr  5 22:23:18 2017
;; MSG SIZE  rcvd: 48

这里可以看到,域名 www.google.com 在我的电脑中解析出来 IP 地址是 93.46.8.9

安装 dnsmasq

brew install dnsmasq

然后 copy 一下配置文件

cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

配置文件所有的配置都是已经注释掉的,可根据自己的需要取消注释并修改。dnsmasq 同时还提供了如 DHCP 的其他功能,这里我们只关注 DNS Server 这一块。
先在文件最底部增加一行

address=/dev/127.0.0.1

重启dnsmasq

sudo brew services restart dnsmasq

然后通过 dig 命令来检查是否生效

dig abc.dev @127.0.0.1

这里的 @127.0.0.1 用来告诉 dig去 127.0.0.1 这个 dns server 来查询
输出结里(隐藏了头尾)

;; QUESTION SECTION:
;abc.dev.           IN  A

;; ANSWER SECTION:
abc.dev.        0   IN  A   127.0.0.1

此时已经可以看到,域名abc.dev 的 IP 地址已经被解析为 127.0.0.1
但时我们用 ping 命令来测试,是不正确的。这里ping和没用指定 @127.0.0.1dig是一样的,默认都是使用 /etc/resolv.conf指定的 nameserver 来查询的。

给 macOS 增加更多的nameserver

新建一个 /etc/resolver目录,然后新建一个 /etc/resolver/dev文件,然后增加新的 nameserver

sudo mkdir -p /etc/resolver
echo 'nameserver 127.0.0.1' | sudo tee /etc/resolver/dev

然后每次系统做 DNS 查询时,发现是以 dev 结尾的域名时,就会使用 /etc/resolver/dev 这个文件里指定的 nameserver 来解析。同样的,我们也可以创建一个 /etc/resolver/staging,然后让所有的以 staging 为结尾的域名都用该文件指定的 nameserver 来解析。
再次执行

scutil --dns

会发现输出多了一个 resolver

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1
  flags    : Request A records, Request AAAA records
  reach    : Reachable, Local Address, Directly Reachable Address

我们可以用 traceroute命令来查看解析的路径

traceroute abc.dev

输出为

traceroute to abc.dev (127.0.0.1), 64 hops max, 52 byte packets
 1  localhost (127.0.0.1)  0.196 ms  0.034 ms  0.034 ms

这里可以看到,只有一跳就完成了解析。
至此,一个本地的 DNS server 就搭建完成了

More

  1. 可在 dnsmasq 的配置文件中增加一行
conf-dir=/usr/local/etc/dnsmasq.d/,*.conf

然后按需在相应的目录创建 dev.conf, staing.conf等文件。注意每次修改完配置文件要重启 dnsmasq

  1. address=/dev/127.0.0.1 是一种通配方式,把所有的以 dev 结尾的域名都解析为 127.0.0.1。
    也可以为每个域名都指定一个独立的 IP ,如在 /usr/local/etc/dnsmasq.d/staging.conf里,我们可以指定各种 staging 相关的 服务
address=/db.staging/192.168.1.10
address=/app.staging/192.168.1.11
address=/job.staging/192.168.1.12

注意增加新的域名后缀要在 /etc/resolver/ 下创建相应的文件并增加 nameserver

  1. dnsmasq 默认监听的端口为 53, 所有启动该服务需要用 sudo

相关文章

  • 用 dnsmasq 快速搭建本地 DNS Server

    什么是 DNS Server 简单的说,DNS Sever 就是把域名转换为 IP 地址的一个服务。如 Googl...

  • TP_LINK无线路由器实现域名重定向

    实现思路: 1:搭建本地的DNS服务器(使用dnsmasq搭建); 1)我是在linux上面搭建的DNS服...

  • mac os x 安装dns server: dnsmasq

    mac os x 安装dns server: dnsmasq 重启:

  • DNSMASQ

    NAME dnsmasq - A lightweight DHCP and caching DNS server....

  • 使用dnsmasq搭建DNS Server

    前段时间腾讯云活动撸了个1核2G内存云服务器,上海二区使用上海电信ping值不超过8ms左右,但带宽只有1M,适合...

  • DNS

    用DNSmasq搭建小型的内网DNSyum install dnsmasq -yservice dnsmasq s...

  • 树莓派 之 dnsmasq搭建DNS服务器

    Dnsmasq是一款高性能的DNS缓存软件,可以使用它来搭建一个小型的DNS服务器。在使用时,由于dnsmasq可...

  • 本地DNS-dnsmasq

    安装brew install dnsmasq 配置/usr/local/etc/dnsmasq.conf# 配置上...

  • dnsmasq

    dnsmasq会首先寻找本地的hosts文件,再去寻找缓存下来的域名,最后去上游dns服务器寻找。dnsmasq服...

  • Dnsmasq一个超有用的选项

    公司内网使用的DNS服务是用软件Dnsmasq搭建的,最近经常有同事反映一些网站打不开,先前都是可以的。用dig命...

网友评论

    本文标题:用 dnsmasq 快速搭建本地 DNS Server

    本文链接:https://www.haomeiwen.com/subject/qsyqattx.html