Lainbo

Lainbo's Blog

If you’re nothing without the suit, then you shouldn't have it.
github
email
follow

Clash Verge系列使用最佳實踐

關於一些客戶端作者停止更新#

這些客戶端停止更新了,對我們的使用是否有影響呢?想要知道這個問題的答案,首先我們先明白一個概念,Clash Verge(開源)、Clash for Windows、Clash X Pro 這一類圖形化的軟體,都是一個殼,用於對接核心的功能,停止更新的只是這個

常見的核心有 Clash Premium、Clash Meta(開源)

因為 Clash Verge 和它能切換的內核 Clash Meta都是開源的,所以我們應該優先選這個搭配,下文中也會使用。

那我們還能夠繼續使用它們嗎?

當然可以,解釋如下

  1. 就像你在使用一個收音機 *(Clash Verge),你不會因為收音機的製造商(作者)* 倒閉了 *(停止更新)*,而立刻扔掉你的收音機
  2. 收音機的所有零件圖紙是公開 *(開源)* 的,你不用擔心它可能植入一些不好的後台程序
  3. 收音機的外殼按鈕 *(Clash Verge)* ,是讓我們更輕鬆地控制收音機裡面的主板元件 *(Clash Meta 核心)* 去執行它們的任務,只要這個外殼按鈕 *(Clash Verge)* 控制收音機主板 *(Clash Meta 核心)* 的方式沒有太大問題,那我們就可以用
  4. 外殼停止更新,意味著收音機外殼不會增加新的按鈕
  5. 核心停止更新,意味著收音機主板不會更新功能,僅此而已
  6. 收音機能播放聲音 *(開啟魔法),是因為你輸入了正確的 FM 頻率(訂閱鏈接)。只要電台(機場)* 還在廣播 *(服務),只要你的殼和核還在,就不影響你播放聲音(開啟魔法)*

最後,我們要明確一點,下文中涉及到隱私保護的操作並不是絕對的安全,就像是想要知道你在家裡做什麼,可以在樓下垃圾桶翻你的扔的垃圾進行推測,可以望遠鏡監視你,可以把你家天花板炸了或者用大炮強行衝進來看。網路監控也一樣,就看你在網路上的行為,值不值得人家用那些高階手段了,總不能因為挖掘機一鏟子能把防盜門破了我就不裝防盜門了。

目前可用的開源 Clash Verge 客戶端#

現在有不少基於 Clash Verge 繼續開發維護的客戶端,比較推薦 Clash Verge Rev 後面的文章中會基於這個客戶端進行演示

後面提到的配置已完成 Clash Verge Rev ≥ v1.7 的適配,並自用了相當一段時間,放心食用

為什麼是這個軟體?

多端兼容性出色 ——Clash Verge Rev 支持 Windows、macOS、Linux。如果按照下方的教程進行操作,最終將得到一個新的訂閱鏈接,而 iOS 上,可以將這個新的訂閱鏈接生成二維碼,用小火箭,點擊「+」圖標,找到底下的「掃描二維碼」,就可以導入 iOS 設備進行使用;Stash 更是直接輸入生成的鏈接就能用,而下方的最佳實踐操作,只需執行一次,就可以在眾多設備上跨端應用。

太長不看版本#

  1. 訂閱轉換 **(所有端必做)**
  2. 開 TUN 模式,關代理(可選)
  3. 關閉瀏覽器安全 DNS 地址,設置 DNS 地址(所有 PC 可選,如果操作了 2,則此項必做)
  4. 系統 DNS 設置自動(可選)
  5. 關閉瀏覽器 QUIC**(所有 PC 必做)**
  6. 設置本地中國 IP 數據庫(可選)

解決訂閱分流規則問題#

拿到了訂閱鏈接,第一步要做的應該就是訂閱轉換,將它的分流規則完善(因為給你提供訂閱的服務商,自帶的分流規則往往就幾百條,很不健全,很多人開著 Clash 但 New Bing 卻用不了就是個很好的例子)

在線訂閱轉換不僅僅是將Shadowsocks、V2ray、Trojan 訂閱鏈接轉換為 Clash 、Stash、V2ray、Quantumult X、Surge 等軟體使用的訂閱格式,它還支持非常多的進階操作,不過在本文僅以夠用為目標,而不是把這個東西玩出花來。

在線訂閱轉換網站雖然好用,但也有一定的隱私風險,需要注意,建議會技術的朋友自己搭建在線訂閱轉換平台。

訂閱轉換網站#

我搭建的訂閱轉換網站,下文將使用該網站作為示例

進入: https://sub.lainbo.com/

需要操作的步驟#

image

一般這樣就已經可以比較完美的使用了,並且擁有我寫的遠程配置文件中的一些額外功能

判斷是否成功套用了規則文件#

拉取訂閱後,節點中應該會出現 “🌿自動選擇”、“🇭🇰香港自動”、“🇨🇳台灣自動”、“🇸🇬獅城自動”、“🇺🇸美國自動”、“🇯🇵日本自動” 這幾個自動節點。能看到這幾個自動節點,那你就成功在自己的訂閱上套用了我的規則。

推薦在沒有特殊需求的時候選擇用這幾個自動節點,自動節點會幫你使用對應國家 / 地區節點中,延遲最低的節點。

關於遠程配置#

這個遠程配置是什麼,能賦予你的訂閱什麼功能,你可以打開「遠程配置」原文的鏈接,頂部有註釋

解決 DNS 洩露問題#

DNS 洩露指的是在使用 VPN 或其他隱私服務的情況下,用戶的真實 IP 地址通過 DNS 請求被發送到了 ISP(如聯通,移動)的 DNS 伺服器,而不是通過 VPN 設置的安全、匿名的 DNS 伺服器。如果在 DNS Leak Test 、ipleak這種網站的列表中看到了中國國旗,就要意識到可能發生了 DNS 洩露。

如果真的洩露了有什麼問題呢?我也不知道可能導致什麼,或許你可能收到下圖這樣的消息
image
image
我覺得還是儘量不要讓他們知道這件事。雖然沒有人知道具體的探測機制是什麼,但很可能是從網路層面獲取的。在一般的家庭網路拓撲中,wireshark可以看到什麼內容,運營商就能看見什麼內容,所以你使用 114.114.114.114、223.5.5.5 這樣的 DNS 解析去訪問了什麼網站是很清晰的。

這就要衍生出第一個使用技巧 ——Clash 開啟 TUN 模式,關閉系統代理去使用

與普通的系統代理模式區別在於,TUN 模式下 Clash 會創建一張虛擬網卡,從網路層面接管所有的網路流量。

普通的系統代理模式,是作為一個軟體的權限去接管別的軟體的網路,總有一些無法接管的應用,比如遊戲,比如命令行。所以我們應該開啟 TUN 模式,關閉系統代理,讓網卡做這件事,而不是讓軟體做這件事

操作一(開啟 TUN 模式)#

  1. 首先切換 Clash Verge 的內核,選開源的 Clash Meta 內核,然後重啟整個 Clash Verge 確保生效(Clash Verge Rev 新版本應該默認就是 Meta 了)

    (Clash Meta 在後期可能在不同的客戶端名稱有所不同,如果看到內核名字是Mihomo也是 Meta)

    image

  2. 安裝服務,開啟 Tun 模式,開啟嚴格路由,按下方圖中的數字序號順序點擊

    image

    如果服務模式無法安裝

    • Win 可以嘗試在系統命令行(PowerShell)中執行sc delete clash_verge_service 來刪除之前的 Clash Verge 服務,這可能是你之前安裝過 Clash Verge,但是卸載的時候沒有寫在這服務模式,導致新的安裝不上
    • Mac/Linux 請在設置的Clash內核點開齒輪圖標⚙️,點 " 授權”
    • 其他疑難雜症參考https://github.com/clash-verge-rev/clash-verge-rev/issues/125
  3. 此時需要重啟一下 Clash 軟體,再點擊 TUN 模式旁邊的齒輪圖標⚙️,選擇 Tun 的堆疊模式為 Mixed,這也是官方推薦的選項,開啟「嚴格路由」。

    • 前端開發朋友需要注意

      前端開發如果開啟了嚴格路由,Vite 默認運行 npm run vite dev,啟動起來的http://localhost:5173 可能無法訪問,解決方式就是使用指定 Vite 伺服器應該監聽哪個 IP 地址。

      即:以下兩種方式均可解決,二選一即可

      1. 在 package.json 修改(加個--host

        "scripts": {
          "dev": "vite --host",
        }
        
      2. 或者在 vite.config.ts 修改(在 server 塊中將 host 指定為 0.0.0.0)

        export default defineConfig({
        	server: {
        		host: '0.0.0.0',
        	}
        })
        

    image

操作二(調整組策略 Mac 跳過)#

要解決這個問題也很簡單,問題出現的原因是 Windows 系統默認使用多宿主 DNS 解析,會使用所有的網卡發起請求,我們只需要在組策略(Windows 家庭版無該功能)中關閉這個功能即可(Win+R,輸入gpedit.msc 點確定)。

image

至此,我們解決了 Clash 在 Windows 下可能發生的 DNS 洩露問題

但並不能保證 ipleak 檢測不到。雖然我可以將 ipleak 加入規則中,但這樣做就是掩耳盜鈴。只要確保某些黑名單網站不被漏掉,不會收到上面那種短信,我認為就可以了。

操作三(使用一個穩定的 DNS)#

DNS 這部分有人會教使用運營商的 DNS,運營商的 DNS 只適合小白用戶,因為他可能連反詐,所以建議使用國內大廠的。

  1. 關閉瀏覽器的 QUIC,中國大陸的 isp 是限速 udp 的,所以導致 QUIC 這個優秀的協議,到了中國大陸的網路下成了個負面增益效果。

    about://flags/#enable-quic 設置為Disabled(點下方彈出的重啟瀏覽器生效)

  2. 關閉瀏覽器中的 “安全 DNS”

    • Chrome: chrome://settings/security

      【使用安全 DNS】(新版 Chrome 中叫做【對您訪問的網站的名稱進行加密】),關閉

    • Edge: edge://settings/privacy

      找到【安全性】 -【使用安全的 DNS 指定如何查找網站的網路地址】,關閉

  • 如果你的 Clash Verge Rev 的版本 < 1.7

    1. 在 Clash Verge 的【配置】中,點右上角的新建,進行如下操作

    image

    1. 右鍵點擊新建的卡片,選擇編輯文件,並輸入以下內容,保存,右鍵點擊卡片啟用

      image

      function main(content) {
        const isObject = (value) => {
          return value !== null && typeof value === 'object'
        }
      
        const mergeConfig = (existingConfig, newConfig) => {
          if (!isObject(existingConfig)) {
            existingConfig = {}
          }
          if (!isObject(newConfig)) {
            return existingConfig
          }
          return { ...existingConfig, ...newConfig }
        }
      
        const cnDnsList = [
          'https://1.12.12.12/dns-query',
          'https://223.5.5.5/dns-query',
        ]
        
        // 大部分的網路請求都會走這個裡面的,這裡目前是騰訊、阿里、和使用節點查詢的1.0.0.1的dns
        const trustDnsList = [
          'https://doh.pub/dns-query', // 騰訊
          'https://dns.alidns.com/dns-query', // 阿里(這裡會觸發h3和普通的並發查詢)
          '180.184.1.1', // 字節-火山引擎的DNS
        ]
        const notionDns = 'tls://dns.jerryw.cn' // notion加速dns
        const notionUrls = [
          'http-inputs-notion.splunkcloud.com',
          '+.notion-static.com',
          '+.notion.com',
          '+.notion.new',
          '+.notion.site',
          '+.notion.so',
        ]
        const combinedUrls = notionUrls.join(',');
        const dnsOptions = {
          'enable': true,
          'prefer-h3': true, // 如果DNS伺服器支持DoH3會優先使用h3(本例子中只有阿里DNS支持)
          'default-nameserver': cnDnsList, // 用於解析其他DNS伺服器、和節點的域名, 必須為IP, 可為加密DNS。注意這個只用來解析節點和其他的dns,其他網路請求不歸他管
          'nameserver': trustDnsList, // 其他網路請求都歸他管
          
          // 這個用於覆蓋上面的 nameserver
          'nameserver-policy': {
            [combinedUrls]: notionDns,
            'geosite:geolocation-!cn': trustDnsList,
            // 如果你有一些內網使用的DNS,應該定義在這裡,多個域名用英文逗號分割
            // '+.公司域名.com, www.4399.com, +.baidu.com': '10.0.0.1'
          },
        }
      
        // GitHub加速前綴
        const githubPrefix = 'https://fastgh.lainbo.com/'
      
        // GEO數據GitHub資源原始下載地址
        const rawGeoxURLs = {
          geoip: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat',
          geosite: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat',
          mmdb: 'https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb',
        }
      
        // 生成帶有加速前綴的GEO數據資源對象
        const accelURLs = Object.fromEntries(
          Object.entries(rawGeoxURLs).map(([key, githubUrl]) => [key, `${githubPrefix}${githubUrl}`]),
        )
      
        const otherOptions = {
          'unified-delay': true,
          'tcp-concurrent': true,
          'profile': {
            'store-selected': true,
            'store-fake-ip': true,
          },
          'sniffer': {
            enable: true,
            sniff: {
              TLS: {
                ports: [443, 8443],
              },
              HTTP: {
                'ports': [80, '8080-8880'],
                'override-destination': true,
              },
            },
          },
          'geodata-mode': true,
          'geo-auto-update': true,
          'geo-update-interval': 24,
          'geodata-loader': 'standard',
          'geox-url': accelURLs,
          'find-process-mode': 'strict',
        }
        content.dns = mergeConfig(content.dns, dnsOptions)
        return { ...content, ...otherOptions }
      }
      

      圖片僅提供界面參考,實際內容以上方代碼塊為準

      image

    2. 啟用後再次點擊按鈕,確保正確的應用了設置(這裡的任何代碼變動,都需要點擊這個按鈕手動刷新運行時的配置)

      image

  • 如果你的 Clash Verge Rev 的版本≥1.7

    1. 右鍵「全局擴展配置」,點擊編輯文件

      image

    2. 粘貼以下代碼後,點擊「保存」

      dns:
        prefer-h3: true
        default-nameserver:
          - 180.184.1.1
          - udp://47.108.230.123:5553
          - https://119.29.29.29/dns-query
        nameserver-policy:
          "http-inputs-notion.splunkcloud.com,+.notion-static.com,+.notion.com,+.notion.new,+.notion.site,+.notion.so": tls://dns.jerryw.cn
          geosite:geolocation-!cn:
            - https://doh.pub/dns-query
            - https://dns.alidns.com/dns-query
            - 180.184.1.1
          nameserver:
            - https://doh.pub/dns-query
            - https://dns.alidns.com/dns-query
            - 180.184.1.1
      unified-delay: true
      tcp-concurrent: true
      profile:
        store-selected: true
        store-fake-ip: true
      sniffer:
        enable: true
        sniff:
          HTTP:
            ports:
              - 80
              - 8080-8880
            override-destination: true
          TLS:
            ports:
              - 443
              - 8443
          QUIC:
            ports:
              - 443
              - 8443
      geodata-mode: true
      geo-auto-update: true
      geo-update-interval: 24
      geodata-loader: standard
      geox-url:
        geoip: https://fastgh.lainbo.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat
        geosite: https://fastgh.lainbo.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat
        mmdb: https://fastgh.lainbo.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb
      
      

這段代碼的作用是

  • 使用阿里和 DNSPod(騰訊的 DNS)的DoT來解析節點、DNS 伺服器
  • 使用阿里、騰訊、火山的 DNS 伺服器解析其他網站(DNS 洩露往往是運營商洩露,大廠沒聽說過洩露)
  • 使用非營利組織的 DoT 解析 Notion 網站
  • tun 模式堆疊使用自適應模式
  • 更換延遲計算方式,去除握手等額外延遲
  • 開啟 TCP 並發的支持
  • 開啟域名嗅探,準確還原域名,進行域名分流
  • 設置 geodata 的下載源為國內加速下載源

有人可能這裡會說,你用了阿里騰訊這些 dns 解析網站,還是會漏呀!我想說的是,我們要解決的問題是運營商(電信、聯通、移動)外洩數據這件事,而不是不留痕跡的 DNS 查詢,如果你希望自己的 DNS 查詢行為不留痕跡,請自建 DNS

解決 GEOIP, CN 問題#

目前市面上絕大多數的代理工具都依賴於 GeoIP2 數據庫判斷地址所屬地。它們的規則結尾部分一般都會有一條類似 GEOIP, CN,用來查詢目的 IP 地址是否屬於中國大陸,從而判斷是否直連。

這些代理工具通常使用的 GeoIP2 數據庫是來自於 MaxMind 的 GeoLite2 免費數據庫。這個數據庫目前存在一下幾個問題:

  • 獲取不便:從 2019 年 12 月 30 日起,必須註冊後才能下載
  • 數據量大:數據庫龐大,包含全球的 IP 地址段,約 10 MB
  • 準確度低:對中國大陸的 IP 地址判定不準,如:香港阿里雲的 IP 被判定為新加坡、中國大陸等。

龐大的數據量對於大多數中國大陸的用戶來說是沒有意義的,因為只僅需要去判斷 IP 的地理位置是否屬於中國大陸境內,其他國家的 IP 一律代理 / 直連。過多的數據量會增加載入時間,降低查詢效率。

我們在之前創建的 Script 中已經包含了下載更精簡合適中國大陸的 IP 數據庫鏈接,現在只需要手動操作下載和替換即可。

  1. 點擊 Clash Verge Rev 的設置菜單,找到「更新 GeoData」,點擊進行更新即可
  2. 下載完成後右鍵托盤中的 Clash Verge 圖標,【更多】-【重啟應用】確保數據庫被正確應用

我希望 xxx.com 不要走代理,如何做?#

  • 如果你的 Clash Verge Rev 的版本 < 1.7
    1. 點擊左側「訂閱」菜單,點擊右上角的「新建」按鈕

    2. 類型選擇「Merge」,名稱自己起一個,點保存

    3. 右鍵點擊剛才新建出來的 Merge,點擊「編輯文件」,在prepend-rules: 後面進行添加(Clash 的策略是從上往下讀取規則,讀取到了就不再往下找,所以要使用 prepend,在前面插入規則)

    4. 格式如下,自行靈活組合即可添加你想要的規則,寫時注意 yaml 文件的縮進

      (不要照搬下面的規則,只是寫法演示,演示內容寫的策略很不合理!)

      prepend-rules:
      # ↓表示`*.baidu.com`會走`🔗 無需代理`這個策略組,而這個策略組默認行為走直連而非走節點
      - DOMAIN-SUFFIX,baidu.com,🔗 無需代理
      
      # ↓表示`abc.baidu.com`會走`DIRECT`這個內置策略
      # DIRECT同樣為直連,區別在於這條規則不受`🔗 無需代理`策略組控制
      # 🔗 無需代理策略組只是名字叫“無需代理”,你可以手動調整他的策略,但DIRECT不能調
      - DOMAIN,abc.baidu.com,DIRECT
      
      # ↓表示`Weiyun.exe`這個源進程名,會走`🛡️ 廣告攔截`,而這個策略組默認行為是Reject請求
      - PROCESS-NAME,Weiyun.exe,🛡️ 廣告攔截
      
      # ↓表示只要請求url中包含`aria2`這個關鍵字,就會走`REJECT`這個內置策略
      # REJECT同樣為丟棄請求,區別在於這條規則不受`🛡️ 廣告攔截`策略組控制
      # 不解釋了,和上面的無需代理一樣的邏輯
      - DOMAIN-KEYWORD,aria2,REJECT
      
      # ↓表示所有的22端口都走`✈️ 節點選擇`這個策略組,也就是走你選擇的節點流量
      - DST-PORT,22,✈️ 節點選擇
      
      # ↓表示指定的ip段不需要代理,記得在最後加`,no-resolve`
      # no-resolve會告訴Clash不要去嘗試解析來匹配這條規則,只處理「直接IP訪問」的請求
      - IP-CIDR,203.205.254.0/23,🔗 無需代理,no-resolve
      - IP-CIDR6,2a0b:b580::/48,🔗 無需代理,no-resolve
      

      上面只寫了常用的,還有更多規則類型詳見Clash 文檔的對應章節虛空終端 Docs

    5. 寫完之後右鍵你新建出來的 Merge,點擊「啟用」,再點擊右上角的「重新激活訂閱」按鈕來刷新配置

      image

  • 如果你的 Clash Verge Rev 的版本≥1.7
    1. 右鍵「全局擴展腳本」,點擊「編輯文件」

      image

    2. 格式如下,自行靈活組合即可添加你想要的規則,組合方式和上面版本 < 1.7 是一樣的,可以參照,只是格式需要寫 JavaScript 代碼,需要添加更多規則,請自行擴充代碼中的prependRules

      function main(content) {
        const prependRules = [
          'IP-ASN,132203,🔗 無需代理,no-resolve',
          'DOMAIN-SUFFIX,baidu.com,🔗 無需代理', // 表示`*.baidu.com`會走`🔗 無需代理`這個策略組,而這個策略組默認行為走直連而非走節點
          'PROCESS-NAME,Weiyun.exe,🛡️ 廣告攔截', // 表示`Weiyun.exe`這個源進程名,會走`🛡️ 廣告攔截`,而這個策略組默認行為是Reject請求
          'DST-PORT,22,✈️ 節點選擇', // 表示所有的22端口都走`✈️ 節點選擇`這個策略組,也就是走你選擇的節點流量
        ]
        if (content.rules?.length) {
          content.rules = prependRules.concat(content.rules) 
        }
      
        return content
      }
      
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。