[Bug] dns-hijack没有按预期工作
验证步骤
- [X] 我已经阅读了 文档,了解所有我编写的配置文件项的含义,而不是大量堆砌看似有用的选项或默认值。
- [X] 我仔细看过 文档 并未解决问题
- [X] 我已在 Issue Tracker 中寻找过我要提出的问题,并且没有找到
- [X] 我是中文用户,而非其他语言用户
- [X] 我已经使用最新的 Alpha 分支版本测试过,问题依旧存在
- [X] 我提供了可以在本地重现该问题的服务器、客户端配置文件与流程,而不是一个脱敏的复杂客户端配置文件。
- [X] 我提供了可用于重现我报告的错误的最简配置,而不是依赖远程服务器或者堆砌大量对于复现无用的配置等。
- [X] 我提供了完整的日志,而不是出于对自身智力的自信而仅提供了部分认为有用的部分。
- [X] 我直接使用 Mihomo 命令行程序重现了错误,而不是使用其他工具或脚本。
操作系统
Linux
系统版本
Arch Linux
Mihomo 版本
Mihomo Meta alpha-9de9f1e linux amd64 with go1.23.3 Wed Nov 27 03:05:48 UTC 2024 Use tags: with_gvisor
配置文件
log-level: 'debug'
mode: 'rule'
ipv6: true
dns:
enable: true
ipv6: true
enhanced-mode: 'fake-ip'
respect-rules: false
default-nameserver: ['system']
nameserver:
- 'tcp://8.8.8.8#PROXY'
- 'tcp://1.1.1.1#PROXY'
direct-nameserver: ['system']
proxy-server-nameserver: ['system']
sniffer:
enable: false
tun:
enable: true
stack: 'gvisor'
auto-route: true
auto-detect-interface: true
strict-route: false
dns-hijack: ['udp://any:1234']
proxies:
- name: 'PROXY'
type: 'ss'
server: '***'
port: ***
udp: true
cipher: "none"
password: ""
rules:
- 'MATCH,PROXY'
描述
dns-hijack开启后,总是会拦截所有的DNS流量,不管是不是跟设置的值匹配。
一开始我写的是只拦截udp53端口,但发现tcp的也被拦截了。后来发现不管我怎么写都没用,甚至随便写个端口都会被拦截。
现在我验证的情况是,只有空列表[]不拦截,默认值或者随便写个值都是拦截全部。
重现方式
用上面的配置文件启动,然后用dig或者drill发dns请求。 注意看下面日志的最后两行,DNS都被拦截了,但不跟设置匹配。
日志
INFO[2024-12-01T22:05:14.928400646+08:00] Start initial configuration in progress
INFO[2024-12-01T22:05:14.92848972+08:00] Geodata Loader mode: memconservative
INFO[2024-12-01T22:05:14.928496018+08:00] Geosite Matcher implementation: succinct
INFO[2024-12-01T22:05:14.928635828+08:00] Initial configuration complete, total time: 0ms
INFO[2024-12-01T22:05:14.939956034+08:00] Sniffer is closed
WARN[2024-12-01T22:05:14.940701466+08:00] [TUN] default interface changed by monitor, => enp6s0
INFO[2024-12-01T22:05:14.944791588+08:00] [TUN] Tun adapter listening at: Meta([198.18.0.1/30],[fdfe:dcba:9876::1/126]), mtu: 9000, auto route: true, auto redir: false, ip stack: gVisor
INFO[2024-12-01T22:05:14.947078695+08:00] Start initial Compatible provider default
DEBU[2024-12-01T22:05:16.946651995+08:00] [Rule] use default rules
DEBU[2024-12-01T22:05:16.946725416+08:00] [DNS] system dns update to [192.168.0.1 2408:8270:a30:ef60::1]
DEBU[2024-12-01T22:05:16.946736892+08:00] [DNS] resolve ***** A from system(udp://192.168.0.1:53,udp://[2408:8270:a30:ef60::1]:53)
DEBU[2024-12-01T22:05:16.946744767+08:00] [DNS] resolve ***** A from udp://192.168.0.1:53
DEBU[2024-12-01T22:05:16.946737617+08:00] [DNS] resolve ***** AAAA from system(udp://192.168.0.1:53,udp://[2408:8270:a30:ef60::1]:53)
DEBU[2024-12-01T22:05:16.946773075+08:00] [DNS] resolve ***** A from udp://[2408:8270:a30:ef60::1]:53
DEBU[2024-12-01T22:05:16.946799602+08:00] [DNS] resolve ***** AAAA from udp://192.168.0.1:53
DEBU[2024-12-01T22:05:16.946818392+08:00] [DNS] resolve ***** AAAA from udp://[2408:8270:a30:ef60::1]:53
DEBU[2024-12-01T22:05:16.95236055+08:00] [DNS] ***** --> [*****] A from udp://[2408:8270:a30:ef60::1]:53
DEBU[2024-12-01T22:05:16.952367544+08:00] [DNS] ***** --> [*****] A from udp://192.168.0.1:53
DEBU[2024-12-01T22:05:16.952372617+08:00] [DNS] ***** --> [*****] A from system(udp://192.168.0.1:53,udp://[2408:8270:a30:ef60::1]:53)
DEBU[2024-12-01T22:05:16.95247704+08:00] [DNS] ***** --> [*****] AAAA from udp://[2408:8270:a30:ef60::1]:53
DEBU[2024-12-01T22:05:16.952488729+08:00] [DNS] ***** --> [*****] AAAA from udp://192.168.0.1:53
DEBU[2024-12-01T22:05:16.952499155+08:00] [DNS] ***** --> [*****] AAAA from system(udp://192.168.0.1:53,udp://[2408:8270:a30:ef60::1]:53)
DEBU[2024-12-01T22:05:27.666390928+08:00] [DNS] hijack udp:192.168.0.1:53 from 198.18.0.1:49624
DEBU[2024-12-01T22:05:31.152186763+08:00] [DNS] hijack tcp:192.168.0.1:53
2.0.3-alpha dns 也沒辦法關掉,看來目前DNS部分還有些問題
我也关注到了这个问题,这对我非常重要,急待解决
@lonble 可以试试我修改的这版,顺便帮忙测试下有没有问题,直接下载Artifacts就行
@lonble 可以试试我修改的这版,顺便帮忙测试下有没有问题,直接下载Artifacts就行
@ForestL18 协议和IP匹配没问题,端口匹配不生效
你劫持链接里是填的any+随意端口吗? 如果是的话是预料中的,对于any只劫持53端口
如果是的话是预料中的,对于any只劫持53端口
这个行为很奇怪
如果是的话是预料中的,对于any只劫持53端口
这个行为很奇怪
如果对任意地址指定一个端口劫持的话,很容易误伤导致某些应用无法正常动作
如果是的话是预料中的,对于any只劫持53端口
这个行为很奇怪
劫持的逻辑是 劫持指定的IP:port或者劫持任意IP的53端口
如果对任意地址指定一个端口劫持的话,很容易误伤导致某些应用无法正常动作
这是写配置的人应该注意的问题,这样的隐式操作反而会让配置和实际行为不符,理解不了