SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-30

如何在 VPS 上架設 Tor relay

在 Linux VPS 上設定 guard 或中繼 Tor relay,涵蓋 torrc、保護計量方案的頻寬計算、nyx 監控,以及新 relay 緩慢建立共識的原因。

VPS 上的 Tor relay 做什麼

Tor relay 是執行於具備公開 IP 位址之主機上的 Tor daemon,會替其他人轉送加密流量。Directory authorities 會發布該 relay 的資訊,Tor client 也會透過它建立 circuit。Guard relay 或 middle relay 只會將流量交給另一個 relay,因此不會代替陌生人連線至網站。這也是它不會引來 abuse mail,以及適合一般 VPS 的原因。Relay 會承載其他人的流量,不會發布自己的內容;如果你的目標是將自己的網站放到 Tor network,而不是替網站轉送封包,那麼 在 nginx 後方執行 v3 onion service 是同一個 tor daemon 的另一項用途。執行 relay 也不會提升你自行瀏覽網頁時的隱私,這是另一個問題,而且改善幅度通常低於預期:自架 SearXNG 實際能隱藏什麼,可用來衡量將服務移到自己的 VPS 後,實際能獲得多少隱私。

實際操作很簡單:一個套件、15 行設定、一條防火牆規則,以及一次重新啟動。這份指南其餘內容,說明的都是容易出錯的部分:計量方案下的頻寬計算,以及為什麼狀態完全正常的新 relay 可能會像停止運作一樣持續一週。

Guard、中繼、橋接器或出口:安裝前先決定

同一個 daemon 可執行這 4 種角色。你的設定,以及目錄權威伺服器,會決定你屬於哪一種。

  • 中繼 relay。 接收來自 guard 的流量,再轉送給另一個 relay。它不會直接連線到目的地網站。每個新的 relay 都會先從這個角色開始。
  • Guard relay。 使用相同的設定,再加上一個 flag。目錄權威伺服器會將 Guard flag 授予已持續保持高速且穩定一段時間的 relay。你無法自行選擇。必須靠穩定運作取得,而下方設定就是取得該 flag 的基礎。
  • Bridge。 刻意排除在公開目錄之外的 relay,私下提供給 Tor 遭封鎖地區的使用者。這是 4 種角色中投入最少的一種:低頻寬、不公開列出;如果你的規模很小,這也是合適的第一步。它還需要在 daemon 旁邊執行 obfs4 proxy,並使用另一組 torrc 設定;設定一個 obfs4 bridge,部署在低價 VPS 上會逐步說明,包括最後如何將 bridge line 提供給使用者。
  • Exit relay。 最後一個 hop,負責開啟連往目的地網站的連線。使用者提出的每一個請求都會從你的 IP 位址送出,因此濫用通報與警方查詢都會寄給該位址的擁有者。

Exit 是唯一不適合部署在通用 VPS 上的角色。只有在供應商事先同意接收相關郵件,且具備專用 IP 位址與公開 abuse 聯絡方式時,才應執行 exit。大多數標準主機服務條款都禁止這麼做;忽略規定通常會導致伺服器遭停權,並失去 IP 位址。如果你仍然想執行這項工作,執行 exit relay 的實際工作內容會說明如何尋找支援 exit 的主機商、撰寫 exit policy 與 reverse DNS,以及收到郵件後如何回覆。Guard 或 middle relay 也會承載相同的使用者流量,但不會有上述曝險。

以下內容會建立 guard/middle relay。ExitRelay 0 是讓它維持為該角色的設定行。

VPS 在開始前需要具備的條件

Tor Project 為 relay 訂定了最低要求。截至 August 2026,要求如下:relay 必須具備 1 個公開 IPv4 位址;雙向頻寬至少為 10 Mbit/s,建議為 16 Mbit/s;每月對外傳輸流量至少為 100 GB;頻寬低於 40 Mbit/s 時需要 512 MB RAM,高於 40 Mbit/s 時需要 1 GB RAM。沒有固定的 uptime 規則,但 relay 每天執行時間少於 2 小時,對網路的效益有限。

10 Mbit/s 指的是線路速率,不是設定值。你需要具備能達到這個速率的連接埠。允許 relay 使用多少線路頻寬,是另一項需要根據每月傳輸流量額度決定的設定。修改設定前,先閱讀你的方案內容。如果你仍在選擇主機,VPS 每月實際費用說明傳輸流量額度的計費方式,測量 VPS 的實際網路吞吐量則說明如何使用 iperf3,確認線路的實際效能,而不是直接相信銷售頁面。

先強化主機安全性。relay 是使用公開位址的公開服務,而該位址在公開後幾分鐘內就可能遭到掃描。將 SSH 限制為僅使用金鑰並強化 sshd 設定只需 10 分鐘,應在 relay 上線前完成,而不是上線後才處理。

從 Tor Project 儲存庫安裝 tor

請使用 Tor Project 自有的 apt 儲存庫,不要使用發行版套件。Relay 程式碼的更新速度比穩定版快,因此修正會先進入此儲存庫,而發行版套件要等到下一次發行版更新才會跟上。

sudo apt update
sudo apt install -y apt-transport-https gnupg wget

先加入簽署金鑰,再加入儲存庫。系統會從主機讀取代號,因此同一段設定可用於 Ubuntu 24.04 (noble) 和 Debian 13 (trixie)。

wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \
  | gpg --dearmor \
  | sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/null

CODENAME=$(. /etc/os-release && echo "$VERSION_CODENAME")
echo "$CODENAME"

sudo tee /etc/apt/sources.list.d/tor.sources >/dev/null <<EOF
Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: $CODENAME
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg
EOF

sudo apt update
sudo apt install -y tor deb.torproject.org-keyring
tor --version

tor --version 會顯示剛安裝的版本。如果 apt update 顯示的是 NO_PUBKEY 錯誤,表示已解除封裝的金鑰不在 Signed-By: 行指定的路徑中,因此 apt 沒有可用來驗證發行檔的金鑰。deb.torproject.org-keyring 套件稍後會用到:它會以一般套件的形式提供簽署金鑰,因此金鑰輪替後,apt 仍能正常運作。

啟用自動升級,然後讓自動升級機制識別新的來源。

sudo apt install -y unattended-upgrades apt-listchanges

在 Ubuntu 上,將 Tor 來源加入 /etc/apt/apt.conf.d/50unattended-upgrades 中的 Allowed-Origins 區塊:

Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        "TorProject:${distro_codename}";
};

在 Debian 上,相同檔案使用 Origins-Pattern,要加入的行是 "origin=TorProject";。使用 sudo unattended-upgrade --debug --dry-run 檢查結果;此命令會顯示將套用的來源,且不會寫入任何內容。

torrc 中需要設定的內容

套件會安裝一份冗長且包含大量註解的 /etc/tor/torrc。對 relay 而言,只有少數幾行設定重要。請將它們加在檔案結尾。

Nickname mynicerelay
ContactInfo relay-ops[at]example.com
ORPort 9001
ExitRelay 0
SocksPort 0

Nickname 可包含 1 到 19 個字元,且只能使用字母和數字。它在整個網路中不具唯一性,也不是用來識別您的身分;fingerprint 才是。您會在搜尋欄中使用它尋找自己的 relay,因此請選擇一個能透過電話拼出的名稱。

ContactInfo 會發布在 relay descriptor 中。這是一份任何人都能下載的公開文件,因此該地址會被擷取。請使用兩年後仍會讀取的地址;如有需要,也可以將其模糊處理。Tor Project 只能透過這個管道通知您 relay 發生問題。

ORPort 9001 是其他 relay 和用戶端連線的連接埠。9001 是慣用設定。443 也是常見選擇,因為部分受限制的網路只允許對外連線至 443,因此在該連接埠監聽的 relay 能讓更多用戶端連線。只有在該主機上的其他服務不需要 443 時,才應選擇 443。

SocksPort 0 會關閉本機 SOCKS proxy。relay 不會使用它,因此也能讓主機少一個監聽 socket。ExitRelay 0 會將這項意圖寫入檔案:此 relay 絕不會代替使用者連線至目的地,日後閱讀設定的人也不必從預設值推斷這一點。

如果 VPS 具備 IPv6 地址,請再加入第二行 ORPort。Tor 無法像處理 IPv4 那樣,將 IPv6 綁定至「any」地址,因此請將地址寫在方括號中。

ORPort 9001
ORPort [2001:db8::1]:9001

在 1 GB VPS 上,請加入 MaxMemInQueues 512 MB。Tor 會根據它在主機上偵測到的記憶體決定佇列上限;對小型共用主機而言,這個上限通常高於您希望它使用的數量。自行設定上限後,tor 在記憶體壓力下會捨棄佇列中的 cell,讓 relay 繼續運作,而不是讓佇列持續增長,直到 kernel 終止程序。

在防火牆開放 ORPort

入站方向必須讓 ORPort 可從網際網路上的任何位置連線。出站方向則不要限制 relay:它會在許多不同連接埠上,與數千個其他 relay 建立連線。出站允許清單會在沒有明顯錯誤的情況下嚴重限制其運作。

sudo ufw allow 9001/tcp comment 'tor ORPort'
sudo ufw status verbose

接著檢查供應商自己的網路防火牆。許多控制面板會在虛擬機器前方執行封包過濾器。使用 ufw 新增的規則不會影響該防火牆,因此連接埠在主機上看似開放,從外部卻是關閉的。如果你不熟悉 ufw,每台 VPS 都應設定的 ufw 規則會說明預設政策,以及規則比對的順序。

估算符合方案的頻寬

手冊將 RelayBandwidthRate 說明為獨立的 token bucket,會將「此節點轉送流量的平均輸入頻寬使用量限制為指定的每秒位元組數,並將平均輸出頻寬使用量限制為相同數值」。請仔細讀兩次。此限制會分別套用至兩個方向。設定為 1 Mbit/s 的 relay 可同時以 1 Mbit/s 接收及以 1 Mbit/s 傳送;若供應商會計算兩個方向,計費量就是兩者的總和。

ChartMonthly traffic at a sustained relay rate, both directions, 30 days
The data behind this chart
[
  {
    "label": "1 Mbit/s",
    "torrc_rate": "125 KBytes",
    "gb_per_day": 21.6,
    "gb_per_month": "648"
  },
  {
    "label": "2 Mbit/s",
    "torrc_rate": "250 KBytes",
    "gb_per_day": 43.2,
    "gb_per_month": "1,296"
  },
  {
    "label": "5 Mbit/s",
    "torrc_rate": "625 KBytes",
    "gb_per_day": 108,
    "gb_per_month": "3,240"
  },
  {
    "label": "10 Mbit/s",
    "torrc_rate": "1250 KBytes",
    "gb_per_day": 216,
    "gb_per_month": "6,480"
  },
  {
    "label": "20 Mbit/s",
    "torrc_rate": "2500 KBytes",
    "gb_per_day": 432,
    "gb_per_month": "12,960"
  }
]

這 5 列是算術結果,不是測量值:它們顯示 relay 在兩個方向連續維持該速率 30 天時的流量。實際 relay 大多時間都低於上限,尤其是在前幾週。請用此表排除無法符合方案的設定,不要用它預測精確到 GB 的帳單。

relay 以每個方向 1 Mbit/s 傳輸時,每天約會產生 21.6 GB,因此 30 天的月份約會產生 648 GB 的計量流量。這仍低於 1 TB 額度,並為更新與備份保留餘裕。提高至 2 Mbit/s 後,每月會產生 1,296 GB,已超過 1 TB 方案。最後一列 20 Mbit/s 每月需要 12,960 GB,應使用不限流量的連接埠。若供應商只計算輸出流量,請將所有數值除以 2。設定速率前,先確認採用哪種計費方式,因為兩者的結果相差 2 倍。

接著設定組態。先設定速率限制,再設定配額。

RelayBandwidthRate 125 KBytes
RelayBandwidthBurst 250 KBytes
AccountingMax 400 GBytes
AccountingRule sum
AccountingStart month 1 00:00

RelayBandwidthBurst 是 token bucket 的大小,因此在平均速率不變時,允許短時間超過該速率。設定為速率的約 2 倍是合理值。

AccountingRule 是多數操作人員容易忽略的那一行。預設值為 max,會以兩個方向中較大的流量計算配額。使用預設值時,AccountingMax 400 GBytes 允許輸入 400 GB、輸出 400 GB;對同時計算兩個方向的計量器而言,總量是 800 GB。AccountingRule sum 會將讀取與寫入流量合併計入同一個配額,這才符合流量額度的實際計算方式。

也要寫入 AccountingStart,不要單獨使用 AccountingMax。配額是數值,而 start 行則指定重設配額的週期起點。未指定週期的配額會讓 relay 進入休眠,且沒有任何機制將其喚回。

休眠是一種直接但粗略的措施。配額用盡時,tor 會記錄此事件,並停止接收工作:

Bandwidth soft limit reached; commencing hibernation. No new connections will be accepted

relay 也不會在下一個週期開始的精確時間喚醒。Tor 會追蹤上一個配額消耗的速度,並在新週期內選擇一個隨機時間點,以避免數千個 relay 在同一秒重新加入網路。若 relay 每月最後一週都離線,便會持續失去 directory authorities 評估的穩定性。請將 RelayBandwidthRate 設定為不會達到上限的值,並保留 AccountingMax 作為保護帳單的最後一道限制。

啟動 relay 並確認可連線

sudo systemctl restart tor@default
sudo systemctl status tor@default
sudo journalctl -u tor@default -n 50

幾分鐘內,日誌應包含以下這一行:

Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.

這表示其他 relay 已連回您的 ORPort,並透過它建立 circuit。在這一行出現前,您的 relay 尚未列入 directory,完全不會承載任何流量。失敗時會顯示如下:

Your server has not managed to confirm reachability for its ORPort(s) at 203.0.113.10:9001. Relays do not publish descriptors until their ORPort and DirPort are reachable. Please check your firewalls, ports, address, /etc/hosts file, etc.

請依序檢查。確認 ufw 已開放 ORPort。確認 provider 的獨立 network firewall 也已開放該埠。確認訊息中的 address 是網際網路實際路由至您的位址,而不是 NAT 設定所使用的 private address。使用 nc -vz 203.0.113.10 9001 從另一台機器測試該埠。Tor 會自行重複執行 self-test,因此修正 firewall 後,系統會自行偵測;重新啟動則可立即觸發測試。

您的 relay 具有永久識別身分,即 fingerprint:

sudo cat /var/lib/tor/fingerprint

descriptor 發布約三小時後,relay 會出現在 Relay Search。搜尋 nickname,或貼上 fingerprint。該頁面反映 network 對您 relay 的認知:它具有哪些 flags、authorities 賦予它多少 weight,以及它發布的版本。

為什麼新的 Tor relay 幾乎沒有流量?

因為網路尚未完成對它的測量,而測量需要數週。Tor Project 將這段提升過程分為 4 個階段。未閱讀相關說明的管理員可能會認為 relay 故障,並開始反覆修改設定。

relay 在最初 3 天尚未完成測量。它會回報自身的自我測試結果,但 directory authorities 仍會將已發布的權重限制在 20 KB,因此用戶端幾乎不會選用它。大約從第 3 天到第 8 天,bandwidth authorities 會實際測量它,權重也會逐步增加。不過,它只會被用作 middle hop,因為沒有用戶端願意讓全新的 relay 擔任第一跳。

大約到了第 8 天,relay 便符合取得 Guard flag 的資格。取得此 flag 後,流量反而會下降,這常讓人感到意外:用戶端選擇 middle hop 時會跳過 guard,因為會假設 guard 已經承擔足夠流量。因此,relay 在取得 guard 流量之前,會先失去 middle 流量。只有當用戶端輪換 guard set 後,流量才會逐步恢復,而這需要數週。大約到了第 68 天,它會進入穩定狀態,移除它的用戶端數量會與加入它的用戶端數量大致平衡。

因此,合理的預期是:前 3 天幾乎沒有流量,1 週後開始出現流量,2 個月後才會有實質負載。一次只修改 1 個設定,然後等待 1 週觀察結果。使用 自架的 Uptime Kuma 狀態頁面,並對 port 9001 執行 TCP 檢查,更適合用來消除疑慮。它能回答真正可控制的問題:該 port 是否仍在回應。

使用 nyx 監控 relay

nyx 是用於監控執行中 relay 的終端機工具。它會連線至 tor 的 control port,因此請先在 torrc 中啟用該連接埠:

ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1

ControlPort 僅監聽 127.0.0.1,cookie authentication 則要求程式先讀取 secret file,才能發出命令。Tor 會以 debian-tor 使用者身分,將該 cookie 寫入 /run/tor/control.authcookie,並設定模式為 600,因此其他使用者無法讀取。CookieAuthFileGroupReadable 1 會開放群組存取權限,讓你自己的帳戶不使用 sudo 也能執行 nyx。

sudo apt install -y nyx
sudo adduser "$USER" debian-tor
sudo systemctl restart tor@default

登出後重新登入,再執行 nyx。新的群組權限必須在登入時載入,因此若在同一個 shell 工作階段中執行 nyx,即使設定正確,仍會因 cookie file 權限不足而收到錯誤。nyx 會顯示即時頻寬、運作時間、log 串流及連線清單。在最初幾週,應觀察頻寬圖是否維持在 RelayBandwidthRate 以下。

執行多個 relay:MyFamily 與 family keys

如果只有一個 relay,請略過本節。同一位操作者執行的 2 個以上 relay 必須彼此宣告,避免 client 建立從您的機器進入並離開的 circuit。否則,單一操作者就能看見 circuit 的兩端。

長期以來的做法,是在每個 relay 的 torrc 中設定 MyFamily,並列出其他所有 relay 的 fingerprints:

MyFamily AAAAAAAAAA,BBBBBBBB

每個 relay 都會列出其他所有 relay,因此新增第 4 個 relay 時,必須編輯 4 個檔案。Tor 0.4.9 以 family key 取代這種做法。先產生 1 個 key,再分享給其他 relay:

tor --keygen-family myfamily

這會寫入 myfamily.secret_family_key,並輸出一行 FamilyId。將 key file 複製到每個 relay 的 DataDirectory 中 keys 子目錄(Debian 與 Ubuntu 為 /var/lib/tor/keys),並保留 .secret_family_key 副檔名。將輸出的 FamilyId 行加入每個 torrc,然後使用 sudo systemctl reload tor@default 重新載入。現階段也請保留 MyFamily 清單。尚未支援 family certificates 的 client 仍會讀取舊式清單;Tor Project 會公告何時可以移除該清單。

執行後會發生哪些問題

版本變得過時。 無人值守升級會替換套件,但執行中的程序會繼續使用啟動時載入的二進位檔,直到程序重新啟動為止。比較主機上的 tor --version 與 relay 的 Relay Search 頁面所顯示的版本。如果兩者不同,表示網路仍看到舊版本,因此請重新啟動服務。

時鐘逐漸偏移。 Consensus 文件與憑證都有有效時間範圍,因此時鐘嚴重錯誤的機器會拒絕 consensus,並停止發布資訊。timedatectl 應報告系統時鐘已同步。如果沒有,請啟用 systemd-timesyncd 或安裝 chrony。

IP 位址變更。 Descriptor 會包含位址,而用戶端無法連線到已變更的位址。任何供應商遷移或位址變更後,請重新啟動 tor,並再次監看 self-test 訊息。

Relay 速度低於方案允許的上限。 Tor 的 relay 加密在現代處理器上效率良好。Tor Project 表示,支援 AES-NI 的 CPU 每個方向約可達 400 至 450 Mbit/s。在達到這個上限前,通常會先受連接埠速度與傳輸額度限制。因此,上述 accounting 區段比硬體更重要。

FAQ

Tor relay 會使用多少頻寬?

使用量取決於你允許的上限,不會超過該上限。RelayBandwidthRate 會分別限制輸入與輸出的轉送流量,因此設定為 1 Mbit/s 的 relay,能同時處理 1 Mbit/s 的輸入流量與 1 Mbit/s 的輸出流量。換算後,每天約為 21.6 GB;以 30 天計算,每月約為 648 GB,且包含兩個方向的流量。搭配 AccountingRule sum 新增 AccountingMax,即可在該速率下設定每月硬性配額。

執行 Tor relay 會收到濫用投訴嗎?

guard relay 或 middle relay 只會將流量傳送到其他 Tor relay,不會代替使用者連線到網站。因此,對方透過 Tor 進行的行為所引發的投訴會寄給 exit operator,而不是你。你可能看到的是掃描活動,以及偶爾出現的 IP reputation 清單,因為該位址會公開列為 relay。Exit relay 才會收到濫用郵件與法律通知,因此需要事先同意處理這類事項的 provider。啟用任一種類型前,請先閱讀 provider 的條款。

為什麼我的新 Tor relay 沒有取得任何流量?

因為新 relay 在完成測量前,會依設計受到限流。前 3 天,directory authorities 會將已發布的權重限制為 20 KB,因此 clients 幾乎不會選擇該 relay。Bandwidth authorities 約從第 3 天開始測量,第 8 天左右會符合取得 Guard flag 的資格;此時流量會再次下降,因為 clients 選擇 middle hop 時會避開 guard。約在第 68 天才會達到完整負載。確認 log 顯示「Self-testing indicates your ORPort is reachable from the outside」,然後不要再變更設定。

我可以在傳輸額度為 1 TB 的 VPS 上執行 Tor relay 嗎?

可以,若輸入與輸出方向各約為 1 Mbit/s,也就是 RelayBandwidthRate 125 KBytes。如果 provider 會計算兩個方向的流量,每月約為 648 GB,仍可為更新與備份保留餘裕。搭配 AccountingRule sum 與 AccountingStart month 1 00:00 新增 AccountingMax 400 GBytes,讓 relay 在超過方案額度前進入休眠。如果 provider 只計算輸出流量,就可以將速率加倍。

如果我只執行一個 relay,需要設定 MyFamily 嗎?

不需要。設定 family 是為了讓 clients 避免建立經過同一個 operator 擁有的兩個 relay 的 circuit;只有一個 relay 時,這項設定沒有意義。新增第二個 relay 後,應立即設定 family:在每個 relay 的 MyFamily 設定列出所有 relay 的 fingerprint;或使用 Tor 0.4.9 引入的 family key,以分發一個 FamilyId,取代會不斷增加的清單。