最近在 iPhone 跟 iPad 上都是使用 Surge 來最佳化設備上的網路與調整線路

而因為在家中跟辦公室都有搭建自己本地的 AdGuard Home,外出時想要連到 NextDNS DoH

自己每次動手切換實在太煩了,也不可能每次都記得

Surge 目前版本還沒有內建提供自動根據網路環境切換 DNS Server 的功能

所以昨天在推特上亂入問了作者,作者回覆可以使用 Surge DNS Script 來完成這個功能

於是就自己動手寫一段簡單 Script 來完成

下面就記錄一下設定過程,有需要的人可以照著設定即可

首先先設定一下會在外出時要連線的 DoH,推薦 NextDNS 或者 FutaDNS,也可以同時設定兩組互相備援

接下來新增一個 DNS Script 進去,請先拷貝下面的 Script

其中第一行的「SSID1」跟「SSID2」請根據你的實際的 SSID 來修改

寫在這裡的 SSID,Surge 會直接使用該網路內 DHCP Server 分發下來的 DNS Server 來解

不會連到你上面設定的 DoH Server,如此即可做到根據 SSID 來自動切換 DNS Server 的簡易功能

if ($network.wifi.ssid === 'SSID1' || $network.wifi.ssid === 'SSID2') {
$done({servers:$network.dns})
} else {
$done({})
}

拷貝以上內容後,接著回到 Surge 準備新增一個本機腳本

繼續如下圖步驟設定

如上圖,看著數字步驟設定即可,再次提醒:步驟 4 貼上的 Script SSID 請記得修改成你自己的

接著回到 Surge 主畫面,要進入文字編輯模式手動修改一下設定檔

在文字編輯模式中,請先上下滑動看看你設定檔裡面有沒有 Host 區塊?

如果沒有的話,請在隨意兩個區塊中間自己插入新增以下內容

[Host]
* = script:SSID-DNS

👆 新增完以後,記得按下右上角的「完成」

完成以上設定以後,你的 Surge 就已經具備自動切換 DNS Server 功能了

你可以自己切換 WiFi 跟行動網路測試看看,檢查 NextDNS log 或者 AdGuard Home log 之類的

如果沒意外,應該已經如你所想正常工作了

一開始以為用這種方法每次連線都要跑一次這個 Script 不夠優雅效能會有所犧牲

但可能這個 Script 判斷很少,執行起來速度極快

我測試一天後發現沒什麼區別,至少我感覺不出來網路有變慢的情況

在 Surge 還沒實作出這個功能以前,可以暫時用這個 DNS Script 頂著先 🖖