MetaCubeX / mihomo

A simple Python Pydantic model for Honkai: Star Rail parsed data from the Mihomo API.
https://wiki.metacubex.one
MIT License
16.6k stars 2.66k forks source link

[Bug] 在 Linux 系统上使用TUN模式开启内核后IPV6入站连接无法响应 #658

Closed ERR0RPR0MPT closed 1 year ago

ERR0RPR0MPT commented 1 year ago

Verify steps

Clash version

Clash Meta v1.15.0 linux amd64 with go1.20.5

What OS are you seeing the problem on?

No response

Clash config

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
external-controller: "192.168.0.10:6060"
external-ui: "ui"
secret: "sss"
ipv6: true
dns:
    enable: true
    listen: 0.0.0.0:53
    enhanced-mode: fake-ip
    nameserver:
      - 114.114.114.114
      - 223.5.5.5
      - 8.8.8.8
    fallback: []
    fake-ip-filter:
      - +.stun.*.*
      - +.stun.*.*.*
      - +.stun.*.*.*.*
      - +.stun.*.*.*.*.*
      - "*.n.n.srv.nintendo.net"
      - +.stun.playstation.net
      - xbox.*.*.microsoft.com
      - "*.*.xboxlive.com"
      - "*.msftncsi.com"
      - "*.msftconnecttest.com"
      - WORKGROUP
tun:
    enable: true
    stack: gvisor
    auto-route: true
    auto-detect-interface: true
    dns-hijack:
      - any:53

proxies:
    ...

proxy-groups:
  - name: WVWV
    type: select
    proxies:
      - 智能选择
      - 软路由内部中继
      - 软路由外部中继
      - WARP自动选择
      - 香港节点-Reality
      - 香港节点-gRPC
      - 香港节点-VMess
      - WARP1
      - DIRECT
  - name: 智能选择
    interval: 60
    proxies:
      - 香港节点-Reality
      - 香港节点-gRPC
      - 香港节点-VMess
      - WARP自动选择
    type: url-test
    url: http://www.gstatic.com/generate_204
  - name: WARP自动选择
    interval: 60
    proxies:
      - WARP1
    type: url-test
    url: http://www.gstatic.com/generate_204

rules:
  - DOMAIN-SUFFIX,smtp,DIRECT
  - DOMAIN-KEYWORD,aria2,DIRECT
  - DOMAIN-SUFFIX,acl4.ssr,DIRECT
  - DOMAIN-SUFFIX,ip6-localhost,DIRECT
  - DOMAIN-SUFFIX,ip6-loopback,DIRECT
  - DOMAIN-SUFFIX,local,DIRECT
  - DOMAIN-SUFFIX,localhost,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,100.64.0.0/10,DIRECT,no-resolve
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,198.18.0.0/16,DIRECT,no-resolve
  - IP-CIDR6,::1/128,DIRECT,no-resolve
  - IP-CIDR6,fc00::/7,DIRECT,no-resolve
  - IP-CIDR6,fe80::/10,DIRECT,no-resolve
  - IP-CIDR6,fd00::/8,DIRECT,no-resolve

  - GEOIP,CN,DIRECT
  - MATCH,WVWV

Clash log

No response

Description

在 Linux 上使用上述版本,使用 system 和 gvisor 模式出现的问题一样

btw,在 Windows 上使用相同配置开启TUN模式后可以使用IPV6访问对应开放的端口

如果需要的话我会尝试抓包看看

doveccl commented 1 year ago

+1 遇到同样的问题(能 ping 但是 tcp 不通),开始以为是 ipv6-pd 不能挂 br0 上,后来测试发现 ppp0 上的 /128 地址也访问不通,关掉 clash tun 就都能访问了

10ta commented 1 year ago

同样问题

ccmuyuu commented 1 year ago

@10ta 正常现象)

wy580477 commented 1 year ago

sing-tun 就是这样的,打开 auto-route 以后外部 v6 流量无法入站。

解决办法是,关掉 auto-route,自己搓路由表。

ERR0RPR0MPT commented 1 year ago

sing-tun 就是这样的,打开 auto-route 以后外部 v6 流量无法入站。

解决办法是,关掉 auto-route,自己搓路由表。

想请教一下,Meta 是修改了 TUN 的实现吗,我使用原版内核开 auto-route 是可以 IPV6 入站的,既然如此为什么要砍掉这个功能呢?

xishang0128 commented 1 year ago

tun可以添加 inet6-address: null来解决(这将不会添加ipv6地址以及路由ipv6)

ERR0RPR0MPT commented 1 year ago

tun可以添加 inet6-address: null来解决(这将不会添加ipv6地址以及路由ipv6)

已解决,感谢

heygo1345678 commented 1 year ago

tun可以添加 inet6-address: null来解决(这将不会添加ipv6地址以及路由ipv6)

已解决,感谢

inet6-address: null这种tun是不用ipv6了,这。。。 tun开启auto-route情况下,两句策略路由就可以正常入站,优先级写个pref 4000就行。我还觉得是好事呢,入站防火墙以外,还多一道屏障。 Tproxy也是一样的,默认很多教程没考虑入站,写好防火墙规则就可以入站

mx4994 commented 1 year ago

inet6-address: null这种tun是不用ipv6了,这。。。 tun开启auto-route情况下,两句策略路由就可以正常入站,优先级写个pref 4000就行。我还觉得是好事呢,入站防火墙以外,还多一道屏障。 Tproxy也是一样的,默认很多教程没考虑入站,写好防火墙规则就可以入站

能否详细说说咋写策略路由让IPV6正常入站?

10ta commented 1 year ago

两句策略路由就可以正常入站,优先级写个pref 4000就行。

请教这两句如何写 @heygo1345678

Binly42 commented 1 year ago

tun可以添加 inet6-address: null来解决(这将不会添加ipv6地址以及路由ipv6)

这个配置项好像还不在文档里, 倒是:

我实测反正确实直接加进 顶层的tun 下面就可以了


clash-verge 的话, clash-verge.yaml里反正最终是会像这样:

...

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
  - 114.114.114.114
  - 223.5.5.5
  - 8.8.8.8
  fallback: []
tun:
  inet6-address: null
  enable: true
  stack: gvisor
  dns-hijack:
  - any:53
  auto-route: true
  auto-detect-interface: true
proxies:

...
5l2 commented 3 weeks ago

遇到了相同问题。

内核版本:

$ /opt/mihomo-party/resources/sidecar/mihomo-alpha -v
Mihomo Meta alpha-ca3f1eb linux amd64 with go1.23.2 Sat Oct 12 00:29:44 UTC 2024
Use tags: with_gvisor

这是策略路由的问题。

inet6-address: null

只是缓解了问题,还使得 IPv6 包不能走代理。

在我的测试中,程序添加了以下策略路由:

$ ip -6 rule list
0:      from all lookup local
9000:   not from all dport 53 lookup main suppress_prefixlength 0
9000:   from all ipproto ipv6-icmp goto 9010
9001:   from all iif Mihomo goto 9010
9001:   from ::/1 iif lo goto 9010 [1]
9001:   from 8000::/1 iif lo goto 9010 [2]
9002:   from fdfe:dcba:9876::/126 iif lo lookup 2022
9003:   from all lookup 2022
9010:   from all nop
32766:  from all lookup main

此时 IPv6 地址无法连通:

$ nc -v 2400:3200:baba::1 443
Ncat: Version 7.92 ( https://nmap.org/ncat )
^C

同时抓包。可观察到 2400:3200:baba::1 的回包没有被正确交付,因而 TCP 连接无法被建立;当然也不会产生相关日志。

在删除 [1] [2] 两条策略路由后,问题可完美解决:

sudo ip -6 rule del from ::/1 iif lo
sudo ip -6 rule del from 8000::/1 iif lo

此后,连通性恢复正常;内核也可产生相关日志。

$ nc -v 2400:3200:baba::1 443
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 2400:3200:baba::1:443.
^C

@ERR0RPR0MPT,请问能否 reopen 此 issue?这样就不用再提重复 issue 了。