盒子
盒子
文章目录
  1. 配置google public dns反代
  2. 编译dingo
    1. 环境准备
    2. 编译dingo
    3. 启动dingo服务
  3. 安装unbound
    1. 配置unbound
    2. 配置国内站点加速
  4. 将dns修改为本地dns
  5. 参考资料

使用dingo + unbound建立自用无污染dns

为了能有一个良好的上网环境,建立一个自用无污染dns必须的,否则你可能遇到如下几种情况:

针对敏感域名的错误解析

twitter A记录解析结果

经过查询ip归属地发现是属于facebook的ip,除非twitter和facebook已成一家。。。不然这不科学。

twitter解析结果IP归属地

未注册域名存在记录

滚键盘式域名解析结果

从上图可见,使用电信的当地dns(上海)查询一个未注册域名,存在A记录。然而查询这个域名的whois信息,你会得到如下结果:

ICANN WHOIS

显然这是电信的套路。。。下面开始正题吧。

配置google public dns反代

dingo使用的是google的httpdns,但在国内是无法访问到google的,因此需要找一台位于港澳台的服务器做一个反向代理(同时保证解析出的结果在大陆的访问速度)。

以下为nginx配置,仅供参考(仅包含反代部分)

location / {
proxy_set_header Host 'dns.google.com';
proxy_redirect off;
proxy_set_header X_FORWARDED_PROTO https;
proxy_pass https://dns.google.com;
}

编译dingo

环境准备

由于dingo使用golang编写,要编译dingo我们需要先准备好golang环境。当然你也可以到github上下载预编译好的release,即可跳过编译过程。

wget -c https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
unzip go1.8.3.linux-amd64.tar.gz
mv go /usr/local/
mkdir /usr/local/go/workspace
# 添加环境变量 (.bashrc / .zshrc等文件中, 根据你的情况选择,本文使用.bashrc)
GOROOT="/usr/local/go"
GOPATH="$GOROOT/workspace"
PATH="$GOROOT/bin:$GOPATH/bin:$PATH"
export GOROOT GOPATH PATH
source ~/.bashrc

当输入go version后出现下面的结果,就说明环境已经准备好了。

golang环境

编译dingo

git clone https://github.com/pforemski/dingo.git
cd dingo
go get https://github.com/pforemski/dingo
./build.sh linux-amd64

编译dingo

编译完成后会在/usr/local/go/workspace/bin目录下出现,dingo的可执行文件。执行dingo --help会出现dingo的参数说明:

dingo usage

至此dingo编译完成。

启动dingo服务

dingo启动命令:

/usr/bin/dingo -gdns:server=你的反代ip -gdns:host=你的反代域名 -gdns:sni=你的反代域名 -bind 127.0.0.1 -port 5353

如果需要后台启动,并且方便管理,可以使用supervisor或者systemd。鉴于自己对systemd还不熟,目前使用了supervisor。

安装unbound

如果没有什么特殊需求的话(比如edns-client-subnet),直接试用apt等软件包管理工具安装unbound即可。

apt-get install unbound -y

安装完成后注意修改/etc/default/unbound文件

- RESOLVCONF_FORWARDERS=true
+ RESOLVCONF_FORWARDERS=false

配置unbound

wget ftp://FTP.INTERNIC.NET/domain/named.cache -O/etc/unbound/root.hints
unbound-control-setup # 生成unbound-control证书文件

参考配置文件,具体参数作用可以查看官方文档

# Unbound configuration file for Debian.
#
# See the unbound.conf(5) man page.
#
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
# reference config file.
#
# The following line includes additional configuration files from the
# /etc/unbound/unbound.conf.d directory.
server:
num-threads: 1 # 使用cpu cores
interface: 0.0.0.0 # 监听地址
port: 53 # 监听端口
interface: ::0
so-rcvbuf: 4m
so-sndbuf: 4m
so-reuseport: yes # 多线程设置为yes
msg-cache-size: 64m
rrset-cache-size: 128m
cache-max-ttl: 3600
outgoing-num-tcp: 256
incoming-num-tcp: 1024
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: yes
tcp-upstream: no
access-control: 127.0.0.1 allow ##
access-control: 10.0.0.0/24 allow ## ACL
access-control: 192.168.56.0/24 allow ##
root-hints: "/etc/unbound/root.hints"
hide-identity: yes
hide-version: yes
harden-glue: yes
module-config: "iterator"
unwanted-reply-threshold: 10000000
do-not-query-localhost: no
prefetch: yes
minimal-responses: no
logfile: "/var/log/unbound.log"
log-queries: yes
include: "/etc/unbound/unbound.conf.d/*.conf" # 包含unbound.conf.d目录下的conf文件
forward-zone: ##
name: "." ##
forward-addr: 127.0.0.1@5353 ## 转发请求到dingo
forward-first: no ##
remote-control: # unbound-control命令相关配置
control-enable: yes
control-interface: 127.0.0.1
control-port: 8953
control-key-file: "/etc/unbound/unbound_control.key"
control-cert-file: "/etc/unbound/unbound_control.pem"
server-key-file: "/etc/unbound/unbound_server.key"
server-cert-file: "/etc/unbound/unbound_server.pem"

配置国内站点加速

配置国内站点的解析转发到国内dns,使用到dnsmasq-china-list

git clone https://github.com/felixonmars/dnsmasq-china-list.git
cd dnsmasq-china-list
make SERVER=119.29.29.29 unbound # 可以使用`SERVER=`修改转发dns地址,默认使用的是电信的114
cp accelerated-domains.china.unbound.conf /etc/unbound/unbound.conf.d/accelerated-domains.china.unbound.conf
systemctl restart unbound # service unbound restart

将dns修改为本地dns

Linux系统修改方法:

vim /etc/resolv.conf
nameserver 127.0.0.1

Windows的就不多说了/w\

参考资料

unbound配置及加速:
使用 Unbound 搭建更好用的 DNS 服务器

unbound配置:
Unbound documentation

支持一下
扫一扫,支持一下