DoH/DoT 是 DNS 的加密传输方式, 可以有效防止 DNS 劫持, 提高 DNS 查询的安全性和隐私性.
Doh/DoT 的区别是, DoH 是 DNS over HTTPS, 使用 HTTPS 协议, 端口是 443, DoT 是 DNS over TLS, 使用 TLS 协议, 端口是 853.
有的 VPS 自带了域名劫持(比如 DNS 解锁), 如果要关闭 DNS 劫持, 或解除部分域名劫持, 或使用自己的 DNS 解锁, 可以使用 Stubby + dnsmasq 来防止 DNS 劫持.
stubby
Stubby 是一个 DNS-over-TLS (DoT) 客户端,可以用来加密 DNS 查询,防止 DNS 劫持。
安装 stubby
apt update & apt install -y stubby # Ubuntu/Debian
# yum install -y stubby # CentOS
配置 stubby, 编辑 /etc/stubby/stubby.yml
文件,内容:
resolution_type: GETDNS_RESOLUTION_STUB
dns_transport_list:
- GETDNS_TRANSPORT_TLS
tls_authentication: GETDNS_AUTHENTICATION_REQUIRED
tls_query_padding_blocksize: 128
edns_client_subnet_private: 1
idle_timeout: 10000
listen_addresses:
- 127.0.0.1@53000
- 0::1@53000
round_robin_upstreams: 0
upstream_recursive_servers:
- address_data: 1.1.1.1
tls_auth_name: "cloudflare-dns.com"
- address_data: 1.0.0.1
tls_auth_name: "cloudflare-dns.com"
重启 stubby: systemctl restart stubby
测试: dig @127.0.0.1 -p 53000 www.google.com
, 成功会返回 A 记录的 IP 地址
Dnsmasq
Dnsmasq 是一个轻量级的 DNS 转发器和 DHCP 服务器,它通常用于将 DNS 请求转发到其他 DNS 服务器,并缓存结果以提高性能.
安装 dnsmasq
apt update && apt install -y dnsmasq # Ubuntu/Debian
# yum install -y dnsmasq # CentOS
配置 dnsmasq, /etc/dnsmasq.conf
文件中添加:
# server=127.0.0.1#53000 # 所有DNS查询都使用 127.0.0.1#53000
listen-address=127.0.0.1
# 自定义域名解析
server=/google.com/127.0.0.1#53000 # google 域名/子域名
重启 dnsmasq: systemctl restart dnsmasq
配置系统 DNS
编辑 /etc/resolv.conf
, 最上面添加
nameserver 127.0.0.1
options edns0
验证: dig www.google.com
, 正常会返回未被劫持的 A 记录的 IP 地址
FAQs
所有域名dns解析都使用Stubby加密
- dnsmasq 配置文件启用 server=127.0.0.1#53000
- resolv.conf 注释掉除127.0.0.1外, 其他的 nameserver
- 防止某些系统 在网络服务重启或系统重启 后被还原
改成只读:chattr +i /etc/resolv.conf
, 还原, 改成可写:chattr -i /etc/resolv.conf
- 查看 53 端口占用:
netstat -tuln | grep :53
或lsof -i :53