mihomo icon indicating copy to clipboard operation
mihomo copied to clipboard

[Bug] dns-hijack没有按预期工作

Open lonble opened this issue 1 year ago • 9 comments

验证步骤

  • [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

lonble avatar Dec 01 '24 14:12 lonble

2.0.3-alpha dns 也沒辦法關掉,看來目前DNS部分還有些問題

sam0324sam avatar Dec 09 '24 17:12 sam0324sam

我也关注到了这个问题,这对我非常重要,急待解决

jasnma avatar Dec 10 '24 09:12 jasnma

@lonble 可以试试我修改的这版,顺便帮忙测试下有没有问题,直接下载Artifacts就行

ForestL18 avatar Dec 12 '24 15:12 ForestL18

@lonble 可以试试我修改的这版,顺便帮忙测试下有没有问题,直接下载Artifacts就行

@ForestL18 协议和IP匹配没问题,端口匹配不生效

lonble avatar Dec 14 '24 07:12 lonble

@lonble 可以试试我修改的这版,顺便帮忙测试下有没有问题,直接下载Artifacts就行

@ForestL18 协议和IP匹配没问题,端口匹配不生效

你劫持链接里是填的any+随意端口吗? 如果是的话是预料中的,对于any只劫持53端口

ForestL18 avatar Dec 14 '24 10:12 ForestL18

如果是的话是预料中的,对于any只劫持53端口

这个行为很奇怪

lonble avatar Dec 15 '24 08:12 lonble

如果是的话是预料中的,对于any只劫持53端口

这个行为很奇怪

如果对任意地址指定一个端口劫持的话,很容易误伤导致某些应用无法正常动作

jasnma avatar Dec 15 '24 08:12 jasnma

如果是的话是预料中的,对于any只劫持53端口

这个行为很奇怪

劫持的逻辑是 劫持指定的IP:port或者劫持任意IP的53端口

ForestL18 avatar Dec 15 '24 08:12 ForestL18

如果对任意地址指定一个端口劫持的话,很容易误伤导致某些应用无法正常动作

这是写配置的人应该注意的问题,这样的隐式操作反而会让配置和实际行为不符,理解不了

lonble avatar Dec 15 '24 16:12 lonble