Clash DNS 解析警告说明 | AI生成和翻译
问题: 为什么会有这么多 Clash 日志:“[TCP] dial DIRECT (match DomainSuffix/local) 127.0.0.1:… –> lzwjava.local:59822 error: couldn’t find ip”?
答案:
Clash(可能是 Clash for Windows 或类似的客户端,如 Clash Verge)中的这些警告日志表明,重复尝试解析和连接到主机名 lzwjava.local 上的端口 59822 失败。
日志的关键细分
- DomainSuffix/local:您的 Clash 配置中的一条规则匹配以
.local结尾的域(通常用于本地网络/多播 DNS 主机),并将它们路由到 DIRECT(绕过代理)。 - 127.0.0.1:… –> lzwjava.local:59822:您本地机器上的一个应用程序(localhost,使用不同的源端口,如 49245-49255)尝试连接到
lzwjava.local:59822。 - error: couldn’t find ip:Clash 尝试对
lzwjava.local进行 DNS 解析,但未能获取 IP 地址。
为什么会发生这种情况
.local域使用 mDNS (multicast DNS),通常由 Avahi (Linux) 或 Bonjour (Windows/macOS) 等服务处理。- Clash 的内置 DNS 解析器不支持 mDNS 查询。当对
.local域进行 DIRECT 路由时,它依赖于标准 DNS,而标准 DNS 无法解析lzwjava.local→ 失败。 - 未找到 IP → 连接失败 → 记录警告。
为什么有如此多的日志
- 您机器上的一个应用程序重复尝试连接到
lzwjava.local:59822。 - 端口 59822 表明可能是 IntelliJ IDEA 或其他 Java IDE(JetBrains 产品)处于“远程开发”或“瘦客户端”模式,其中 IDE 前端使用
.local主机名连接到远程主机或 VM 上的后端服务器。 - 该应用程序可能频繁轮询或重试连接(例如,每隔几秒钟进行心跳/状态检查),从而产生多个快速尝试(此处为快速连续的 11 次尝试)。
- 常见触发器:IDE 检查服务器状态、自动重新连接尝试或后台同步。
如何修复或减少日志
- 添加主机映射(快速修复):
- 编辑您的系统
hosts文件:- Windows:
C:\Windows\System32\drivers\etc\hosts - macOS/Linux:
/etc/hosts
- Windows:
- 添加:
127.0.0.1 lzwjava.local(如果它是另一台设备,则为实际 IP)。 - 这会绕过 DNS 查找。
- 编辑您的系统
- 更改 Clash 规则:
- 删除或修改
DOMAIN-SUFFIX,.local,DIRECT规则,以避免对未解析的主机进行 DIRECT 路由。 - 或者添加一条特定规则,例如
DOMAIN,lzwjava.local,REJECT以静默阻止它。
- 删除或修改
- 禁用应用程序中的功能:
- 如果是 JetBrains IDE (例如 IntelliJ),请检查“Remote Development”或“Gateway”连接设置,并禁用/断开与名为“lzwjava”的服务器的连接。
- 在 Clash 中启用增强型 DNS (如果使用 Fake-IP 或 TUN 模式):
- 某些版本通过适当的 DNS 设置可以更好地处理本地解析,但 mDNS 支持有限。
这些日志是无害的警告(不会导致 Clash 崩溃),但如果应用程序不断重试,它们会刷屏。修复解析或停止连接尝试将消除它们。
参考:
- GitHub Issue: clash-verge-rev #467 - DNS 解析失败,与 DIRECT 路由域类似
- GitHub Issue: vernesong/OpenClash #4244 - Clash 中的 DNS 解析问题
- Clash 文档:规则和 DNS 行为