使用 Stubby 加密DNS 防止DNS劫持

vps.dance 2023-11-11 2023-12-08 295℃

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加密

    1. dnsmasq 配置文件启用 server=127.0.0.1#53000
    2. resolv.conf 注释掉除127.0.0.1外, 其他的 nameserver
  • 防止某些系统 在网络服务重启或系统重启 后被还原
    改成只读: chattr +i /etc/resolv.conf, 还原, 改成可写: chattr -i /etc/resolv.conf
  • 查看 53 端口占用:
    netstat -tuln | grep :53lsof -i :53
标签: Stubby, Dnsmasq, DNS, 劫持

非特殊说明, 所有文章均为原创.