Shadowsocks 在網際網路的歷史中佔據著一個奇特的角落:一個由身在中國的單一開發者在 2012 年寫成、以開源釋出的代理,被數以百萬計的人悄然採用,成了突破防火牆的主力。它不斷被拿來和 VPN 比較,而且通常問的是錯誤的問題——「哪個比較好?」——但這兩者其實並不是在做同一件工作。

簡短回答:Shadowsocks 是一種加密代理,設計目的是在不被辨識的情況下,把流量送過國家級防火牆。VPN 則是為你整台裝置打造的加密隧道,設計目的是讓你免於所在網路的窺探。兩者有所重疊,但它們應對的是不同的威脅——而正確的選擇,取決於哪一種威脅才真的是你的。

重點摘要

  • Shadowsocks 是一種為突破審查而打造的加密 SOCKS5 代理;它從來就不是作為一款隱私產品設計的。
  • 它的把戲在於看起來什麼都不是:沒有交握特徵、沒有通訊協定標頭,只有毫無特徵的加密位元組。
  • VPN 涵蓋裝置上的每一個 App,並對洩漏與斷線有標準化的處理方式;代理的設定則五花八門。
  • 現代防火牆學會了標記那種「看起來什麼都不是」的流量,所以經典的 Shadowsocks 不再是一張免費通行證。
  • 依威脅模型來選:抗審查、整台裝置的隱私,或者——越來越常見的——在同一款 App 裡兼得兩者。

Shadowsocks 究竟是什麼

2012 年,一位以 clowwindy 為名寫作的開發者,發布了一個小工具,用來把個人流量送過中國的國家級防火牆。2015 年,在當局的壓力下,他刪除了程式碼並退出。這個專案以社群維護的實作形式存活下來,並自此持續積極開發——它也是 Outline 這類工具的基礎。這段起源故事完整地解釋了它的設計:Shadowsocks 是由一個其問題在於防火牆、而非廣告商的人所打造的。

從機制上看,Shadowsocks 是一對搭檔:你裝置上的一個用戶端,加上某處位於被過濾網路之外的一台伺服器。用戶端透過 SOCKS5——這個標準的代理介面——接收應用程式流量,以現代的認證加密演算法將其加密,再經由伺服器轉送,由伺服器把它送往真正的目的地。

巧妙之處在於缺少了什麼。一條正常的加密連線會宣告自己的存在:TLS 以一個可被辨識的 hello 開場,而 VPN 通訊協定則以一個可被辨識的交握開場。一條 Shadowsocks 代理連線,開場時什麼都沒有。從第一個位元組起,這條串流就是高熵的密文,沒有標頭、沒有標語、也沒有固定的封包大小。沒有特徵可以比對,因為根本沒有結構可看。

它和 VPN 有什麼不同

差別始於兩者各自運作的層級,並由此向外擴散開來。

涵蓋範圍。VPN 在作業系統層級建立一個網路介面,並把整台裝置都路由經過它——每一個 App,包括那些根本沒有任何代理設定的。Shadowsocks 是一個代理:在經典用法中,它承載的是被指向它的那些應用程式。行動端的用戶端模糊了這條界線,方式是把整個系統都路由經過一個本地的隧道介面,但那是你所安裝那個用戶端的功能,而不是這個通訊協定的保證。

失效時的行為。成熟的 VPN App 對那些棘手的問題有標準化的答案:隧道一旦中斷,流量會怎麼樣;DNS 查詢往哪裡去;有沒有什麼東西會從邊緣溜出去。至於 Shadowsocks,這些答案完全取決於你選了哪個用戶端、又是怎麼設定的——當中沒有一項是由通訊協定來保證的。

信任。VPN 服務商是一家你可以透過它的紀錄政策與過往紀錄來評估的公司——這些正是我們在無紀錄政策究竟意味著什麼中審視的東西。Shadowsocks 伺服器通常是自架的,或是向規模不大、往往匿名的轉售商購買的。無論哪一種,都有人在經營那遠端的一頭,並且能觀察到你的流量去往何處。代理並沒有消除信任端點的需要;它改變的是你在信任誰,而面對一個轉售商,你通常對他們一無所知。

如果你想看這個比較更一般化的版本——代理對上 VPN,超出審查的範圍——那就是VPN 與代理伺服器有什麼不同

為什麼它有效了整整十年

深度封包檢測就其核心而言,是特徵比對:辨識出通訊協定,再決定政策。Shadowsocks 沒給它任何可辨識的東西。這讓審查者只剩下兩個不討喜的選項——逐一封鎖目的地位址,這是一場對付廉價租用伺服器的打地鼠遊戲,或是封鎖一切它無法歸類的東西,並承受對一般加密流量造成的附帶損害。

多年來,那份附帶損害都不值得,於是 Shadowsocks 從這道縫隙中溜了過去。而這道縫隙一直在收窄。

為什麼「它還能用嗎?」如今成了一個真問題

有兩種對抗手段改變了局面。第一種是主動探測:當審查系統注意到一條可疑連線時,它們會自己去連上同一台伺服器,測試它如何回應,尋找代理的行為。第二種更為直接。研究人員在 USENIX Security 2023 上記錄了:自 2021 年底以來,中國的防火牆有時就直接丟棄那些首批封包看起來像毫無特徵的高熵資料的連線——而那種結構的缺席,正是當初讓 Shadowsocks 隱形的東西。當審查者認定「看起來什麼都不是」的流量本身就是訊號時,看起來什麼都不是,就不再是一種偽裝。

社群朝兩個方向作出了回應。其一:把 Shadowsocks 包進真正普通的傳輸裡——真實的 TLS 工作階段、WebSocket 連線。其二:乾脆直接模仿真實的通訊協定——trojan 與 REALITY 家族的後繼工具,即便在受到探測時,也呈現為正常的 HTTPS。較新的 Shadowsocks 規範也針對那些抓到舊版本的探測手法,強化了通訊協定本身。這場貓抓老鼠的遊戲仍在繼續;一個簡單工具悄悄地在各地通用的時代,已經結束。

轉向 QUIC

最新的一章圍繞 QUIC 展開——QUIC 是 HTTP/3 底下那層加密的 UDP 傳輸。如今很大一部分的一般網頁流量都是 QUIC,這使它成為絕佳的掩護:一條呈現為 HTTP/3 的隧道,看起來像是日常瀏覽,而非雜訊。這正是搜尋「QUIC VPN」的人真正想找的東西——Hysteria2 與 TUIC 這類較新的繞行工具,搭著 QUIC 取得掩護,並在漫長、易丟封包的路徑上換取效能,而 IETF 的 MASQUE 工作則正在把透過 HTTP/3 進行代理這件事標準化。Apple 用同一脈想法打造了 iCloud Private Relay——iCloud Private Relay 與 VPN 的比較說明了它如何相比。

QUIC 也不是終局。審查者在敏感時期能夠、也確實會整批限速或封鎖 UDP,這會把流量重新推回 TCP 與 TLS 的偽裝。沒有任何一種傳輸能在所有地方都勝出——這正是為什麼繞行工具持續多樣化,也是為什麼那個經久不衰的問題不是「哪一種通訊協定」,而是你的工具能不能換衣服。

你需要的是哪一個?

依你眼前真正的問題來分類:

  • 網路不讓你出去。在 VPN 通訊協定被辨識並丟棄的地方,混淆是決定性的因素,而一個採用預設設定的標準 VPN 通訊協定,可能根本連不上。這是 Shadowsocks 的主場——而同樣的需求,也催生了混淆版的 WireGuard 分支,我們在 AmneziaWG vs WireGuard 中有所介紹。
  • 你想要免於網路與 ISP 窺探的隱私。整台裝置的涵蓋、可預期的 DNS 處理,以及隧道中斷時合理的行為,都比那些奇特的傳輸更重要。那是 VPN 那一欄,也是日常使用的大宗:飯店 Wi-Fi、ISP 的剖析側寫、不受信任的網路。VPN 如何突破網路審查更詳細地畫出了這兩個世界之間的界線。
  • 兩者都要。身處重度過濾網路上的人,通常需要兩者同時兼備:VPN 的涵蓋範圍,加上不會宣告自己存在的流量。在過去,這意味著你得自己用一堆零件拼湊出一套設定。如今,它越來越意味著一款連線本身就開箱即混淆的 VPN。

Snap VPN 從 VPN 這一側切入:底下是 WireGuard,並對連線套用了我們自有的混淆技術,使它不會把一個教科書般的 VPN 特徵遞給檢測系統。我們不公開線路層級的細節——偽裝一旦被記錄下來就老化得很快——但目標正是這整篇比較所指向的那一個:整台裝置的隱私,而且在 VPN 流量遭到獵捕的網路上仍然連得上。

常見問題

Shadowsocks 是 VPN 嗎?不是。它是一種加密代理。行動端用戶端可以把整台裝置都路由經過它,這讓它感覺起來像 VPN,但 VPN App 所標準化的那些保證——裝置層級的路由、洩漏處理、斷線時的行為——並不是 Shadowsocks 通訊協定本身的一部分。

Shadowsocks 還能用嗎?在許多地方、多數時候,是的——但經典的 Shadowsocks 不再享有免費通行證。現代審查系統會標記完全加密的「無結構」流量,並主動探測被懷疑的伺服器,因此目前的設定多半倚賴強化過的規範、TLS 包裝,或後繼的通訊協定。

有什麼比 Shadowsocks 更好?這取決於「更好」需要指什麼。就今天的避免偵測而言,那些模仿真實 HTTPS 或搭著 QUIC 的後繼工具佔有優勢。就一般網路上的日常隱私而言,一款無紀錄的 VPN 才是更簡單、也更完整的工具。

Shadowsocks 安全嗎?加密是穩健的——現代的認證加密演算法、公開的規範。真正的風險落在別處:經營你伺服器的人能看到你的流量去往何處,而從隨機來源下載的用戶端可能被動過手腳。自架解決了前者;只安裝官方版本則解決了後者。

結論

  • Shadowsocks 是一個靠著沒有可辨識形態來運作的抗審查代理。VPN 則是一條涵蓋整台裝置的隱私隧道。
  • 它們應對的是不同的威脅,而「更好」只有相對於你的威脅才說得通。
  • 審查者追上了「看起來什麼都不是」,於是這個領域轉向了看起來像某種真實的東西——TLS、WebSocket、QUIC。
  • 對大多數人、在多數時候,務實的答案是一款 VPN——最好是一款不會向檢測硬體宣告自己存在的。

如果你用的是 iPhone,想要一款執行 WireGuard、會混淆自身連線、又不過問你是誰的 VPN——不需要電子郵件、不需要帳號、也沒有流量紀錄——Snap VPN 已上架 App Store。