2021-04-16 | UNLOCK

解決 Clash 節點能上測速卻超時的問題

修改 DNS - 解決 80% 超時問題

如果經常出現全部節點測速失敗,首先要檢查 Clash 的 DNS 配置。許多 Clash 模版會在 fallback 使用海外 DoH / DoT 解析 geoip 非 CN(也就是海外)的域名,直連的 VPS 本身的域名也會用到 fallback 裡面的 DNS 進行解析。由於最近海外 DoH / DoT 屢遭干擾,經常導致 fallback 解析失敗。將 fallback 地址改成國內可用的 DNS 可解決,為最大可能避免污染,建議使用國內 DoH 或自建 DoH。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
default-nameserver:
- 119.29.29.29
- 223.5.5.5
nameserver:
# 國內用公開 dns53 就夠了
- 119.29.29.29
- 223.5.5.5
- 114.114.114.114
fallback:
# 國外用 doh
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
#- https://xxxx.com/dns-query 自建 DoH

修改測速地址 - 解決 95% 超時問題

修改完 DNS 後,應該大部分節點的測速都正常了,如果還有少數節點測速失敗,可以將測速用的地址從 http://www.gstatic.com/generate_204 改成 http://www.msftconnecttest.com/connecttest.txt

改完之後,原本紅色的節點即可正常測速。

起因

一般常用來測速的地址 http://www.gstatic.com/generate_204,在有些落地機搭配 Clash 使用的時候,會發生超時,導致 Clash 顯示 fail。

我的檢測方法如下

  1. 在落地機上分別運行 dig @8.8.8.8 www.gstatic.comdig @9.9.9.9 www.gstatic.com,發現得到兩個不同的 IP (172.217.160.67 和 216.58.197.163)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    ; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> @8.8.8.8 www.gstatic.com
    ; (1 server found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47741
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 512
    ;; QUESTION SECTION:
    ;www.gstatic.com. IN A

    ;; ANSWER SECTION:
    www.gstatic.com. 299 IN A 172.217.160.67

    ;; Query time: 8 msec
    ;; SERVER: 8.8.8.8#53(8.8.8.8)
    ;; WHEN: Fri Apr 16 00:39:07 CDT 2021
    ;; MSG SIZE rcvd: 60

    ; <<>> DiG 9.11.5-P4-5.1+deb10u3-Debian <<>> @9.9.9.9 www.gstatic.com
    ; (1 server found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9669
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1232
    ;; QUESTION SECTION:
    ;www.gstatic.com. IN A

    ;; ANSWER SECTION:
    www.gstatic.com. 262 IN A 216.58.197.163

    ;; Query time: 44 msec
    ;; SERVER: 9.9.9.9#53(9.9.9.9)
    ;; WHEN: Fri Apr 16 00:40:07 CDT 2021
    ;; MSG SIZE rcvd: 60
  2. 運行 curl -v www.gstatic.com/generate_204,發現當使用 172.217.160.67 時,會出現嚴重超時
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    * Expire in 0 ms for 6 (transfer 0x56230399afb0)
    * Expire in 1 ms for 1 (transfer 0x56230399afb0)
    ... 略
    * Expire in 2 ms for 1 (transfer 0x56230399afb0)
    * Expire in 2 ms for 1 (transfer 0x56230399afb0)
    * Expire in 2 ms for 1 (transfer 0x56230399afb0)
    * Trying 172.217.160.67...
    * TCP_NODELAY set
    * Expire in 149996 ms for 3 (transfer 0x56230399afb0)
    * Expire in 200 ms for 4 (transfer 0x56230399afb0)
    * Connected to www.gstatic.com (172.217.160.67) port 80 (#0)
    > GET /generate_204 HTTP/1.1
    > Host: www.gstatic.com
    > User-Agent: curl/7.64.0
    > Accept: */*
    >
    < HTTP/1.1 204 No Content
    < Content-Length: 0
    < Date: Fri, 16 Apr 2021 05:42:56 GMT
    <
    * Connection #0 to host www.gstatic.com left intact
    不管試幾次都會刷出 Expire in 149996 ms for 3
  3. 若使用另一組 IP 或是其他地址則不會超時
    神奇的是,同樣使用 http://www.gstatic.com/generate_204 測試連接性,Shadowrokcet 卻較少出現測速失敗的 bug,推測是 Clash 的特性。至於發生的原因嘛...

ps. TG 網友推測,可能是因為 Google IP 庫把部分海外 IP 識別為大陸,連帶影響 gstatic.com 的解析結果,供參。

Reference

評論加載中