使用 Surge DNS Script 自動切換本地 DNS

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

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

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

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

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

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

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

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

/media/2020/08/7gX2iaJlap3O23.png

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

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

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

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

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

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

/media/2020/08/h23x038uxKxIQ8da.png

繼續如下圖步驟設定

/media/2020/08/B2zj3Ox69jLla1.png

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

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

/media/2020/08/K128xawtrux7903nvG.png

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

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

1
2
[Host]
* = script:SSID-DNS

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

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

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

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

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

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

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

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