Tor 與 VPN 怎麼選?你真正需要哪一個
Tor 與 VPN 解決不同問題:逐跳查看 ISP、VPN 業者與網站各自能看到什麼,並了解以你名義租用的 VPS 為何不能提供匿名性。
Tor 與 VPN:你實際需要哪一個
Tor 與 VPN 都會將你的網路流量經由不屬於你的機器傳送,但兩者要解決的問題不同。VPN(virtual private network,虛擬私人網路)會將信任對象從網際網路服務供應商轉移到單一公司,而該公司可以看見你的實際位址,以及你造訪的每個目的地。Tor 會將信任分散到由不同人員運作的 3 個中繼站,因此沒有任何單一中繼站同時知道你的身分與目的地。請先明確指出你要隱藏對象,再選擇工具。
如果你要隱藏的是你所在的網路,VPN 是適合的工具。如果你要隱藏的是網站本身,或任何能要求單一公司提供紀錄的人員或機構,Tor 是適合的工具。本指南其餘內容會詳細說明這兩句話背後的原因。
沿著兩種設計追蹤一個請求
先看一個一般的請求:瀏覽器開啟 https://news.example.com。無論採用哪種設計,TLS(傳輸層安全性)都會保護頁面內容,因此中間的任何人都無法讀取文章。關鍵在中繼資料:誰能得知你的 IP 位址、誰能得知目的地,以及誰能將這兩項資訊關聯起來。隱私工具的作用,就是將這兩項資訊分開。VPN 會將這兩項資訊轉交給另一個持有者。Tor 則會將兩者拆開。
使用 VPN 時各方能看到的資訊
你的用戶端會加密每個封包,並將它們傳送至一個端點。從該端點開始,流量會恢復為一般流量。
- 你的 ISP(internet service provider)會看到你的線路與一個 VPN 伺服器位址之間的加密封包。它能看到流量大小與傳輸時間。只要 DNS(domain name system)查詢也經過 tunnel,它就看不到目的地主機名稱。
- VPN 業者會在一側看到你的真實 IP 位址,在另一側看到每個目的地位址,以及傳輸時間與資料大小。這兩半連線都會抵達同一台機器。
- 目的地會看到 VPN 的出口位址,以及瀏覽器傳送的所有識別資訊。
因此,VPN 不會建立匿名性。它只是將觀察者從 ISP 移到 VPN 業者。當問題出在本地網路,或 ISP 會過濾或轉售它看到的資訊時,這確實有幫助。但對你造訪的網站完全沒有幫助,因為你的流量仍會從一家確切知道你身分且持有付款紀錄的公司,以單一串流抵達該網站。
「no logs」宣稱就是整項產品的核心,也是你無法從自己這一側查證的部分。你可以確認 tunnel 已建立。你可以確認 DNS 沒有洩漏。但你無法確認業者寫入磁碟的內容。這就是你接受的交換條件:由你選擇的一家公司持有完整的連線資訊。
請檢查這個會悄悄讓 tunnel 失效的洩漏問題:
resolvectl status
curl -s https://ifconfig.me; echoifconfig.me 顯示的位址應該是 VPN 出口位址。承載預設路由的連線所列出的 DNS 伺服器,應該是 tunnel 的解析器。如果在 192.168.1.1 仍列出你的本地路由器,表示名稱查詢正以明文經由本地連線離開。原因是通往該路由器的路由屬於同一網段,且比 tunnel 的預設路由更具體。你的流量是私密的,但造訪的網站清單不是。從 WireGuard tunnel 洩漏的 DNS 查詢會逐步說明修正方法。
使用 Tor 時各方能看到的內容
Tor 會從由少數目錄授權單位發布、經簽署的中繼清單(共識)中,選出 3 個中繼建立電路。用戶端會將資料分成多層,每個中繼各對應 1 層。每個中繼只移除 1 層,只知道下一個躍點,然後繼續轉送其餘內容。正因為有這些加密層,路徑上的任何一方都不會同時掌握這 2 項資訊。
- 你的 ISP 會看到通往 1 個 guard relay 的加密流量。由於中繼位址是公開的,ISP 可以判斷你正在使用 Tor,但無法知道你要連線到哪裡。
- guard relay 會看到你的真實 IP 位址,但無法看到目的地,因為訊息中標示網站的部分,仍以供後續中繼使用的金鑰加密。
- middle relay 會看到一側是 guard,另一側是 exit。它看不到你,也看不到目的地。它的作用是讓 guard 與 exit 不會直接通訊。
- exit relay 會看到目的地,以及流量離開網路時的內容。它看到的是 middle relay 的位址,而不是你的位址。使用 HTTPS 時,它會得知主機名稱與連線中繼資料,但看不到頁面內容。
- 目的地會看到 exit relay 的位址。該位址會出現在公開的 exit 清單中,此外還能看到瀏覽器傳送的內容。
要將你與網站連結起來,必須同時控制 guard 與 exit。這就是 Tor 設計的核心。這也是用戶端會連續數月使用相同 guard,而不是每次啟動都選擇新的 guard 的原因:持續更換入口,會讓惡意中繼反覆取得成為你 guard 的機會。
電路不是永久存在的。新的連線大約每 10 分鐘改用新的電路;已經建立的串流則會繼續使用開始時所採用的電路。長時間下載的連線,與 15 分鐘後開啟的分頁,通常會經由不同的 exit 離開。
3 個躍點如何在不讓任何中繼得知其他中繼的情況下建立
用戶端不會將中繼清單交給 guard。它會先與 guard 協商金鑰,接著透過 guard 傳送要求,請 guard 將電路延伸到 middle relay;然後再透過該躍點傳送下一個要求,將電路延伸到 exit。每個中繼只會得知下一個必須通訊的鄰近中繼,而且每個躍點都有自己的金鑰,其他躍點都無法看到。這就是 middle relay 無法僅透過檢視內容判斷 exit 角色的原因,也說明了即使中繼記錄所處理的全部內容,仍只會記錄其中一段。
安裝後確認路徑:
sudo apt update && sudo apt install -y tor
systemctl status tor@default
journalctl -u tor@default -n 20
curl --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/api/ip日誌應該會到達 Bootstrapped 100% (done): Done。curl 應顯示 {"IsTor":true,"IP":"..."},以及一個你不認識的位址;該位址就是目前的 exit。如果 IsTor 是 false,表示要求從未經過 proxy。Ubuntu 套件庫中的 Tor 可能落後目前版本;如果需要追蹤上游版本,Tor Project 提供自己的 apt repository。
這個指令中有一個容易忽略的問題。--socks5 會讓 curl 自行解析主機名稱,再將解析出的位址透過 proxy 傳送,因此你使用的普通 resolver 會得知造訪的每個名稱。--socks5-hostname 則會將名稱傳給 Tor,讓 exit 進行解析。兩者使用的是相同的通道,但會造成完全不同的資訊洩漏。Tor Browser 與 torsocks 會正確處理這項設定。手動設定的工具通常不會。
Tor 只承載 TCP 串流,無法承載 UDP,因此 ping 1.1.1.1 不會經過 Tor,使用 UDP 的 VPN 通訊協定也無法在其中執行。任何忽略 proxy 設定的程式,都會使用你原本的路由與原本的位址,而且不會顯示任何警告。因此,系統範圍的 Tor 通常會在獨立主機上使用 transparent proxy,而不是透過環境變數設定。
實際上,信任落在哪裡
VPN 會集中信任。一家公司掌握你的身分、帳務紀錄與完整的流量模式,而你的保護取決於它承諾不保留日誌。只要這項承諾成立,這種設計就清楚、快速,也容易理解。承諾一旦因傳票、資料外洩或謊言而失效,所有流量的保護就會同時完全失效。
Tor 會分散信任。3 個大致互不相識的參與者各自持有一部分資訊,而單獨的一部分價值很低。這套設計不要求任何一方都必須誠實,只要求其中足夠多的參與者彼此獨立。代價是速度較慢、只能使用 TCP,並且網路中確實有部分 relay 是由想監控你的操作者執行。Tor 對抗惡意 relay 的方式是:單一 relay 永遠不夠。
VPN 適合使用的情境
- 你不信任目前所在的網路,例如飯店、機場、會議場所或房東提供的路由器。網路營運者只能看到加密通道,看不到其他內容。
- 你想連線到自己的機器,或從自己控制的固定 IP 位址對外連線。
- 你需要速度與 UDP,例如視訊通話、遊戲、大型檔案傳輸及備份。
- 你需要不會被網站質疑的穩定 IP 位址。整個網際網路上有許多網站封鎖 Tor exit,或要求通過 CAPTCHA。
以上情境說明了為何應在 VPS 上自行執行 VPN,而不是購買訂閱服務;而自行設定 WireGuard 伺服器,則能提供一條由你擁有設定檔、並由你決定日誌記錄政策的通道。如果你希望在相同通道上加入裝置對裝置的金鑰管理,請閱讀純 WireGuard 與 Tailscale 的差異。加入 tailnet 後,連線到自己的服務,以及將其中一項服務發布到公開網際網路,是兩個不同的決策;serve 會讓服務維持在 tailnet 內,funnel 則會將服務公開。這些工具都非常適合處理上述情境。但它們都無法處理下一節的情境。
何時適合使用 Tor
- 威脅模型包含目的地網站,或任何能向單一公司要求紀錄的人。
- 你正在閱讀或發布某些內容;如果這些行為能追溯到你的網路線路,將對你造成傷害。
- 你需要 onion service:流量不離開 Tor network、不涉及 exit relay,且伺服器的位址維持隱藏。
- 你能接受頁面載入緩慢、CAPTCHA,以及偶爾出現
403 Forbidden。
如果你對上述第三點的伺服器端實作感興趣,在 VPS 上執行 v3 onion service 說明如何在路徑中不使用 exit relay 的情況下連線至網站,以及哪些一般性的資訊洩漏仍會將該機器與其公開位址關聯起來。
請使用 Tor Browser,不要使用日常瀏覽器直接連到埠 9050。瀏覽器是防護的一半,後後一節會說明原因。
為什麼你租用的 VPS 在匿名性方面不如商業 VPN
這是人們常常弄反的情況。你租用的 VPS 是一份登記在你名下的租約。註冊電子郵件、付款卡片、發票與支援工單,都會和該 IP 位址一起留在同一家公司的資料庫中。無須破解任何系統,就能將該位址與你連結。這些資料本來就已經被記錄,基於一般會計理由保存,也能提供給任何具法律效力要求的服務提供者詢問。
第二個問題是使用者群體。商業 VPN 的出口位址會在同一時間由許多客戶共用,因此單憑該位址無法指向某一個人。你的 VPS 位址只屬於你。所有從該位址發出的請求,今天是你,下個月仍是你;而且位址不會輪替,因此目的端即使完全不使用 cookie,也能跨越數月建立你的活動特徵。
這些都不代表自架 VPN 不好。它非常適合在你無法控制的網路上加密流量,也適合從任何地方連回自己的服務。它只是匿名工具,而將它當作匿名工具使用才是問題所在。若要了解服務提供者在該主機本身能看見和不能看見哪些內容,請參閱 VPS 託管實際上有多安全。
Tor 與 VPN 都無法解決的問題
- 瀏覽器指紋。使用者代理程式、螢幕大小、時區、已安裝字型、語言與 canvas 繪圖結果會組合成一個通常具有唯一性的值,而且無論你使用哪個 IP 位址,這個值都會跟著你。Tor Browser 會讓使用者彼此看起來一致,並以固定幅度調整視窗大小,以降低這項風險。透過 SOCKS proxy 使用一般瀏覽器時,瀏覽器指紋與 cookies 仍會保留。
- 登入。只要登入知道你姓名的帳戶,網路層便不再重要。從家中登入一次,再透過 Tor 登入同一個帳戶,兩個工作階段就能被關聯。
- 端點本來就會記錄的任何內容:你輸入的文字、購買的項目,以及搜尋的內容。
- 端對端關聯。若有人同時監看你的連線與出口端,就能比對時間與封包量,並配對兩端的流量。Tor 明確表示,它無法防禦能看見兩端的對手。
可以同時使用 Tor 和 VPN 嗎?
Tor over VPN 表示先連線到 VPN,再在其中執行 Tor。如此一來,ISP 只會看到 VPN,而 guard relay 看到的是 VPN 的位址,不是您的位址。但您也把一家持有姓名與付款卡資料的公司放在一個原本就是為了避免這類識別而設計的系統前面。只有在一種情況下值得這麼做:您的網路環境會因使用 Tor 而面臨風險,且沒有更好的選項。
VPN over Tor 是指流量離開 Tor network 後再進入 VPN 帳戶。這種方式較難設定,通常也更差。該帳戶附有您的付款紀錄,因此您將一個穩定的身分,繫結到前一刻仍為匿名的流量。
如果目的只是向 ISP 隱藏 Tor 的使用情形,支援的做法是使用 bridge:這是一個不在公開共識中的入口,再搭配 obfs4 或 Snowflake 等 pluggable transport,讓流量難以分類。Tor Browser 內建這兩者,不需要讓第三方公司取得您的姓名。
FAQ
Tor 只是免費的 VPN 嗎?
不是。VPN 會將網路流量經由單一公司營運的伺服器傳送;該公司可看到你的實際位址與所有目的地,因此只是將 ISP 換成你選擇的提供者。Tor 會將流量經由由不同人員營運的 3 個中繼站傳送。入口中繼站可看到你,但看不到網站;出口中繼站可看到網站,但看不到你。Tor 也僅支援 TCP,速度明顯較慢,且許多網站會封鎖或要求額外驗證。因此,Tor 不是 VPN 日常用途的直接替代方案。
我的 ISP 能知道我正在使用 Tor 嗎?
預設可以。中繼站位址會公布在公開共識中,因此 ISP 可看到你正在連線到已知的 guard 中繼站。ISP 看不到你連線到哪些網站。若要隱藏使用 Tor 的事實,Tor Browser 提供搭配可插拔傳輸的 bridges,例如 obfs4 或 Snowflake。這些 bridges 會經由未列在公開清單中的入口點連線。在 Tor 前方使用 VPN 也能向 ISP 隱藏 Tor,但相同資訊會轉而交給 VPN 業者。
在自己的 VPS 上執行 VPN,能讓我匿名嗎?
不能。伺服器以你的名義租用,並使用你的卡片付款,因此提供者的帳務紀錄已將該位址與你連結;只要向提供者提出要求,就能取得這些紀錄。該位址也只有你使用,因此所有離開該位址的流量都屬於同一人,只要你持續保留伺服器,就能持續建立關聯。自行託管的 VPN 能有效防範區域網路的窺探,但無法有效防範可向提供者提出調查要求的對象。
為什麼我使用 Tor 時,網站會封鎖我或顯示 CAPTCHA?
因為出口中繼站位址是公開的,且由大量使用者共用。任何一名使用者造成的濫用行為,都會影響你借用的位址。內容傳遞網路會給這些位址較低的信譽評分,並回應驗證挑戰、403 Forbidden 或拒絕提交的註冊表單。你無法在本機端消除這種情況。建立新的 circuit 會取得不同的出口,有時能獲得較佳的信譽。
使用 VPN 後,DNS 查詢仍可能外洩嗎?
可能,而且很常見。若使用完整通道,且未為通道介面設定 resolver,客戶端會繼續使用從區域網路取得的 resolver。由於通往該 resolver 的路由位於本機鏈路上,因此會優先於通道的預設路由。這會使 DNS 查詢以明文離開,而其他流量仍經過加密。執行 resolvectl status,確認承載預設路由的鏈路所列出的 DNS 伺服器是通道的 resolver,而不是區域網路的路由器。