JAN 21, 20263 分鐘閱讀vpn

【香港專題】📱 iOS VPN 分流教學(Mullvad + Shadowrocket)

ios-vpn-split-tunnel

【實用教學】📱 iOS VPN 分流教學(Mullvad + Shadowrocket)

為什麼需要分流?

「分流」(Split Tunneling)讓你可以選擇性地讓部分流量通過 VPN,而其他流量則直接連接。

這對於以下場景特別有用:

  • 需要美國 IP 存取地區限制服務(如 ChatGPT、Claude、Gemini),但不想全部流量都走 VPN(影響速度)
  • 在香港/中國需要存取被限制的服務,同時保持本地服務的正常連接
  • 保護特定 App 的隱私,同時讓其他 App 繼續使用本地網路

問題:Mullvad 原生 App 在 iOS 上不支援分流功能。

解決方案:使用 Shadowrocket 或 Surge 配合 Mullvad 的 WireGuard 配置,實現基於域名/App 的分流。

Mullvad 介紹可以參考:https://www.informaltech.dev/mullvad-vpn-intro/


前置準備

必要條件

  • iPhone/iPad(iOS 15+)
  • Shadowrocket(App Store 價格 $22 HKD)或 Surge(價格較高,In-App Purchase)
  • Mullvad 帳號(已充值)
  • 穩定的網路連接

支出總計 Mullvad VPN 是 €5/月(約 $42 HKD),Shadowrocket 是 $22 HKD 一次性購買(價錢以 App Store 為準)。


準備部分:先在 iPhone 安裝好 Shadowrocket

shadow-rocket-icon

第一部分:獲取 Mullvad WireGuard 配置

步驟 1:登入 Mullvad 帳號

account-headermullvad-acc


前往 mullvad.net/en/account,輸入你的 Account Number。(可以在 Mac App Profile 找到)

步驟 2:生成 WireGuard 配置

wire-guard
  • 在帳號頁面,找到「WireGuard configuration」區域
  • 點擊「Generate keys」生成新的金鑰對
  • 選擇伺服器位置(美國、日本、新加坡,只要是有 AI 服務的地區即可)
servers
  • 點擊「Generate QR code」

第二部分:Shadowrocket 設定

步驟 1:打開之前下載的 Shadowrocket

首次開啟時,允許它新增 VPN 配置。

步驟 2:新增 WireGuard 節點

  • 開啟 Shadowrocket
  • 點擊左上角「」Scan QR Code

之後你會在 Home Page 的 第二個 section - Local Servers 看到多了一組IP address。

shadow-rocket-home

這樣就成功新增了 VPN 的節點。(上方圖片我遮住了 IP Address)

然後在 Home Page,你最經常用到的通常只會是最上面的這 2 行:

config

分別是:

  • 開關 VPN
  • Network Traffic 如何分流
    • Config → 自定義(我們要用這個)
    • Proxy → 所有流量都經 VPN
    • Direct → 所有流量都不經過 VPN
    • Scene → 根據你當前連接的網路環境(如特定的 Wi-Fi 或行動數據),自動切換代理策略

步驟 3:配置分流規則

在 Shadowrocket App 的 Bottom Navigation Bar,點擊「Config」,

你應該可以在 Local Files 的 section 看到有一個 default.conf。

config_full

點擊然後選 Edit Plain Text,之後直接複製下方內容:

abap
# Shadowrocket: 2026-01-01 11:02:13
[General]
bypass-system = true
skip-proxy = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, localhost, *.local, captive.apple.com
tun-excluded-routes = 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.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 255.255.255.255/32, 239.255.255.250/32
dns-server = system
fallback-dns-server = system

# Enable full IPv6 support
ipv6 = true
prefer-ipv6 = false

# If a domain uses the direct policy, after enabling this, Shadowrocket will use the system DNS to resolve it.
dns-direct-system = false

# If true, Shadowrocket will automatically reply to ICMP packets.
icmp-auto-reply = true

# If true, Shadowrocket always executes reject urlrewrite rules even though the global routing is not config.
always-reject-url-rewrite = false

# If false, the domain resolution returns a private IP and Shadowrocket assumes that the domain is hijacked and forces the use of a proxy.
private-ip-answer = true

# If a domain uses the direct policy, automatically switch to the proxy rule if direct DNS resolution fails.
dns-direct-fallback-proxy = false

# The fallback behavior when UDP traffic matches a policy that doesn't support the UDP relay. Possible values: DIRECT, REJECT.
udp-policy-not-supported-behaviour = REJECT

# By default, DNS lookup is always performed on the remote server with a proxy policy.
# If true, Shadowrocket will use the mapped address for the proxy connection instead of the host if a local DNS mapping exists.
use-local-host-item-for-proxy = false

[Rule]
# Block HTTP3/QUIC
# AND,((PROTOCOL,UDP),(DEST-PORT,443)),REJECT-NO-DROP

# ChatGPT
DOMAIN,api.statsig.com,PROXY
DOMAIN,browser-intake-datadoghq.com,PROXY
DOMAIN,chat.openai.com.cdn.cloudflare.net,PROXY
DOMAIN,o33249.ingest.sentry.io,PROXY
DOMAIN,openai-api.arkoselabs.com,PROXY
DOMAIN,openaicom-api-bdcpf8c6d2e9atf6.z01.azurefd.net,PROXY
DOMAIN,openaicomproductionae4b.blob.core.windows.net,PROXY
DOMAIN,production-openaicom-storage.azureedge.net,PROXY
DOMAIN,static.cloudflareinsights.com,PROXY
DOMAIN-KEYWORD,openaicom-api,PROXY
DOMAIN-SUFFIX,chatgpt.livekit.cloud,PROXY
DOMAIN-SUFFIX,client-api.arkoselabs.com,PROXY
DOMAIN-SUFFIX,events.statsigapi.net,PROXY
DOMAIN-SUFFIX,featuregates.org,PROXY
DOMAIN-SUFFIX,host.livekit.cloud,PROXY
DOMAIN-SUFFIX,identrust.com,PROXY
DOMAIN-SUFFIX,intercom.io,PROXY
DOMAIN-SUFFIX,intercomcdn.com,PROXY
DOMAIN-SUFFIX,launchdarkly.com,PROXY
DOMAIN-SUFFIX,oaistatic.com,PROXY
DOMAIN-SUFFIX,oaiusercontent.com,PROXY
DOMAIN-SUFFIX,observeit.net,PROXY
DOMAIN-SUFFIX,openai.com,PROXY
DOMAIN-SUFFIX,openaiapi-site.azureedge.net,PROXY
DOMAIN-SUFFIX,openaicom.imgix.net,PROXY
DOMAIN-SUFFIX,chatgpt.com,PROXY
DOMAIN-SUFFIX,ai.com,PROXY
DOMAIN-SUFFIX,turn.livekit.cloud,PROXY
IP-CIDR,24.199.123.28/32,PROXY,no-resolve
IP-CIDR,45.76.214.191/32,PROXY,no-resolve
IP-CIDR,64.23.132.171/32,PROXY,no-resolve
IP-CIDR,143.198.200.27/32,PROXY,no-resolve
IP-CIDR,159.89.204.203/32,PROXY,no-resolve

# Claude / Anthropic - 完整版
DOMAIN,cdn.usefathom.com,PROXY
DOMAIN-SUFFIX,anthropic.com,PROXY
DOMAIN-SUFFIX,claude.ai,PROXY
DOMAIN-SUFFIX,claudeusercontent.com,PROXY
DOMAIN-SUFFIX,claudeassets.com,PROXY
DOMAIN-KEYWORD,anthropic,PROXY
DOMAIN-KEYWORD,claude,PROXY

# Claude 可能用到的第三方服務
DOMAIN-SUFFIX,statsigapi.net,PROXY
DOMAIN-SUFFIX,statsig.com,PROXY
DOMAIN-SUFFIX,featuregates.org,PROXY
DOMAIN-SUFFIX,intercom.io,PROXY
DOMAIN-SUFFIX,intercomcdn.com,PROXY
DOMAIN-SUFFIX,sentry.io,PROXY

# Google Gemini - 完整版
DOMAIN-SUFFIX,gemini.google.com,PROXY
DOMAIN-SUFFIX,bard.google.com,PROXY
DOMAIN-SUFFIX,aistudio.google.com,PROXY
DOMAIN-SUFFIX,generativelanguage.googleapis.com,PROXY
DOMAIN-SUFFIX,proactivebackend-pa.googleapis.com,PROXY
DOMAIN-SUFFIX,alkalimakersuite-pa.clients6.google.com,PROXY
DOMAIN-SUFFIX,makersuite.google.com,PROXY
DOMAIN-SUFFIX,deepmind.com,PROXY
DOMAIN-SUFFIX,deepmind.google,PROXY
DOMAIN-SUFFIX,notebooklm.google.com,PROXY
DOMAIN-SUFFIX,notebooklm.google,PROXY
DOMAIN-SUFFIX,ai.google.dev,PROXY
DOMAIN-SUFFIX,notebooklm-pa.googleapis.com,PROXY
DOMAIN-SUFFIX,oauth2.googleapis.com,PROXY

# Google 通用服務(Gemini 會用到)
DOMAIN-SUFFIX,oauthaccountmanager.googleapis.com,PROXY
DOMAIN-SUFFIX,people-pa.googleapis.com,PROXY
DOMAIN-SUFFIX,lh3.googleusercontent.com,PROXY
DOMAIN-KEYWORD,gemini,PROXY

# DNS Leak
DOMAIN-SUFFIX,dnsleaktest.com,PROXY
DOMAIN-SUFFIX,dnsleak.com,PROXY
DOMAIN-SUFFIX,expressvpn.com,PROXY
DOMAIN-SUFFIX,nordvpn.com,PROXY
DOMAIN-SUFFIX,surfshark.com,PROXY
DOMAIN-SUFFIX,ipleak.net,PROXY
DOMAIN-SUFFIX,perfect-privacy.com,PROXY
DOMAIN-SUFFIX,browserleaks.com,PROXY
DOMAIN-SUFFIX,browserleaks.org,PROXY
DOMAIN-SUFFIX,vpnunlimited.com,PROXY
DOMAIN-SUFFIX,whoer.net,PROXY
DOMAIN-SUFFIX,whrq.net,PROXY

# 本地網路直連
IP-CIDR,192.168.0.0/16,DIRECT
IP-CIDR,10.0.0.0/8,DIRECT
IP-CIDR,172.16.0.0/12,DIRECT
IP-CIDR,127.0.0.0/8,DIRECT
IP-CIDR,169.254.0.0/16,DIRECT
IP-CIDR,224.0.0.0/4,DIRECT
IP-CIDR,FE80::/10,DIRECT
DOMAIN-SUFFIX,local,DIRECT

# Final
FINAL,DIRECT

[Host]
localhost = 127.0.0.1

[URL Rewrite]


然後貼到 Shadowrocket 的 config file 裡面。

記得要 replace 上去,也就是在 config file 先 Select All 之後再 Paste


步驟 4:啟用並測試

  • 返回 Shadowrocket 主頁
  • 選擇你剛創建的 Mullvad 節點
  • 確認你已經打開 VPN,而且 Global Rules 選擇為 Config

測試方法:

  1. 打開瀏覽器搜尋 "my ip address",看看是不是還在香港,是的話就 OK 沒問題(因為沒有經過 VPN)
  2. 之後再去 ChatGPT、Gemini,應該可以正常使用
gemini

恭喜!到了這一步,你已經成功了 🥳🤩👏


快速步驟總結

1️⃣ 購買 Shadowrocket($22)

2️⃣ 從 Mullvad 網站生成 WireGuard 配置

3️⃣ 在 Shadowrocket 新增 WireGuard 節點

4️⃣ 新增分流規則(複製上面的規則列表)

5️⃣ 啟用並測試連接

6️⃣ 根據需要調整規則