我最早接觸 Surge 是在 2015 年 iOS App Store 剛上架就第一批入手了~

當時我人在中國,翻牆就跟吃飯、喝水、睡覺一樣是每天都需要的

記得當時蘋果 iOS 8 剛剛開放了 NetworkExtension framework

Surge 橫空出世最早支援 NetworkExtension,多樣且自由的網路策略非常強大,也是當時最佳 iOS 翻牆工具

隨著時間也有其他開發者也漸漸投入研究蘋果這種系統等級的網路框架,App Store 上漸漸多了許多選擇~

像是小火箭(Shadowrocket)、小氣球(Loon)或者圈叉(Quantumult X),都是同類相當不錯的競品

其中又以圈叉特別厲害,最早開始支援 Scripting 的功能

後來 2016 年時候我因為搬回台灣,台灣網路無需翻牆,所以瞬間就沒有繼續用下去的動力了。。。

Surge 作者在去年的時候推出一個密碼管理工具「Elpass

所以從去年那時候開始我又會三不五時看到作者在 Surge 開發的相關進度

最近會又開始用回 Surge 是因為發現作者加入一系列強大功能

如支援 MitM、Scripting、專屬 Snell 協議與快速設定的 Module 功能。。等等

玩法已經不僅僅是翻牆代理工具而已,已經是一個功能強大完整的「網路工具」了~

強大的 iOS 平台網路工具一下吸引許多寫 Script 的大佬們投入研究,像是有針對 Netflix 的 Script

在非越獄情況下可以在官方 Netflix App 影片介紹頁,直接顯示 imdb 與 douban 的第三方評分分數

👆 如上,左邊是原本 App 內的樣子,右邊是開啟 Script 以後的樣子,紅色框框就是

類似像這種強大 Script 都有人分享在 Github 上面,沒事去多搜尋一下,你會發現新大陸

購買 Surge 前你需要了解的「功能訂閱」

不像傳統軟體「單版本買斷」的方式,Surge for iOS 採用了一種「功能訂閱」的授權方式

第一次購買解鎖門檻是 49.99 美金(可裝在三台設備上)

購買後一年內所有新增的功能你都會自動解鎖,並可以終身使用

Surge for iOS 以後也不會推出 v5 v6 v7 v8 之類的大版本升級,會一直維持在目前基礎上持續更新並加新功能

也就是說你解鎖過的功能都可以一直使用下去,也能持續收到作者第一時間的更新或者增強

包含了未來 iOS 14 或者 iOS 15 以上的系統適應、安全穩定性補強之類的

所以你也不用擔心你今天購買的 Surge 一年訂閱期到期或者 iOS 14 15 蘋果大改系統而不能繼續使用下去

而一年訂閱期後,你原先已經解鎖的功能,就算你不續訂還是能繼續用下去

唯獨訂閱期過後,作者才新增進去的新功能,你將會無法使用,想要使用新功能的話

續約一年只有 14.99 美金而已,同樣在一年內作者所有新增的功能你也會自動解鎖終身使用

好像很難懂?另外舉個例子好了。。。

你今天買了一套 PS4 遊戲 49.99 美金裡面還包含了一年的季票,一年內除了遊戲本體可以無限終身玩以外

一年內所有開發商新增的 DLC 你都可以免費解鎖,一旦解鎖同樣也是無限終身暢玩~

假設一年內開發商新增了 DLC 1 ~ 3,那麼本體跟 DLC 1 ~ 3 你就可以無限玩,沒有時間限制

一年後廠商新增的 DLC 4 你不滿意,你也可以選擇跳過不買單

但不會影響到你原先遊戲本體跟之前一年解鎖的 DLC 1~ 3

一直到廠商某天推出到 DLC 8,你覺得好強好想玩!你可以選擇再購買一年季票 14.99 美金

購買後,你中間錯過的所有 DLC 將會自動補齊解鎖,也就是你再次入場時,你將會獲得 DLC 4 ~ 8

而且同樣購買後一年內所有新加的 DLC 你也會繼續自動解鎖獲得~

看明白了嗎?這種授權方式對使用者來說真的很讚!

不用擔心自己今天購買的軟體,到了明年或者後年因為開發商推出了跨版本新的 app,拋棄了舊的 app

導致你在新的作業系統無法繼續使用下去了~我真希望有更多 App 能跟進這種授權模式就好了!

Surge for iOS 如何買?

Surge for iOS 目前有兩種購買方式,一種是直接在 App 裡面透過 IAP 購買,一種是透過 Surge 官方網站購買

但台灣的 App Store 因為有稅的關係,直接 IAP 的話會是 1690 台幣

官網購買是 49.99 美金,換算下來大約是 1500 台幣而已,用一張海外回饋高的信用卡,實際數字會更低

而購買成功的話,還可以馬上在官網申請 Testflight 測試版資格

如果是 App Store IAP 的話則要等 90 天

所以推薦直接透過 Surge 官網購買,比較便宜又快速~

Surge for iOS 初步設定

很多人看到上圖這畫面,都不知道要怎麼開始。。。

以下一步步教你簡單初步設定,一直到可以安裝別人寫好的模組(Module)

首先先把「Rewrite」、「MitM」跟「腳本」三個區域的「開關」都打開

如上圖,另外還要打開 Surge 的通知功能,在 Surge app 裡面右下角的「更多」->「通知」->「允許通知」

接下來準備開始配置 MitM 的根證書,按下「配置根證書」的按鈕

👆 第一次安裝還沒有證書,按下「生成新的 CA 證書」

Surge 這時候會隨機產生一個 CA 證書,接著要在設備上安裝這個證書

按下「安裝證書」後會跳到 Safari 瀏覽器中下載證書

接著打開 iOS 中的設定,就會看見「已下載描述檔」,點進去

之後就根據系統指示,一步一步安裝起來,安裝過程可能會需要輸入你設備的解鎖密碼

安裝完畢後,再來要信任根證書:設定 > 一般 > 關於本機

👆 找到憑證信任設定

👆 在設定中打開信任後,回到 Surge 就會發現已經完成證書安裝

此時 MitM 功能的設定就已經全部完成~

再來按下 Surge 右上角的「啓動」按鈕,根據提示加入 iOS 系統 VPN 即可

以上至此,初始的準備動作已經完成,現在已經可以開始去安裝別人已經寫好的 Module 囉!

👆 依照上圖步驟,準備開始安裝模組

接下來安裝 Netflix 查看評分的模組,拷貝以下網址:

(拷貝時可能最後會多一個空格,在貼上後要刪掉多餘的空格)

https://kinta.ma/surge/modules/netflix_rating.sgmodule

👆 拷貝網址貼上,然後完成安裝

模組安裝完畢後,Surge 會去抓會用到的 Script 跟調整你的設定,稍等幾秒鐘之後

打開 Netflix app 隨便找一部影片進去看簡介,準備見證奇跡,嘩啦!

👆 看見中間紅色圈起來的部分,就是模組腳本正常運作啦!

想要找更多模組開發出更多暗黑原力,可以到 Github 找找,快速通道: 戳我

日後要更新模組跟腳本請參考這篇:如何更新 Surge for iOS 裡安裝的各種模組與外部資源腳本?

同場加映:Surge 專屬加密代理 Snell 搭建

Surge 作者另外提供了一個專屬的福利給使用者,閉源的代理服務「Snell

具有混淆加密、TLS、TCP Fast Open。。等功能

但因為閉源的關係,所以用不用在你,不信任的話可以不要用,或者使用 Trojan-Go 這種開源協議也可以

另外也有人稍微逆向了 Snell 協議,有興趣可以去看看: https://github.com/icpz/snell-server-reversed

Snell Server 安裝跟設定異常的簡單,下面來介紹安裝以及使用方法(適用 Ubuntu & Debian)

# SSH 登入進要安裝 Snell Server 的主機
$ ssh username@serverip
# 更新以及安裝軟體
$ sudo apt update && sudo apt full-upgrade -y
$ sudo apt install wget unzip -y
# 到官網拷貝找新版下載網址 https://github.com/surge-networks/snell/releases
$ wget https://github.com/surge-networks/snell/releases/download/v2.0.3/snell-server-v2.0.3-linux-amd64.zip
# 解壓縮以及給予執行權限
$ unzip snell-server-v2.0.3-linux-amd64.zip
$ chmod +x snell-server

以上就完成準備工作,接下來開始安裝跟設定

$ ./snell-server

👆 第一次執行時會問你要不要自動幫你產生設定檔

此時 Snell 會在你目前目錄寫一個設定檔 snell-server.conf

可以 nano 稍微進去看一下,設定的內容很簡單,只有四行,就是幫你亂數產生一個 PSK 跟使用的 Port

還有 obfs 流量混淆方式,預設是 http,你可以改成 tls

1
2
3
4
[snell-server]
listen = 0.0.0.0:17715
psk = HMgRLi6Qvf0NfRwYC1xLrimWyZPGiGe
obfs = tls

接著我們把執行檔跟設定檔放到指定的位置,並開啟開機自動啓動 Snell Server

$ sudo mv snell-server /usr/local/bin/
$ sudo mv snell-server.conf /etc/

新建一個開機啓動的 Snell service 設定檔

$ sudo nano /etc/systemd/system/snell.service

拷貝以下內容貼到 snell.service 裡面,退出前記得保存

[Unit]
Description=Snell Proxy Service
After=network.target

[Service]
Type=simple
User=nobody
Group=nogroup
LimitNOFILE=32768
ExecStart=/usr/local/bin/snell-server -c /etc/snell-server.conf
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=snell-server

[Install]
WantedBy=multi-user.target

接著使用以下指令啓動 Service

$ sudo systemctl enable snell.service
$ sudo systemctl start snell.service
# 可以用下面指令檢查啓動的狀態
$ sudo systemctl status snell.service

啓動完畢後,機器上防火牆要設定一下

# Port 號碼請修改成你自己 Snell 設定檔的,勿照抄
$ sudo iptables -I INPUT -p tcp -m tcp --dport 17715 -j ACCEPT
# 裝個 iptables-persistent 套件,讓機器重開機防火牆還維持有效
$ sudo apt install iptables-persistent

如果是家中或者辦公室也別忘記在 Router 上面設定一下 Port Forward

至此 Snell Server 所有的設定就完成了~

現在準備在 Surge 設定裡面加上你搭建的 Snell Server 資料

上面這樣填好以後,就能連回你的 Snell Server 了

來個接近現實生活的場景應用:

  • 使用公司或家中的 WiFi 就直連,出門在外連不認識 WiFi 或者行動網路會自動透過 Snell 回去
  • 透過 Snell 連回的時候需要能連內部網路的設備(內網 IP 段是 192.168.33.0/24)

下面是示範設定檔片段(Surge 內建文字編輯,可以不需透過 GUI 快速拷貝粘貼設定)

[Proxy]
Office = snell, office.domain.com, 17715, psk=HMgRLi6Qvf0NfRwYC1xLrimWyZPGiGe, obfs=tls, version=2, tfo=true

[Proxy Group]
Auto = ssid, default = Office, "OfficeSSID" = DIRECT, "OfficeSSID2" = DIRECT

[Rule]
IP-CIDR,192.168.33.0/24,Office,no-resolve

以上設定完畢後,Surge 會自動根據你的 SSID 變化自動切換網路連線

並且你隨時也都能連回內部網路的設備,類似之前寫過的 IKEv2 VPN on demand,不過這次是 Surge 實現

如此設定完,舒服了~

Surge 的功能不僅如此,想要了解詳細的功能可以參考官方說明書: https://manual.nssurge.com

目前台灣使用 Surge 的人還是非常少,本篇僅僅作為拋磚引玉

希望能有更多人看到這類工具,開發出更多更實用的腳本或者應用喔~ 🖖