libnyanpasu / nyanpasu-service

A cross platform privileged service for Nyanpasu
23 stars 0 forks source link

MacOS 14.4 下 Tun 模式无法自动设置 DNS #26

Open EXHades opened 7 months ago

EXHades commented 7 months ago

复现步骤 / Step to reproduce

macOS14.4 下仅连接 Wi-Fi

配置:

tun:
  enable: true
  stack: mixed
  dns-hijack:
    - any:53
  auto-route: true
  auto-detect-interface: true

dns:
  enable: true
  listen: 127.0.0.1:1053
  ipv6: false
  use-hosts: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16

预期行为 / Expected behaviour

GUI 启用 Tun 模式时应自动寻找当前出口网卡为其设置 DNS (198.18.0.2),使 fake-ip 正常生效

实际行为 / Actual Behaviour

启动后网卡 DNS 未修改

应用日志 / App logs

{"timestamp":"2024-03-23T19:29:19.613156Z","level":"DEBUG","fields":{"message":"try to set system dns","log.target":"app","log.module_path":"clash_verge::core::clash::core","log.file":"tauri/src/core/clash/core.rs","log.line":126},"target":"app","filename":"tauri/src/core/clash/core.rs","line_number":126}
{"timestamp":"2024-03-23T19:29:19.643285Z","level":"DEBUG","fields":{"message":"Some(Stdout(\"** Error: Command requires admin privileges.\\n\"))","log.target":"app","log.module_path":"clash_verge::core::clash::core","log.file":"tauri/src/core/clash/core.rs","log.line":134},"target":"app","filename":"tauri/src/core/clash/core.rs","line_number":134}

备注 / Addition details

试着手动执行 networksetup, 14.3+ 开始似乎需要 sudo 才能修改 DNS 了?

networksetup -setdnsservers "Wi-Fi" 192.168.0.2
# ** Error: Command requires admin privileges.

Clash Nyapasu 版本号 / Clash Nyapasu

1.5.1-alpha+1afa4c4_x64

Clash 核心及其版本号 / Clash core and version

V1.18.1 Meta

是否为 Pre-release / Is pre-release version

1afa4c4

操作系统及版本 / OS version

macOS 14.4

自查步骤 / Verify steps

EXHades commented 7 months ago

不止 DNS 无法设置, 设置系统代理 也不行。

日志里没有告警也没有报错,看了下源码,似乎没输出 set_system_proxy 相关的日志

看样子也是通过 networksetup,手动执行命令发现都是权限问题

EXHades commented 7 months ago

也许需要一个类似 ClashX Proxy Helper 去负责设置网络配置?

image

greenhat616 commented 7 months ago

这可能得依赖我们计划在 1.6.x 中引入的跨平台服务模式。 https://github.com/LibNyanpasu/clash-nyanpasu-service/issues/4

greenhat616 commented 3 months ago

目前跨平台的最小化提权服务已经实现。

现在的问题是修改 DNS 需要主动探测用户活跃的网卡。 以 Windows 为例,用户侧可能使用了 WiFi 连接,又存在 Ethernet 连接,同时还安装一对加速器服务,比如说 UU;亦使用了虚拟机,例如 Hyper-V,他们都创建了网络设备,而且都有可能 Up(在线)。 我们需要找到一个策略来探测出默认的出站设备,然后给他应用 DNS。 此外,假设用户使用拨号连接,可能情况又会有所不同。

因为没有确切的思路,因此 1.6.0 不会包含此功能。

如果有思路的话,欢迎交流