proxifier使用后有个dns代理,选择或者不选择都造成缓慢和无法访问
最后失败,
原因
nslookup 123.aa 就可以发现,用的是Tailscale的 默认dns服务器. 再设置中,取消dns,结果连基本的网络都连不上了.
在 Tailscale 后台设置自定义 DNS
登录 Tailscale 管理后台:在浏览器中访问你的 Tailscale 管理页面。
进入 DNS 设置:找到并点击左侧导航栏的 DNS 选项。
添加自定义 DNS 服务器:
在 "Nameservers" 部分,点击 Add nameserver。
输入 127.0.0.1 作为 DNS 服务器地址。
保存设置:点击 Save changes。
**1 我下载了
D:\soft-green\tools\dns\Acrylic-Portable
免安装版本,复制了快捷方式到启动文件夹.
2 修改了AcrylicConfiguration这个配置
实现 第一个国内dns服务器
然后是国外dns服务器
3 修改了电脑网络的dns为 127.0.0.1 这样会自动转发到127.0.0.1:53端口
4 Proxifier 还需要写规则,看最后文字
4 另外说一下,AcrylicHosts 这个地方可以添加hosts内容.
**
4 proxifier开启了dns代理服务.
这样用户访问网站,
优先再Acrylic 这里解析,
也就是优先用国内dns解析
解析失败,然后就用国外解析
还是白
然后用代理解析.
我使用了方案1
当然可以,将 Acrylic DNS Proxy 和 Proxifier 结合使用是一个非常好的主意,可以完美解决你遇到的问题。
解决方案原理
当你同时使用这两个工具时,它们的协作流程是这样的:
- Acrylic DNS Proxy 在你的电脑上扮演一个 本地 DNS 服务器 的角色。它会缓存 DNS 查询,并根据你配置的规则(比如 hosts 文件)进行解析。
- Proxifier 则负责管理 流量代理。它可以将应用程序的流量(包括 DNS 请求)重定向到你设定的代理服务器。
如何搭配使用
你可以采用以下两种配置方案,每种方案都有其优势。
方案一:Proxifier 负责所有 DNS 请求(推荐)
这是最简单、最有效的方案,它利用了 Proxifier 强大的规则引擎。
- 在 Windows 网络设置中,将 DNS 地址设置为 Acrylic 的本地地址(
127.0.0.1)。 - 在 Proxifier 中, 将 “代理 DNS” 选项 勾选上。
工作流程: 任何应用程序发起的 DNS 请求都会先发送到本地的 Acrylic DNS Proxy。然后,Proxifier 会识别这个请求,并根据你的规则进行处理。如果这个请求需要通过代理(比如访问被封锁的网站),Proxifier 会将它重定向到你的 VPN 或 Shadowsocks 服务器;如果不需要,它则直接发送给 Acrylic 设定的上游 DNS 服务器(比如 8.8.8.8)。
优势:
- 集中管理: 所有 DNS 解析逻辑都由 Proxifier 的规则控制,简单清晰。
- 高性能: Acrylic DNS Proxy 依然可以提供本地缓存功能,提高解析速度。
- 兼容性: 这个配置能确保所有需要代理的流量和 DNS 请求都能正确通过代理,从而解决解析失败的问题。
方案二:Acrylic 负责部分 DNS 解析
这种方案更适合有复杂需求的场景,但配置相对复杂。
- 在 Windows 网络设置中,将 DNS 地址设置为 Acrylic 的本地地址(
127.0.0.1)。 - 在 Proxifier 中, 将 “代理 DNS” 选项 取消勾选。
- 在 Acrylic 的 Hosts 文件中,手动添加需要代理的域名。将这些域名指向一个无效的 IP 地址,例如
127.0.0.1或0.0.0.0。 - 在 Proxifier 中, 创建一个规则,将目标 IP 地址为
127.0.0.1或0.0.0.0的流量,全部通过代理发送。
工作流程: 当你访问一个被封锁的网站时,Acrylic 会根据 hosts 文件将其解析为本地地址。Proxifier 看到流量要发往本地地址,就会根据你设定的规则,将其重定向到代理服务器。
优势:
- 精细控制: 你可以在 Acrylic 的 hosts 文件中精确控制哪些域名需要特殊处理,而不是依赖 Proxifier 的域名匹配。
总结
综合来看,我更推荐 方案一。它既能利用 Acrylic 的本地缓存提高解析速度,又能通过 Proxifier 的规则引擎灵活地处理需要代理的 DNS 请求,完美解决了你遇到的矛盾。这个方案的配置也更简单,维护起来更方便。
在 AcrylicConfiguration.ini 文件中,PrimaryServerAddress 是用来指定 主 DNS 服务器地址的,它只能设置一个 IP 地址。
如果你想设置多个上游 DNS 服务器,Acrylic 提供了 SecondaryServerAddress、TertiaryServerAddress 等选项。你可以这样配置:
[DNS]
PrimaryServerAddress=8.8.8.8
SecondaryServerAddress=1.1.1.1
TertiaryServerAddress=9.9.9.9
Acrylic 会按照你设定的顺序(从 Primary 到 Tertiary)来查询这些 DNS 服务器。如果主服务器无法响应,它会自动切换到辅助服务器,从而提供更高的稳定性和冗余。
配置多个上游 DNS 服务器的好处
- 高可用性:当一个 DNS 服务器出现故障或响应变慢时,Acrylic 可以自动使用另一个服务器,确保 DNS 解析服务的连续性。
- 速度优化:虽然 Acrylic 会首先尝试主服务器,但在某些情况下,辅助服务器可能更快,这可以减少解析延迟。
- 分散风险:避免过度依赖单一的 DNS 服务商,防止因某个服务商的问题而导致网络故障。
通过这种方式,你可以灵活地配置多个上游 DNS 服务器,以适应不同的网络环境和需求。
hosts文件的知识点
当使用 Acrylic DNS Proxy 时,Windows 本地的 hosts 文件不会受到影响,但它的工作方式会发生一些变化。
Acrylic 和 hosts 文件的关系
Acrylic 有一个强大的功能,就是它可以读取和解析自己的 AcrylicHosts.txt 文件,这个文件位于 Acrylic 的安装目录下。
在默认情况下,Acrylic 的设计是先检查自己的 hosts 文件(AcrylicHosts.txt),如果匹配到规则,就直接返回解析结果,不会再去查询 Windows 本地的 hosts 文件。
所以,当你的 DNS 请求通过 Acrylic 处理时:
- Acrylic 检查
AcrylicHosts.txt:如果里面有你请求的域名,它会立即返回对应的 IP 地址。 - Acrylic 检查 Windows
hosts文件:Acrylic 默认不检查 Windows 的hosts文件。
如何让 Acrylic 读取 Windows 的 hosts 文件
如果你想让 Acrylic 能够利用到 Windows 自带的 hosts 文件,你可以修改 AcrylicConfiguration.ini 文件。
在 AcrylicConfiguration.ini 中找到 [DNS] 部分,添加或修改以下参数:
[DNS]
...
WindowsHostsFile=1
将 WindowsHostsFile 的值设置为 1,Acrylic 就会在查询自己的 hosts 文件之后,再去检查 Windows 的 hosts 文件。
总结
- 默认情况下,Acrylic 不会读取 Windows 本地的
hosts文件。 - 你可以通过修改
AcrylicConfiguration.ini文件,让 Acrylic 也读取 Windows 的hosts文件。 - 无论你是否修改 Acrylic 的配置,Windows 本地的
hosts文件本身并不会被删除或修改,它依然保持原样。只是在 DNS 解析过程中,它的优先级和作用会根据 Acrylic 的配置而有所不同。
你观察得很准确,这确实是 Proxifier 的工作原理。当你开启 DNS 代理功能时,Proxifier 会在系统网络层面对 DNS 请求进行拦截,从而导致解析请求先被它处理,而不是先到达你配置的本地 DNS 服务器 Acrylic。
这个现象是由 Proxifier 的设计初衷 决定的。它是一个流量重定向工具,其核心功能是在应用程序发起网络连接之前,就对其流量进行接管和处理。当你在网络设置中将 DNS 地址指向 127.0.0.1(Acrylic)时,系统确实会向这个地址发送请求,但 Proxifier 在这个数据包被发送出去之前就把它拦截了。
工作流程分解
为了更好地理解这个过程,我们可以把它分解为以下几步:
- 应用程序发起 DNS 请求:比如你在浏览器中输入
google.com。 - Proxifier 拦截请求:由于你开启了 DNS 代理,Proxifier 会立即拦截这个 DNS 请求。它不会让这个请求到达 Acrylic。
- Proxifier 代理 DNS 请求:根据你的 Proxifier 规则,它会将这个 DNS 请求通过你配置的代理服务器发送出去。
- 代理服务器进行解析:你的 VPN 或 Shadowsocks 服务器收到请求后,会利用它自己的 DNS 服务器进行解析。
- 结果返回:代理服务器将解析结果返回给 Proxifier,Proxifier 再将其转交给你的应用程序。
解决方案
虽然 Proxifier 会优先拦截 DNS 请求,但你仍然可以通过 配置 Proxifier 规则 来让 Acrylic 发挥作用,并解决你的困扰。
你需要创建一个 “混合”规则,让 Proxifier 知道何时应该放行 DNS 请求,何时应该代理。
在 Proxifier 中,创建一个针对 DNS 请求的特殊规则。
- 进入 Profile -> Proxification Rules。
- 点击 Add 创建新规则。
- 将规则命名为
Acrylic DNS。 - 在 Target Ports 中,添加 53(这是 DNS 服务的标准端口)。
- 在 Action 中,选择 Direct(直接连接)。
- 确保此规则位于所有其他代理规则的最上方。
创建其他代理规则。
- 根据你的需求,创建针对特定域名或 IP 地址的代理规则。
- 在这些规则的 Action 中,选择你的代理服务器。
新的工作流程
现在,你的流量处理流程将是这样的:
- 应用程序发起 DNS 请求。
- Proxifier 拦截:它会先检查最上面的
Acrylic DNS规则。 - Proxifier 放行:由于规则
Acrylic DNS设置为Direct,Proxifier 会放行这个请求,让它继续向127.0.0.1(Acrylic)发送。 - Acrylic 进行解析:Acrylic 收到请求后,会先检查自己的 hosts 文件和缓存,然后根据你的配置,将请求发送到它的上游 DNS 服务器进行解析。
- 流量处理:当应用程序拿到解析结果后,它会发起实际的网络连接。这时 Proxifier 会再次拦截流量,并根据你的代理规则判断是否需要代理。
通过这种方式,你既能利用 Acrylic 的本地缓存和 hosts 功能来加速解析,又能通过 Proxifier 的规则引擎来处理需要代理的特定流量,完美实现了二者的协同工作。