抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

近期使用cn.bing.com时经常需要多次刷新才能显示搜索结果,推测是DNS解析再次受到干扰。为此我搜索了DNS服务相关的解决方案,发现NextDNS提供每月30万次免费查询额度,基本能满足个人需求。即使需要升级付费套餐,每月仅需12元的价格也颇具性价比。

NextDNS的配置流程较为简单,官方教程已涵盖多数系统设置。由于我的笔记本运行Arch Linux系统,在此特别说明相关配置方法:为避免频繁切换,我选择在系统层级设置全局DNS解析,具体可通过systemd-resolved或NetworkManager实现路由劫持。

NextDNS官方配置

按照NextDNS官方给的配置进行设置(使用systemd-resolved设置DNS):

1
2
3
4
5
6
7
8
9
sudo vim /etc/systemd/resolved.conf

# 填入以下内容:
[Resolve]
DNS=45.88.10.0#66b1be.dns.nextdns.io
DNS=2a01:a8c0::#66b1be.dns.nextdns.io
DNS=45.87.11.0#66b1be.dns.nextdns.io
DNS=2a01:a8c1::#66b1be.dns.nextdns.io
DNSOverTLS=yes

Arch Linux全局配置

我的Arch Linux的网络配置:

  • Neworkmanger连接管理WiFi部分
  • systemd-resolved配置DNS部分

这里为避免冲突,需要把Neworkmanger的DNS设为自动。并且进行下面配置:

首先确认resolv.conf没有别的网络软件干扰:

1
ls -l /etc/resolv.conf  # 如果没有符号链接或者符号链接指向/run/NetworkManager/resolv.conf,表明Networkmanger正在覆盖

如果是正在覆盖的情况就需要修改配置NetworkManager使用 systemd-resolved配置DNS:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 修改(创建)/etc/NetworkManager/conf.d/dns.conf
sudo nano /etc/NetworkManager/conf.d/dns.conf
# {可选} 编辑/etc/NetworkManager/NetworkManager.conf
#[main]
#dns=none # 禁用 NetworkManager 的 DNS 管理
#rc-manager=unmanaged # 禁止自动生成 resolv.conf



# 并填入:
[main]
dns=systemd-resolved

# 强制 /etc/resolv.conf 指向 systemd-resolved 的存根文件:
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

# 重启NetworkManager
sudo systemctl restart NetworkManager systemd-resolved

# 验证是否生效

dig google.com # 如果输出的SERVER类似"127.0.0.53",则表明systemd-resolved配置已生效

# 设为开机自启动
sudo systemctl enable systemd-resolved

附加:

强制ipv6 DNS优先解析,编辑/etc/systemd/resolved.conf,将ipv6 DNS放前面,检验:

1
getent ahosts example.com | head -n 5   # 如果ipv6在前面表示是ipv6 DNS优先解析

v2rayA防DNS污染

前面文章(配置v2rayA避免DNS泄露)提到过关于v2rayA的DNS污染问题,NextDNS是替代方案。

打开v2rayA按照下图配置后DNS就不会泄露:
图片加载失败


2025.7.17 更新

今天发现一个更简单设置dns-over-https的方法:

首先安装dns-over-https包,

1
sudo pacman -S dns-over-https

然后修改配置文件/etc/dns-over-https/doh-client.conf

1
2
3
4
# 设置所需的https链接
[[upstream.upstream_ietf]]
url = "https://[IP or web address]/dns-query"
weight = 20

启动服务:

1
2
3
4
5
# 重启服务
sudo systemctl restart NetworkManager doh-client.servic

# 加入启动项
sudo systemctl enable doh-client.service

另外需要修改/etc/NetworkManager/conf.d/dns.conf:

1
2
[main]
dns=doh-client

如果/etc/resolv.conf依然被覆盖,一个简单的方法是:

1
2
3
4
5
6
7
# 新建doh-client配置文件
sudo touch /etc/doh.conf
## 其中里面需要填入nameserver
## nameserver 127.0.0.1

# 然后建立链接,然后别忘记重启网络服务
sudo ln -sf /etc/doh.conf /etc/resolved.conf

参考

评论



Powered by Hexo | Theme keep Volantis

本站总访问量 总访客数 🌎