VPN 與代理伺服器

你的公開 IP 和 VPN 路由、代理 App、VPN 斷網保護和洩漏測試。

VPN 與公用 IP

「健康狀態」›「流量從哪裡出去」、Wi-Fi 選單和 kilobat ip 會顯示預設路由使用的介面,以及那是不是 VPN,資訊來自這台 Mac 的路由表和 macOS 列為已連線的 VPN。VPN 已連線但預設路由仍在 Wi-Fi 上時(例如沒有設定出口節點的 Tailscale),會顯示為「分流」:只有部分目的地會經過它。打開「設定」›「網路」›「查詢公用 IP」,就能看到網站看到的位址:在網路變化時及每 30 分鐘向 Cloudflare 查詢一次,並以 Kilobat 內建的 DB-IP 資料顯示它註冊的國家。這個功能預設關閉,因為 Cloudflare 會看到這個請求;kilobat ip --public 則只查詢一次。註冊國家不等於你或伺服器所在的地方,而且無論是它還是 VPN,都無法證明連線是私密或匿名的。「設定」›「選單列」›「VPN」會在蝙蝠旁顯示「開啟」、「分流」或「關閉」(開啟查詢時附國碼),「歷史記錄」也會列出 VPN 何時開啟或關閉,以及公用 IP 何時改變。

代理伺服器和 VPN

Kilobat 可以和代理 App(Clash Verge、ClashX、mihomo、Mihomo Party、FlClash、Surge、sing-box、Stash、V2Ray、Xray、Shadowsocks)及 VPN 一起使用。它只讀取資訊,絕不轉送流量,也不更改它們的設定。

  • 流量算在正確的 App 上。透過本機代理伺服器傳送流量的 App 會計入它自己的流量,轉送流量的代理核心或 VPN 通道則標為「承載其他 App 的流量」,不會重複計算。
  • 每個 App 走了哪條路線。使用相容 Clash 的 API(Clash Verge、ClashX、mihomo、Mihomo Party、FlClash、sing-box 的 clash_api)時,App 的那一列會顯示它經過的節點,例如「透過 HK-01 · 2 個直接連線」,提示中會列出每個主機、節點和規則。Kilobat 會從該 App 自己的設定讀取 API 位址和密鑰,而且絕不顯示密鑰。
  • 「健康狀態」›「流量從哪裡出去」中的問題:
    • 系統代理伺服器指向沒有在執行的 App,這會讓所有瀏覽器都無法上網;
    • DNS 或 IPv6 繞過了 VPN;
    • 代理伺服器和 VPN 同時在接管流量;
    • 全域模式;
    • 阻擋功能看不到系統代理伺服器後方的 App。macOS 過濾器永遠看不到連到 127.0.0.1 的連線,所以請打開代理伺服器的 TUN 模式,或在代理伺服器的規則中阻擋該 App。
  • 為什麼連不上?會加入「代理 App」這一層,顯示代理伺服器的模式及其目前節點的回應速度,並在問題出在失效節點時告訴你。

在終端機中:kilobat proxy、kilobat proxy routes --app Telegram、kilobat proxy test 和 kilobat vpn。如果 Kilobat 自己找不到某個代理核心,請傳入 --controller 127.0.0.1:9090 --secret …。AI 代理程式可以透過 get_proxy_status、test_proxy_nodes 和 check_vpn 取得相同資訊。

VPN 斷網保護

使用 Pro 並開啟網路過濾器後,在「設定」›「網路」中開啟VPN 斷網保護。如果 VPN 中斷,Kilobat 會阻擋新連線,直到它恢復,這段期間不會有任何內容經由咖啡廳或飯店的 Wi-Fi 送出。彈出式視窗和儀表板會顯示已阻擋:VPN 已中斷,選單列中的蝙蝠會加上一把鎖,通知中也會提供允許 5 分鐘。

  • VPN 連線後就會啟動。斷網保護會等到 VPN 在 Mac 開機後第一次承載所有流量,所以沒有 VPN 時開啟它也絕不會讓你斷網。此後直到重新啟動,只要 VPN 中斷,它在任何網路上都會阻擋,因為加入新網路的那一刻正是 App 最容易洩漏的時候。只承載部分目的地的分流 VPN 也視為中斷。
  • 仍可連線的有:VPN App 及其輔助程式和網路延伸功能(WireGuard、Tailscale、Mullvad、NordVPN、Proton VPN、ExpressVPN、Surfshark、Cisco Secure Client、GlobalProtect、OpenVPN Connect、Tunnelblick 等,以及 macOS 中有設定的任何 VPN App)、Apple 的網路服務(DNS、DHCP、憑證檢查、網路登入視窗、內建 VPN)、Kilobat,以及區域網路(除非你將它關閉)。其他一切都要等待,不論其規則或設定檔為何,「不受限」也不例外。
  • 暫時放行。橫幅、通知或選單列右鍵選單中的允許 5 分鐘會放行所有流量,方便打開網路登入頁面或快速檢查一下;之後如果 VPN 仍然中斷,會重新阻擋。關閉就在它旁邊,「設定」中也有。

它做不到的事:過濾器只能看到新連線,所以 VPN 中斷時已開啟的連線會繼續,不過大多會隨所用的通道一起中斷。DNS 查詢仍會送出,以便 VPN 找到它的伺服器。如果 Kilobat 結束,過濾器會保持最後收到的狀態,VPN 的通道介面消失時仍會阻擋;打開 Kilobat 即可允許流量或關閉斷網保護。在終端機中:kilobat settings kill-switch on,kilobat vpn 或 kilobat conditions 會顯示它的狀態;代理程式透過 check_vpn 和 get_conditions 讀取狀態,set_kill_switch 會先詢問你。

VPN 洩漏測試

在 VPN 開啟時,按一下「健康狀態」›「流量從哪裡出去」或「設定」›「網路」中的檢查洩漏。大約十秒內,Kilobat 會檢查流量繞過 VPN 的三種途徑,逐項顯示通過或失敗,並附上修正的設定;如果 Kilobat 認得你的 VPN App(Mullvad、NordVPN、Proton VPN、ExpressVPN、Tailscale、WireGuard),會使用該 App 中的名稱;對於 Cisco、GlobalProtect 等工作用 VPN,會告訴你該向 IT 部門詢問什麼。

  • DNS。macOS 用於一般查詢的解析器,以及到每個解析器的路由:如果某個解析器經由 Wi-Fi 或乙太網路而不是通道到達,你查詢的每個名稱都會洩漏。Kilobat 也會透過 bash.ws 查詢幾個虛構的名稱,bash.ws 會回報發出查詢的解析器;既不屬於你的 VPN、也不屬於 Cloudflare 或 Google 等公共 DNS 服務的解析器,很可能屬於你的網路業者。
  • IPv6。如果 VPN 只承載 IPv4,而 Mac 有經由 Wi-Fi 的 IPv6 路由,IPv6 網站就會收到你的真實位址。Kilobat 會向 api6.ipify.org 查詢你的 IPv6 位址,顯示這些網站看到的內容,並指出 VPN 設定,或如何為該網路關閉 IPv6(「系統設定」›「網路」›「Wi-Fi」›「詳細資訊」›「TCP/IP」›「設定 IPv6」›「僅限本地連結」)。
  • UDP 和 WebRTC。瀏覽器的 WebRTC 會從每個網路介面送出 UDP。Kilobat 會經由 VPN 送出一個 STUN 要求(送往 Google 或 Cloudflare 的伺服器),再直接從 Wi-Fi 或乙太網路送出一個:如果第二個收到回應,或第一個的回傳位址與 VPN 的出口不同,網頁就可能得知你的真實位址。修正方式是 VPN 的斷網保護或鎖定選項。Kilobat 無法執行瀏覽器的 WebRTC,所以也會說明如何讓瀏覽器不分享本機位址:Safari 會隱藏它們;Firefox 關閉 media.peerconnection.enabled;Brave 使用其 WebRTC IP 處理政策;Chrome 使用 Google 的 WebRTC Network Limiter 擴充功能。

洩漏測試是免費的。它不會更改任何設定,被詢問的服務看到你的位址,就像任何網站一樣。測試通過只代表這台 Mac 在那一刻的情況,並不代表每個 App。在終端機中:kilobat vpn leaks(有洩漏時以 1 結束,--json 供指令碼使用);代理程式使用 check_vpn_leaks。