MetaCubeX / mihomo

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

同样一个 warp 节点,在 wireguard 上能用,但在 clash.meta 却不能 #448

Open fscarmen opened 1 year ago

fscarmen commented 1 year ago

所有环境都是相同的,电信网络 + mac amd 机器,看油管,meta 完全没有流量的, reserved 我设与不设均没有影响,求解。

在 wireguard 是这样设置的

[Interface]
PrivateKey = oJDoX3XycAEs7GAMxWR8iq7egbTVa3aqsLdbv7dDl0E=
Address = 172.16.0.2/32, 2606:4700:110:83b9:cf3e:6062:5934:ae25/128
DNS = 8.8.8.8, 1.1.1.1
MTU = 1280

[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 162.159.193.10:2408

在 meta 里是这样设置的

  - {name:  warp, type: wireguard, server: 162.159.193.10, port: 2408, ip: 172.16.0.2, ipv6: 2606:4700:110:83b9:cf3e:6062:5934:ae25, public-key: bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=, private-key: oJDoX3XycAEs7GAMxWR8iq7egbTVa3aqsLdbv7dDl0E=, mtu: 1280, udp: true, reserved: [219,212,139] }
fscarmen commented 1 year ago

在大佬 ⑥ 哥的帮助下解决了,是 DNS污染了,clash 直接发污染的 IP 去 warp,自然访问不了的问题,与节点无关 我原来用的很旧很旧的模板是这样的

dns:
  enable: true
  listen: 0.0.0.0:53
  ipv6: true
  default-nameserver:
    - 114.114.114.114
    - 223.5.5.5
  enhanced-mode: redir-host
  nameserver:
    - https://dns.alidns.com/dns-query
    - https://223.5.5.5/dns-query
  fallback:
    - 114.114.114.114
    - 223.5.5.5

现改为这样就可以了

dns:
    enable: true
    ipv6: false
    default-nameserver: [223.5.5.5, 119.29.29.29]
    enhanced-mode: fake-ip
    fake-ip-range: 198.18.0.1/16
    use-hosts: true
    nameserver: ['https://doh.pub/dns-query', 'https://dns.alidns.com/dns-query']
    fallback: ['https://doh.dns.sb/dns-query', 'https://dns.cloudflare.com/dns-query', 'https://dns.twnic.tw/dns-query', 'tls://8.8.4.4:853']
    fallback-filter: { geoip: true, ipcidr: [240.0.0.0/4, 0.0.0.0/32] }
q1uxu commented 1 year ago

同样使用wireguard客户端能访问vpn,用clash就不行。楼主你是怎么解决问题的?只改了DNS配置吗?我也改了配置和清除了DNS,还是访问不了。

Patrick-Ze commented 1 year ago

@fscarmen 我也遇到了同样的问题,但是我已经改成你修改后的dns模板还是不行,怀疑是WARP账户类型的问题。能否请教一下你的WARP账户是哪一种呀?(我的是Teams)

dumplingdumpling commented 1 year ago

用wgcf生成wireguard配置文件填到clash配置文件以后,测速是绿色的有结果的,但是访问google等网站会出现https错误,有人知道为什么吗

imm0jwr commented 1 year ago

用wgcf生成wireguard配置文件填到clash配置文件以后,测速是绿色的有结果的,但是访问google等网站会出现https错误,有人知道为什么吗

udp: false,reserved不填,clash模式选规则,TUN模式关闭,就可以了。

kokikoku commented 1 year ago

用wgcf生成wireguard配置文件填到clash配置文件以后,测速是绿色的有结果的,但是访问google等网站会出现https错误,有人知道为什么吗

udp: false,reserved不填,clash模式选规则,TUN模式关闭,就可以了。

速度如何啊。

MFWT commented 1 year ago

用wgcf生成wireguard配置文件填到clash配置文件以后,测速是绿色的有结果的,但是访问google等网站会出现https错误,有人知道为什么吗

udp: false,reserved不填,clash模式选规则,TUN模式关闭,就可以了。

速度如何啊。

先说结论:速度很快,延迟提升察觉不出来(如果你不是很在乎那几毫秒的延迟的话),用户态WireGuard在一般用途而言并不比内核态WireGuard差多少

贴一下我的配置,成功实现既定目标,供参考(大概就是WireGuard节点当作普通SS/V2代理节点那样,配合机场做落地用)

  - name: "WireGuard测试"
    type: wireguard
    server: YOUR_WireGuard_SERVER
    port: YOUR_WireGuard_PORT
    udp: true
    ip:  YOUR_WireGuard_PRIVATE_IP
    mtu:  YOUR_WireGuard_MTU  #做落地节点用,建议调小些,比如1300
    public-key:  YOUR_WireGuard_PUBKEY
    pre-shared-key:  YOUR_WireGuard_PSK
    private-key:  YOUR_WireGuard_PRIKEY
    remote-dns-resolve: true
    dialer-proxy:  ANOTHER_Proxy_node_as_a_tunnel
    dns: [ 1.1.1.1, 8.8.8.8 ]

上述配置的目标是:

ClashMeta ---> 机场节点 ----> 自己的落地节点 ----> 互联网

这个方案有个暗藏的好处:『自己的落地节点』可以使用大厂VPN的WireGuard节点,比如人尽皆知的Cloudflare WARP,比如PIA VPN什么的,能提供手配WireGuard的,也算是节省成本又能获取全球节点的一种方式

如果现在落地节点是自建服务器的,不妨一试

MFWT commented 1 year ago

顺带一提,mtu选项文档中并未提及,实际是否有用并不清楚,请酌情添加或测试

fscarmen commented 1 year ago

ClashMeta ---> 机场节点 ----> 自己的落地节点 ----> 互联网

这样会过机场节点的吗? 我理解是用clashmeta通过上述配置连接了warp,然后本地→meta→warp→互联网

MFWT commented 1 year ago

这样会过机场节点的吗? 我理解是用clashmeta通过上述配置连接了warp,然后本地→meta→warp→互联网


注意dialer-proxy这个配置项,这里指定另一个代理或者代理组,就会通过那个代理来连接到WG服务器

fscarmen commented 1 year ago

这样会过机场节点的吗? 我理解是用clashmeta通过上述配置连接了warp,然后本地→meta→warp→互联网

过 注意dialer-proxy这个配置项,这里指定另一个代理或者代理组,就会通过那个代理来连接到WG服务器

学习了,谢谢。如果想本地直接连warp,是不是只需要把 dialer-proxy: ANOTHER_Proxy_node_as_a_tunnel 去掉可以了?

MFWT commented 1 year ago

学习了,谢谢。如果想本地直接连warp,是不是只需要把 dialer-proxy: ANOTHER_Proxy_node_as_a_tunnel 去掉可以了?

是的,但是直连效果可能不佳,看情况选吧

MelodyUSA commented 11 months ago

@MFWT 你好,请教一下,mtureserved 字段,这两个配置项到底是干嘛的?在 wireguard 配置中是做什么用的?? 以及在 peers 配置项下边,allowed_ips 是做什么的? 为什么peers配置下的子项,会覆蓋上一层的配置项呢? wireguard 的 ip, ports, server,reserved 这些配置写在上层,和配置在 peers下有什么差别??

我用 Surge 搭配 BoxJs 脚本通过中间人的方式得到了 warp steam 的 wireguard 配置,对应写到 yaml 中,并且用dialer-proxy指定中继。连接效果非常好。 Surge 抓取到的配置信息非常完整,还有endpointreserved之类的,因为我不了解 wireguard,所以不知道要不要写。 clash 这边的 server 项是不是就是对应 wireguard 配置中的 endpoint ? 存粹想学习了解一下。请多指教🙇

MFWT commented 11 months ago

@MFWT 你好,请教一下,mtureserved 字段,这两个配置项到底是干嘛的?在 wireguard 配置中是做什么用的?? 以及在 peers 配置项下边,allowed_ips 是做什么的? 为什么peers配置下的子项,会覆蓋上一层的配置项呢? wireguard 的 ip, ports, server,reserved 这些配置写在上层,和配置在 peers下有什么差别??

我用 Surge 搭配 BoxJs 脚本通过中间人的方式得到了 warp steam 的 wireguard 配置,对应写到 yaml 中,并且用dialer-proxy指定中继。连接效果非常好。 Surge 抓取到的配置信息非常完整,还有endpointreserved之类的,因为我不了解 wireguard,所以不知道要不要写。 clash 这边的 server 项是不是就是对应 wireguard 配置中的 endpoint ? 存粹想学习了解一下。请多指教🙇

  1. MTU字段似乎在clashmeta中并没有实现。在原版wg当中,MTU用于设置分片大小,reserved字段很少使用,但是部分VPN提供商(比如CF WARP)会将其作为特殊用途,比如路由ID什么的,这是私有实现了。
  2. allowed_ips的含义和原版wireguard配置是一样的,用于指定哪些IP可以通过VPN(请注意,允许通过和帮你添加路由表是两个行为,即使是在原版wireguard中也可以指定table=off来让他不添加路由表)
  3. 这个问题的起因是wireguard并没有完整意义上的用户验证机制(有是有,就是那个私钥,但是总归和OpenVPN那种可以用户名密码认证的不一样),因此可能会出现这个情况:你有多个wireguard服务器,他们的公钥都不同(正常的,因为服务器的私钥必须不同),但是都拥有你这个用户,也就意味着你需要用同一个私钥去认证连接这几个服务器,直观表现就是其他参数可以在peer中重新配置,但是private_key不行
  4. 是的,Server就是endpoint,叫法不同罢了
MelodyUSA commented 11 months ago
  1. MTU字段似乎在clashmeta中并没有实现。在原版wg当中,MTU用于设置分片大小,reserved字段很少使用,但是部分VPN提供商(比如CF WARP)会将其作为特殊用途,比如路由ID什么的,这是私有实现了。

是不是因为原版 wiregurad 是跑在网络层的真VPN,所以基于自身协议设计的需要,可以调整控制 MTU 的大小,但 clash.meta 的 wireguard 协议 是用代码实现的,而不是调用 wireguard 内核,所以仍然跑在网络层,因此实现不了呢??又或是实现方式太麻烦,太迂回,于是选择了不实现?。但既然没实现,为什么配置项又要有呢...?难道是交给 peer 节点的?客户端实现不了,但服务器端可以实现...(基于我浅薄的网路工程理解瞎猜的,说的不对请多指教)

ps. 谢谢大侠那热心回复,学习了~

MFWT commented 11 months ago
  1. MTU字段似乎在clashmeta中并没有实现。在原版wg当中,MTU用于设置分片大小,reserved字段很少使用,但是部分VPN提供商(比如CF WARP)会将其作为特殊用途,比如路由ID什么的,这是私有实现了。

是不是因为原版 wiregurad 是跑在网络层的真VPN,所以基于自身协议设计的需要,可以调整控制 MTU 的大小,但 clash.meta 的 wireguard 协议 是用代码实现的,而不是调用 wireguard 内核,所以仍然跑在网络层,因此实现不了呢??又或是实现方式太麻烦,太迂回,于是选择了不实现?。但既然没实现,为什么配置项又要有呢...?难道是交给 peer 节点的?客户端实现不了,但服务器端可以实现...(基于我浅薄的网路工程理解瞎猜的,说的不对请多指教)

ps. 谢谢大侠那热心回复,学习了~

  1. 这个我也不清楚,可能是有实现『此值可变』但没写出,也有可能是根本没有实现,固定为了一个值。反正文档是没有列出这个配置项的。
  2. MTU是WireGuard的一个重要项,平时不用设置只是因为有默认值罢了
  3. 原因同1,因为没有写出,但是原本配置确实有,就瞎猫碰见死耗子试一下,反正好了就皆大欢喜,不好也没有损失