本文記錄個人對 Clash_Meta 一些設定和工作原理的理解

虛空終端 Docs

DNS 解析

嗅探是在輸入前完成的,因此無法使用規則

image-20240714221211257.png

../../IT/Utility/Excalidraw/openclashDNS.excalidraw

nameserver 解出為國外的位址,或者被污染的位址,或命中fallback-filter 中設定,決則會採用 fallback 的解出結果,,然後再確定是否代理 Fallback 組的 DNS 查詢是由代理伺服器完成的,因為 Fallback 組的作用是處理被牆網站的 DNS 查詢。而 Nameserver 組的 DNS 查詢則可以由使用者自行設定,解析會按照預設 DNS 解析的方式進行解析,即先查詢本機快取、再查詢 hosts 檔案、一般情況下是由本機 DNS 伺服器或者公共 DNS 伺服器進行解析的或系統預設的 DNS 伺服器進行解析

image-20240719102344318.png ipleak 不在規則中,進行 DNS 解析

首先有兩組上游 DNS 設定,分別是 nameserver 和 fallback ,在 redir-host 模式下,當用戶端 DNS 請求到達 clash 時,其會同時向兩組中的 DNS 伺服器並行請求,並以 nameserver 中最先返回的結果作為依據,按照 fallback-filter 的設定情況,決定是否需要使用 fallback 的結果作為最終的解析結果,供後續規則判斷使用。

遇到 geoip 時, 會為了分流而發起 DNS 請求, 設定了 DNS 伺服器並且其他裝置使用此 DNS 伺服器進行解析時,Clash 工作流程如下: 從 nameserver 和 fallback 裡的 DNS 進行並行請求,並且選取 nameserver 中最先回應的結果作為基準使用 GEOIP 判斷此 IP 的所屬區域,如果屬於國內(CN)或保留位址則直接回應給用戶端其他情況則把 fallback 中的結果回應給用戶端

缺點: 也就意味這存取規則中沒有的國外網站,會透過 nameserver 查詢位址,如果恰巧被污染為 cn (一般被污染都不會被污染為國內的),則無法存取,絕大多數情況下不會被污染為 cn,走 fallback, 所以所有匹配為 GeoIP: CN 和 match 的網站會發生 DNS 洩漏

image-20230317092242314.png

fallback-filter:
  geoip: true    #為真時,不匹配為geoip CN的規則的使用fallback返回結果
  geoip-code: CN
  geosite:      #【Meta專屬】設定geosite某分類使用fallback返回結果
      - gfw 
  ipcidr:      #列表中的ip使用fallback返回解析結果
    - 0.0.0.0/8
    - 10.0.0.0/8
    - 100.64.0.0/10
    - 127.0.0.0/8
    - 169.254.0.0/16
    - 172.16.0.0/12
    - 192.0.0.0/24
    - 192.0.2.0/24
    - 192.88.99.0/24
    - 192.168.0.0/16
    - 198.18.0.0/15
    - 198.51.100.0/24
    - 203.0.113.0/24
    - 224.0.0.0/4
    - 240.0.0.0/4
    - 255.255.255.255/32
  domain:       #列表中的網域使用fallback返回解析結果
    - "+.msftconnecttest.com"
    - "+.msftncsi.com"

../../IT/Utility/Excalidraw/Drawing 2023-01-02 14.24.16.excalidraw

路由規則

openclash 繞過中國 ip 是路由表實作的,和 clash 無關,如果目的位址是中國 IP 就不轉發到 clash

image-20240714230535805.png

每個 IP-CIDR 都帶 no-resolve,因為 IP-CIDR 代表訪問的位址範圍,為 IP

meta

一個 netflix 服務有網域和 IP 多個連線

netflix.com 訪問-->網域規則 -->代理 但 netflix 內部可能直接使用了加密 DNS-->得到的 IP,本機規則這個 IP 中沒有分流到 Netflix 規則中,導致沒有 netflix 沒有被解鎖

解決-->強制嗅探純 IP

因為 IP 也需要建立 TCP 連線,進行 TLS 握手,此時可以嗅探出 TLS 握手的 SNI 欄位,然後確定該 IP 對應的網域,進行分流

image-20240719003558876.png

sniffer 網域探測

`Meta 內建了 Sniffer 網域嗅探器,透過讀取握手包內的網域欄位,將 IP 還原成網域,有效解決 Mapping 機制的短板

為了解決這個問題,Clash 使用 Mapping 機制,透過在規則中設定一個 IP 與網域的對應關係,將特定 IP 位址的網路流量導向指定的代理服務,從而提高了網域分流的準確性和效率

捕獲到的流量通常只包含目標伺服器的 IP 位址,而沒有網域資訊。Clash Meta內建的Sniffer網域嗅探器可以幫助讀取網路包的網域欄位,從而將IP位址還原成網域,進一步提升Mapping機制的可靠性和精準性。

image-20240715002308729.png

skip-domain

在 skip-domain 清單中,既可以指定網域進行跳過嗅探,也可以指定特定的關鍵詞或字串進行跳過。

  1. 避免衝突:有些網域可能會與特定的網路流量處理規則衝突。如果已經明確知道不需要對這些網域進行特殊處理,可以將其加入 skip-domain 清單中,避免衝突和不必要的處理過程。
  2. 繞過嗅探限制:某些網域或服務可能會有反嗅探措施,即阻止嗅探器取得真實的網域資訊。在這種情況下,將這些網域加入 skip-domain 清單中,避免浪費資源進行嗅探。

skip-domain:遇到 SNI 欄位為清單中的內容時,保留 Mapping 結果,不使用嗅探的內容覆蓋 Mapping 結果(主要解決部分網站 SNI 欄位非網域,導致嗅探結果異常的問題,支援萬用字元)。

在 Clash 中,為了實現網域分流,通常會使用一種稱為「mapping」的機制,即將 IP 位址對應到對應的網域上,然後根據網域進行分流。這個對應關係通常是透過設定檔手動新增的。

但是,在某些情況下,伺服器在握手過程中發送的 SNI 欄位並不是客戶端想要訪問的網域,導致 mapping 結果和實際網域不匹配,從而無法進行準確的網域分流。這時候,Clash 可以透過嗅探握手包中的網域欄位,將 IP 位址還原成正確的網域,從而實現精準的網域分流。

skip-domain 選項可以用於避免對一些特定的 SNI 欄位進行嗅探,保留原有的 mapping 結果,以解決某些網站 SNI 欄位不是網域導致的嗅探結果異常問題。而嗅探結果和 mapping 結果之間的區別在於,mapping 結果是手動設定的 IP 位址到網域的對應關係,而嗅探結果是透過解析握手包中的 SNI 欄位得到的實際網域。舉例來說,假設一個網站的 IP 位址為 1.2.3.4,但是其 SNI 欄位為 example. com,而手動設定中該 IP 位址對應的網域為 abc. com,這時候嗅探結果就會將 1.2.3.4 還原成 example. com,從而實現精準的網域分流。

握手包

(Handshake Packet)是指在電腦網路中,用於建立安全連線的一種資料包,通常用於 SSL/TLS 協定中。在 SSL/TLS 握手過程中,客戶端和伺服器端透過交換握手包來協商加密演算法、產生密鑰、驗證憑證等步驟,從而確保通訊的機密性和完整性。

在網路通訊中,握手包通常包含了通訊雙方的身分驗證資訊、加密演算法、工作階段密鑰等重要資料。因此,在網路安全方面,握手包也扮演了非常重要的角色。

sni 欄位

SNI(Server Name Indication)欄位是 TLS 協定中的一個擴充,用於在 SSL/TLS 握手過程中,告訴伺服器客戶端想要訪問哪個網域,使得伺服器能夠選擇正確的憑證提供給客戶端,以完成 SSL/TLS 連線。

攔截 HTTPDNS

🚫 HTTPDNS · VirgilClyne/GetSomeFries Wiki

image-20240715172310925.png image-20240715172317677.png

HTTPDNS 繞過了本機 DNS 設定、暴露來源 IP、繞過使用者分流與規則設定,並且不是標準協定,增加了管理和隱私風險。相比之下,DoH 和 DoT 是標準化的協定,提供更好的隱私保護和安全性。 HTTPDNS 不是由 IETF(網際網路工程任務組)標準化的協定。各大 HTTPDNS 供應商自行定義介面和使用方法,缺乏統一標準,增加了管理和控制的複雜性。

HTTPDNS 會存在以下問題

  1. 繞過系統/路由器/VPN/本機 DNS (類似 DNS 劫持)
  2. 暴露來源 IP,查詢請求會直接傳送到 HTTPDNS 伺服器,而不是透過本機 DNS 伺服器或 VPN 通道。這會暴露裝置的真實 IP 位址給 HTTPDNS 服務供應商,增加隱私洩露的風險。
  3. 繞過使用者分流與規則設定,直接取得 IP 位址並進行連線,繞過了代理工具的網域分流和規則設定
  4. 特殊加密和隱私風險**: 一些 HTTPDNS 服務可能使用特殊的加密演算法,傳送更多的使用者隱私資料。由於 HTTPDNS 服務供應商自行定義介面和使用方法,這些請求可能包含更多的隱私資訊。
  5. 廣告:有些行動應用程式使用 HTTPDNS 來繞過使用者設定的廣告和追蹤器封鎖規則。透過直接解析並連線到 IP 位址,這些應用程式可以隱藏廣告和追蹤請求,使使用者的過濾規則失效

也就是直接透過網域得到了 IP 位址,而沒有透過 openclash 的 DNS

其他

clash 導致區域網路內 iphone 手機待機耗電嚴重增加 [Bug] R2S 旁路由執行 OpenClash 嚴重增加區域網路內 iPhone 待機耗電 · Issue #2614 · vernesong/OpenClash

客戶端指紋 image-20240715010338559.png

geo_ip

geosite 的值可以是一個或多個地理位置或站點分類名稱,以下是一些常見的值:

  • cn:中國大陸
  • tw:台灣地區
  • hk:香港地區
  • jp:日本
  • kr:韓國
  • sg:新加坡
  • my:馬來西亞
  • us:美國
  • eu:歐洲
  • gfwlist:基於 GFWList 的網站清單
  • google:Google 網站與服務
  • facebook:Facebook 網站與服務
  • twitter:Twitter 網站與服務

tun 路由表

openclash/assets/tun模式(路由表)/image-20230315211231146.png Windows Clash 的 tun 模式會自動新增兩條路由表,網路位址包含所有 IPv4 位址,意味接管網路所有流量,所有存取將 198.18.0.1 介面的資料傳給 198.18.0.2 閘道 (虛擬網路卡位址),為避免迴圈,Clash 會設定出口為實體網路卡

openclash/assets/tun模式(路由表)/image-20230315211608315.png

VPN 加密清楚明瞭地寫明它就是 VPN 流量,沒有很好地隱藏流量特徵,且分流很不方便 openclash/assets/tun模式(路由表)/image-20230315212518621.png

Windows 10 顯示沒有網路

因為 fake-ip 傳回的位址是私有 IP, win10 系統預設防護,會認為 DNS 被劫持,導致顯示沒有網路,解決方式是新增 fake-ip-filter,傳回真實 IP 即可

image-20240719102803700.png

UDP

由於 UDP 必須使用真實 IP, fake-ip 也會發起 DNS 請求,而不適用假 IP 例如啟用 QUIC 協定的 YouTube,會發起 UDP 請求,最後 DNS 洩漏 image-20240719103552292.png

由於 udp 是無狀態的, redirect 無法幫助我們取得原始 IP image-20240719105353137.png

會使用 tproxy image-20240719105517044.png 之後 OpenClash 能取得目標 IP,會進行代理

增強模式 : redirect+tproxy 混合模式 : redirect+tun

本機程式會直接輸出無法代理, openclash 會重新路由到路由前

tun 模式,建立虛擬網路卡 image-20240719110723485.png

流量會先轉到 tun 網路卡,而openclash 可以直接從 tun 讀取資料 tproxy 代理可能出現許多問題

傳送代理伺服器

image-20240719104718715.png

加密傳給節點伺服器

假設伺服器 IP 和連接埠 3.3.3.3:8838

image-20240719104752640.png


# +號前可以有多級網域,*只能有一級網域
*.lan
*.localdomain
*.example
*.invalid
*.localhost
*.test
*.local
*.home.arpa
#放行NTP服務
time.*.com
time.*.gov
time.*.edu.cn
time.*.apple.com
time-ios.apple.com
time1.*.com
time2.*.com
time3.*.com
time4.*.com
time5.*.com
time6.*.com
time7.*.com
ntp.*.com
ntp1.*.com
ntp2.*.com
ntp3.*.com
ntp4.*.com
ntp5.*.com
ntp6.*.com
ntp7.*.com
*.time.edu.cn
*.ntp.org.cn
+.pool.ntp.org
time1.cloud.tencent.com
#放行網易雲音樂
music.163.com
*.music.163.com
*.126.net
#百度音樂
musicapi.taihe.com
music.taihe.com
#酷狗音樂
songsearch.kugou.com
trackercdn.kugou.com
#酷我音樂
*.kuwo.cn
#JOOX音樂
api-jooxtt.sanook.com
api.joox.com
joox.com
#QQ音樂
y.qq.com
*.y.qq.com
streamoc.music.tc.qq.com
mobileoc.music.tc.qq.com
isure.stream.qqmusic.qq.com
dl.stream.qqmusic.qq.com
aqqmusic.tc.qq.com
amobile.music.tc.qq.com
#蝦米音樂
*.xiami.com
#咪咕音樂
*.music.migu.cn
music.migu.cn
#QQ登入
localhost.ptlogin2.qq.com
localhost.sec.qq.com
+.qq.com
+.tencent.com
#Game
#Nintendo Switch
+.srv.nintendo.net
*.n.n.srv.nintendo.net
#Sony PlayStation
+.stun.playstation.net
#Microsoft Xbox
xbox.*.*.microsoft.com
*.*.xboxlive.com
xbox.*.microsoft.com
xnotify.xboxlive.com
#Wotgame
+.battlenet.com.cn
+.wotgame.cn
+.wggames.cn
+.wowsgame.cn
+.wargaming.net
#Golang
proxy.golang.org
#STUN  Game Service
stun.*.*
stun.*.*.*
+.stun.*.*
+.stun.*.*.*
+.stun.*.*.*.*
+.stun.*.*.*.*.*
#Linksys Router
heartbeat.belkin.com
*.linksys.com
*.linksyssmartwifi.com
#ASUS Router
*.router.asus.com
#Apple Software Update Service
mesu.apple.com
swscan.apple.com
swquery.apple.com
swdownload.apple.com
swcdn.apple.com
swdist.apple.com
#Google
lens.l.google.com
stun.l.google.com
#Netflix
+.nflxvideo.net
#FinalFantasy XIV Worldwide Server & CN Server
*.square-enix.com
*.finalfantasyxiv.com
*.ffxiv.com
*.ff14.sdo.com
ff.dorado.sdo.com
#Bilibili
*.mcdn.bilivideo.cn
#Disney Plus
+.media.dssott.com
#shark007 Codecs 
shark007.net
#Mijia
Mijia Cloud
#招商銀行
+.cmbchina.com
+.cmbimg.com
#AdGuard
local.adguard.org
#Xunlei
+.sandai.net
+.n0808.com
#game
+.tfogc.com
+.qpic.cn
+.cdn-go.cn
*.douyucdn.cn:
+.gtimg.com
+.ra2.com
+.ramboplay.com
+.douyucdn.cn:
+.wegame.com.cn
+.wegame.gtimg.com
+.anticheatexpert.com
+.qq.com
+.ra2ol.com
+.trace.qq.com
+.ramboplay.com
## The download itself must return the actual IP
+.vsean.net
+.github.com
+.kujiale.cn
+.kujiale.com
+.supes.top
#win10 Local connection test
+.msftconnecttest.com
+.msftncsi.com
+.edu.cn
#Ali
+.aliyundrive.com
+.aliyundrive.net
+.aliyun.com
#plugin
+.jsdelivr.net
+.jsdelivr.net
+.fastgit.org
+.githubusercontent.com
+.jaist.ac.jp
#12306
+.12306.cn
+.95306.cn
+.95572.com
+.china-railway.com.cn
+.china-ric.com
+.crct.com
+.cre.cn
+.crecc.com.cn
+.creip.cn
+.crscl.com.cn
+.gzrailway.com.cn
+.nntlj.com
+.peoplerail.com
+.rails.cn
+.tdpress.com
 +.xboxlive.com
+ .msftconnecttest.com
+.msftncsi.com
+.xbox.ipv6.microsoft.com
+.riotcdn.com