DNSMasq 建立自定义 DNS

一直想写的 微萌 DNS 在今天上午准备好基本架构后却在下午遇到各种各样的坑而弃掉了… 心情有够不爽。所以把自己维护的缓存 DNS 解决方案写出来,想要折腾类似的东西的童鞋可以试试看。

所谓自定义 DNS,这里有这么几个功能:

  • 反 DNS 污染

  • 可以直接访问部分网站

  • 一些特定的服务加速

  • 解决一些国外 DNS 被 X 的问题

接下来是搭建步骤。

安装基本包

需要:dnsmasqdnscrypt-proxy

前者在几乎所有的发行版里都有,直接装就行了。后者需要添加第三方源。如果是 Ubuntu 的话可以添加 ppa:shnatsel/dnscrypt 仓库然后安装这个包。

DNSCrypt 配置

默认的话安装的 dnscrypt-proxy 是侦听于 127.0.0.253 端口,这里需要让 DNSMasq 来作为上游服务器所以需要修改配置。文件:/etc/default/dnscrypt-proxy

修改

1
local-address=127.0.0.2:53


1
local-address=127.0.0.1:5301

以及默认的 DNS 服务器是 OpenDNS —— 和其他欧美服务一样,节点遍布欧美亚洲就那么可怜的一两个节点,甚至一个节点都没就敢叫遍布全球了呢。所以这里最好能改一下,比如选择日本的 OpenNIC 节点。配置文件里添加(原本是有 OpenDNS 注释的,无视即可)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
   resolver-address=106.186.17.181:2053
provider-name=2.dnscrypt-cert.ns2.jp.dns.opennic.glue
provider-key=8768:C3DB:F70A:FBC6:3B64:8630:8167:2FD4:EE6F:E175:ECFD:46C9:22FC:7674:A1AC:2E2A
```

更多可用的 DNSCrypt 服务器在 [DNSCrypt 主页][2] 可以找到。

修改好配置文件后保存,重启 dnscrypt 服务。

### 两个好用的配置文件

要感谢喵菊苣的功劳,我们有两个很方便好用的配置文件来阻止一些国内 ISP 的 DNS 污染,以及部分国内站点的加速。

配置文件地址在 [ 这里][3]

为了方便日后更新,把这个仓库 clone 到本地而不是直接下载。

git clone https://github.com/felixonmars/dnsmasq-china-list.git cd dnsmasq-china-list

创建到 DNSMasq 配置目录的软链接,当前该目录在 /root/dnsmasq-china-list 下。

ln -s /root/dnsmasq-china-list/accelerated-domains.china.conf /etc/dnsmasq.d/ ln -s /root/dnsmasq-china-list/bogus-nxdomain.china.conf /etc/dnsmasq.d/

1
2
3
4
5
6
7
8

### 一份你懂的 hosts 和拿来主义

hosts 神马的最喜欢了。自从有了它,妈妈再也不用担心我上不了 Google+ ~~

于是这玩意到处都有,找一份你觉得靠谱的,然后保存在一个方便找的目录下。~~ 注意:不要放在 `/etc/dnsmasq.d` 下,这里文件位置在 `/etc/dns/hosts`

实在受不了渣渣 Android 的坑爹于是换了 iPhone 之后,Apple 软件的下载速度其实不比 Android 浪费我的时间少多少。一直以来我自己写 Apple 服务加速配置,通过各种查询 Apple 在 Chinacache 的 CDN IP,然后写个简单的脚本保证 2000 个地址能平均分配到各种线路的 IP。不过后来发现这种办法开始行不通了… 于是直接拿别人的来用好了。新建文件: `/etc/dnsmasq.d/apple.conf` 内容只有一行:

server=/.apple.com/199.91.73.222

1
2
3
4
5
6
7
8

在这里要感谢 V2EX 的 DNS 啦~

### 调教 DNSMasq

一切准备就绪,现在来看 DNSMasq 的配置文件—— `/etc/dnsmasq.conf`

这里只写修改了的配置,其他的保持默认即可。

不读取 /etc/resolv.conf ,取消注释即可

no-resolv no-poll

添加上游服务器为 DNSCrypt,如果还有其他的 server= 记得取消注释。

server=127.0.0.1#5301

在所有网卡上关闭 DHCP,用不着这个功能。如果有多个网卡那么一行一个。

no-dhcp-interface=eth0

添加自定义 hosts 文件

addn-hosts=/etc/dns/hosts
`

一共就是这些。保存配置文件并重启 dnsmasq,这样就有了一台可以给所有设备使用的、具备防污染 / 服务加速以及自定义地址等功能的 DNS 服务器啦~

WHY·LIAM wechat
记录生活,研究产品,分享设计,分析数据,讨论科技和商业,不定期扯淡。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!