近几年对DNS解析防劫持的要求越来越高, 关于dns加密查询,主要分为DOT, DOH 两种方式,含义如下:
DOT: DNS over TLS
DOH: DNS over HTTPS
两者的目的一致,都是为了加密DNS的请求内容,防止伪造、劫持攻击。区别在于 HTTPS是TLS上的HTTP协议, 更通用些。
本文使用环境: ubuntu 20.04, bind9.17-dev
首先切换到bind9开发分支,因为从bing9.17才开始支持doh
$ sudo add-apt-repository -r ppa:isc/bind-dev # 移除
$ sudo add-apt-repository ppa:isc/bind-dev
$ sudo apt-get update
$ sudo apt install bind9
1. 修改bind的配置文件,文件路径:/etc/bind/named.conf.options
修改内容如下:
// 设置证书
tls local-tls {
key-file "/etc/replace/yours/item.key";
cert-file "/etc/replace/yours/item.pem";
};
options {
// ... 其他配置略.....
// ipv4 监听端口,这里使用自定义的643, 不是https的443,根据个人需要
listen-on port 643 tls local-tls http default {any;};
// ipv6
listen-on-v6 port 643 tls local-tls http default {any;};
};
2. 配置apparmor, 允许访问证书路径:
$ sudo nano /etc/apparmor.d/local/usr.sbin.named
apparmor添加内容:
/etc/replace/yours/** r,
3. 重启bind9服务
$ sudo service bind9 restart
测试doh, 注意指定你的端口,如果使用默认的443端口,则不用指定。
$ dig -p 643 +https @127.0.0.1 www.rangotec.com AAAA
edge、chrome 在安全性里设置自己的doh地址,模板如下:
https://yun.rangotec.com:643/dns-query{?dns}
在安全性下选择服务商栏里填写自己的解析地址。