跳到主要内容

在 Windows 中使用安全 DNS

· 阅读需 5 分钟

前言

在 Windows 10 及以下的系统版本中并没有原生的 DoH 和 DoT 支持。可以使用第三方软件代理上游安全 DNS,在本地启动一个 DNS 服务器供本机使用。

本文使用 dnsproxy 作为 DNS 代理服务器,使用 WinSW 把 dnsproxy 注册为 Windows 服务以确保 dnsproxy 自动运行。

安装 dnsproxy

dnsproxy 是 AdguardTeam 组织下的项目,质量应该不错。

使用 Scoop 快速安装 dnsproxy。

scoop install dnsproxy

dnsproxy 配置文件

创建配置文件,位于C:\Users\gem\.config\dnsproxy\config.yml,你可以根据情况把配置文件安排在合适的位置;其内容如下:

bootstrap:
- https://1.12.12.12/dns-query
- https://120.53.53.53/dns-query
- tls://1.12.12.12
- tls://120.53.53.53
upstream:
- https://doh.pub/dns-query
- tls://dot.pub
- https://dns.alidns.com/dns-query
- tls://dns.alidns.com
- https://do.360.cn
- tls://dot.360.cn

试运行

运行以下命令启动 dnsproxy,运行成功之后 dnsproxy 会默认监听本机的 53 端口并提供 DNS 解析服务。

dnsproxy --config-path="C:\Users\gem\.config\dnsproxy\config.yml" --all-servers --cache --cache-size=1024000

运行 dnsproxy

运行以下命令使用nslookup查询 DNS 记录。

nslookup 360.cn 127.0.0.1

使用 nslookup 查询 DNS 记录

手动运行没问题之后就可以做下面的步骤了:把 dnsproxy 注册为 Windows 服务,开机自动运行。

安装 WinSW

WinSW 是一个 Windows 服务包装器。它负责把其他程序包装为服务,并管理程序的日志和生命周期。

dnsproxy 直接注册为服务时不能启动,因为 dnsproxy 没有实现 Windows 服务标准,启动之后不响应,结果就是超时之后被结束掉了。所以需要使用 WinSW 包装一下。

用 Scoop 安装的 WinSW 使用的时候有问题,所以不用 Scoop 安装了。

你需要在发布页手动下载 WinSW 的可执行文件,比如WinSW-x86.exe。将其更名为WinSW.exe并将其和 dnsproxy 的配置文件config.yml放于同一目录下。

WinSW 配置文件

WinSW.exe同目录下创建配置文件,命名为WinSW.xml。请注意配置文件的名称和 WinSW 可执行文件的名称保持一致,后缀为xml。其内容如下:

<service>
<id>dnsproxy</id>
<name>dnsproxy</name>
<description>dnsproxy service</description>
<executable>D:\Personal\scoop\apps\dnsproxy\current\dnsproxy.exe</executable>
<arguments>--config-path="C:\Users\gem\.config\dnsproxy\config.yml" --all-servers --cache --cache-size=1024000</arguments>
<log mode="reset"/>
</service>

注册并启动服务

此时的目录结构如下:

..\dnsproxy\
├── config.yml
├── WinSW.exe
└── WinSW.xml

在目录dnsproxy中运行以下命令:

# 注册服务
.\WinSW.exe install
# 启动服务
.\WinSW.exe start
# 查看服务状态
.\WinSW.exe status

使用 WinSW 命令

运行之后 WinSW 会在同级目录下生成日志文件,你可以检查日志文件来确定 dnsproxy 是否启动成功。

..\dnsproxy\
├── config.yml # dnsproxy 配置文件
├── logs
│ ├── WinSW.err.log # dnsproxy 的错误输出
│ ├── WinSW.out.log # dnsproxy 的标准输出
│ └── WinSW.wrapper.log # WinSW 本身的日志
├── WinSW.exe # WinSW 可执行文件
└── WinSW.xml # WinSW 配置文件

修改网卡 DNS 服务器地址

找到你正在使用的网卡,把 IPv4 DNS 服务器的地址更改为127.0.0.1,并保存设置。

修改网卡 DNS 服务器地址

如果你使用 IPv6 地址,就把 IPv6 关了,目前配合 IPv6 使用有问题。

停止和删除服务

如果你不想使用 dnsproxy 了,你可以使用以下命令停止和删除服务。

# 注册服务
.\WinSW.exe stop
# 启动服务
.\WinSW.exe uninstall
# 查看服务状态
.\WinSW.exe status

之后再把网卡 DNS 服务器地址改为自动获取即可。

参考资料