旧时代的dns配置
之前折腾过好久的dns ,试过很多种dns方案,我列举一下方案和解决的问题
- 本地
dnsmasq服务- 允许使用自定义
dns - 本地缓存
dns结果 - 并发查询
dns(貌似没什么用),仅仅取最先返回的结果 - 特定域名绑定特定
dns服务器,server=/www.xxx.com/114.114.114.114
- 允许使用自定义
dnsmasq+dnsmasq-china-list- 该方案在上一方案的基础上利用dnsmasq-china-list实现
dns分流
- 该方案在上一方案的基础上利用dnsmasq-china-list实现
smartdns+dnsmasq-chinalist- 使用smartdns替代dnsmasq,支持
doh、doh、非标准端口查询等技术 smartdns支持并发查询,同时支持对结果测速并优选(实际体验,不太好用)
- 使用smartdns替代dnsmasq,支持
方案设计
最近意识到一线运营商(移动、电信、联通等),对国内常见服务基本不会(不敢)投毒。所以我实际上要解决的是国外服务的dns污染现象。那么正好可以把dnsmasq-china-list当作黑名单,里面的域名的dns查询,转发到运营商dns,从而获得较好的cdn体验和运营商优化。大概如下图:
方案详细
- 使用
NetworkManager作为网络管理器,并启用dnsmasq插件 dnsmasq用于国内外分流和dns缓存systemd-resolved负责解析国内域名,使用NetworkManger转发的默认dchp配置,即运营商路由smartdns负责解析国外域名,主要采用加密的dns方案,防止运营商dns抢答和dns污染,有需要的话,可以让部分dns查询走socks5代理
优势
- 可以得到较好的cdn体验(如果你的运营商不作妖)
- 国外域名走加密的dns查询,不会被抢答和篡改
缺点
- 无法解决运营商dns污染(cdn的正常运行是有代价的)
- 就算国外的域名,也无法避免污染(除非指定使用国外的dns服务器,
google和cloudflare都在国内有服务器),如果要彻底解决该问题,建议透明代理或者全局代理,本方案重点是解决常用国外域名的dns污染的,兼顾运营商的网络加速和出口优化。
准备
使用环境
我的笔记本使用的是最新版本的Archlinux,网络管理器是NetworkManager。
如果你不知道NetworkManager是什么,只要你使用的是KDE或者Gnome那么你的默认网络管理器就是``NetworkManager`。
前提条件
下列体系配套使用依赖于NetworkManager的下列行为,官方文档NerworkManager.conf
- NetworkManager 可以使用
dnsmasq插件作为本地dns缓存 NetworkManager默认将dns配置转发到systemd-resolved
配置
配置systemd-resolve
确保服务启动
|
|
自定义Fallback服务器
如果 systemd-resolved 无法从 接收DNS服务器地址, 网络管理器 并且没有 配置DNS服务器, 手动 则 systemd-resolved 会回退到后备DNS地址,以确保DNS解析始终有效。
|
|
配置NetworkManager
编辑配置文件,启用dnsmasq 插件
|
|
配置dnsmasq启动参数
如果使用dnsmasq插件来进行dns缓存,NetworkManager会在启动时启动一个子进程来运行dnsmasq,配置时注意disable其他运行在127.0.0.1:53的dns服务。
编辑下列文件设定新的配置目录(可以不配置,我这么做是为了复用之前的dnsmasq配置文件),这样配置后,会使用dnsmasq默认配置目录中的文件。
|
|
配置dnsmasq
安装并配置dnsmasq-china-list
如果启用了archlinuxcn源:
|
|
使用 hooks 自动替换 dns 服务器
注意,如果要使用该 hooks ,必须在安装 dnsmasq-china-list 前完成下列配置;如果已经完成安装,可重新安装一次以确保dns服务器被替换完成。
|
|
未启用archlinuxcn源,使用yay或其他aur helper进行安装:
|
|
上述hooks,对aur同样有效
非archlinux,前往 dnsmasq-china-list 自行安装:
注意make时编辑一下SERVER变量,不要使用默认的114服务,应当指向我们运行在本地的systemd-resolved
配置smartdns
smartdns主要用于外网dns解析,这种情况下我们基本没有国内cdn可用,不需要考虑,因此直接使用 cloudflare 和 google 的 doh 和 dot 服务。在翻墙时,可以开启远程 dns 解析来获取 cdn 服务。
|
|
一些优化(玄学)建议 for smartdns
|
|
最后
建议使用 wireshark 测试一下配置是否成功