<a name="routing"></a>

# 管理節點、策略群組和規則

在路由分區中，可以新增節點來源、設定群組如何選擇節點，並決定哪些流量使用這些節點。本頁適用於標準版；完整操作範例見[首次連線教學](https://doona.daeuniverse.org/zh-TW/tutorial.md)。

| 任務 | 頁面 | 開始前檢查 |
| --- | --- | --- |
| 新增或編輯訂閱、節點 | [節點](https://doona.daeuniverse.org/zh-TW/routing.md#nodes) | [節點管理](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-nodes) |
| 更新訂閱 | [節點](https://doona.daeuniverse.org/zh-TW/routing.md#nodes) | [訂閱更新](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-subscription-refresh) |
| 選擇成員或固定自動群組的成員 | [策略](https://doona.daeuniverse.org/zh-TW/routing.md#policies) | [成員選擇](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-group-selection) |
| 修改成員範圍或群組設定 | [策略](https://doona.daeuniverse.org/zh-TW/routing.md#policies) | [編輯群組](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-group-edit) |
| 測試節點或群組 | [節點或策略](https://doona.daeuniverse.org/zh-TW/routing.md#policies) | [延遲探測](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-probes) |
| 套用範本或編輯規則 | [規則](https://doona.daeuniverse.org/zh-TW/routing.md#rules) | [規則與範本](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-rules) |
| 模擬路由結果 | [追蹤模擬](https://doona.daeuniverse.org/zh-TW/routing.md#trace) | [路由追蹤](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-routing-trace) |

變更何時生效，見 [doona 能修改什麼](https://doona.daeuniverse.org/zh-TW/what-doona-can-change.md)。控制項無法使用時，開啟其旁的說明查看具體原因。

<a name="nodes"></a>

## 新增和維護節點

開啟**節點**。選取來源卡片後，查看其節點；透過表格的搜尋和篩選尋找節點。**延遲**分頁用於比較已有的測量結果。

**搜尋節點** 搜尋所有來源，**群組** 和 **協定** 可篩選表格。協定後會顯示後端回報的串流傳輸方式，協定篩選仍按協定比對。

來源卡片顯示類型、狀態、節點數、更新時間、到期時間和用量；後端回報配額時還會顯示用量條。到期時間顯示到分鐘，懸停提示顯示秒。方向鍵可在卡片間移動。**尚未擷取** 表示尚未成功取得且沒有回報錯誤；**過期資料** 表示保留的資料需要更新。空檔案來源仍會顯示其狀態。

**延遲** 顯示最低、最高延遲和無法使用的節點數。可比較 **目前延遲**，以及後端回報的 **移動平均** 和 **近 10 次平均**。**分組方式** 按群組或協定彙整，並列出無法使用或未測量的節點。選擇圖表中的節點會在 **節點** 中開啟。

### 新增訂閱

1. 點選**新增訂閱**。
2. 填寫**名稱**和**訂閱網址**。如果提供**自動更新**、**User-Agent**和**快取訂閱內容**，檢查這些選項。
3. 點選**新增**。支援訂閱更新時，doona 會擷取新來源並報告節點數量。如果擷取失敗，使用通知中的**重試**。
4. 選取來源卡片，檢查節點後再建立群組。

訂閱 URL 必須使用 HTTP 或 HTTPS。未填寫協定的 URL 會在欄位失去焦點或儲存時補上 `https://`。無效 URL 和節點連結的原因會顯示在欄位下方。

### 新增節點連結

1. 點選**貼上節點連結**。
2. 只有一個連結時，填寫**名稱**和**節點連結**。有多個連結時，每行貼上一個，再檢查解析出的名稱和錯誤。
3. 確認新增並檢查結果。部分連結失敗時，對話框會保留這些連結供你修正。

honk 支援 Trojan、VMess 和 VLESS 連結使用 XHTTP over H2。`xhttp` 和 `splithttp` 均選擇此傳輸方式，支援 `auto`、`packet-up`、`stream-up` 和 `stream-one` 模式。可用選項與限制見 [honk XHTTP 參考](https://github.com/daeuniverse/honk/blob/main/doc/en/reference/nodes.md#xhttp-over-h2)。

### 更新或編輯訂閱

1. 使用來源卡片的更新操作立即擷取訂閱。頁面上的訂閱更新按鈕會更新全部訂閱。
2. 要修改網址或選項，使用卡片的編輯操作。修改提供的欄位後，點選**套用**。如果卡片提供的是**開啟設定檔**，則在該處編輯宣告。
3. 用**自動更新**選擇間隔。選擇**自訂**時，填寫**間隔**和**單位**。
4. 如果提供**下載路由**，選擇擷取訂閱時使用的路由。此選項不決定使用訂閱節點的流量走哪條路由。

更新失敗會保留上次成功載入的節點。若下載路由沒有可用節點，更新會失敗，不會退回直連。例如，訂閱透過自身提供的節點下載，但這些節點尚未載入時，就會出現此情況。

清空 **User-Agent** 會移除 `ua`，改用引擎預設值。項目設定了 `cache` 或後端回報快取預設值時，才會顯示 **快取訂閱內容**。選擇 **依路由規則** 會移除明確指定的 `route`，其他選項保留原文。

重新命名可同步更新同一檔案中的簡單 `subtag(...)` 篩選條件。保持更新開關開啟，可保留這些群組的成員關係。其他檔案或運算式中的引用會阻止重新命名。

**自訂** 自動更新間隔的 **間隔** 必須為非負整數，並需選擇 **單位**。

如果群組篩選條件阻止重新命名，按對話框中的連結前往**策略**，先修改這些篩選條件。下載失敗時，檢查[訂閱更新條件](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-subscription-refresh)。

### 編輯或移除節點來源

透過來源卡片的**更多操作**選單移除來源，再檢查確認提示。如果仍有群組引用該訂閱，對話框會列出這些群組；須先修改其篩選條件。

對於組態中宣告的節點，使用節點列提供的編輯或移除操作。如果宣告位於引入檔案且無法移除，在[組態](https://doona.daeuniverse.org/zh-TW/config-and-settings.md#edit-source)中開啟該檔案。

重新命名設定內的節點時，會同步更新同一來源中精確比對節點名稱的篩選條件、預設成員、最終出站及 DNS 上游的繞行目標。其他來源中的引用會阻止重新命名。

**加入群組** 會開啟群組編輯器，並將節點加入草稿；點 **套用** 才會儲存。選擇器列出可寫入主檔案及 include 檔案中的群組，並支援搜尋。即使執行階段群組 API 無法使用，只要設定可讀取，仍可編輯群組。

<a name="policies"></a>

## 選擇和編輯策略群組

開啟**策略**。每張卡片代表一個群組；展開折疊的卡片即可查看成員。卡片顯示所選成員和後端報告的成員健康狀態。

**全部**、**手動選擇** 和 **自動選擇** 按選擇類型篩選群組並顯示數量。篩選條件儲存在 URL 中；開啟被隱藏的群組會切回 **全部**。卡片顯示策略及可用、無法使用、未測試的數量。超過 12 個成員的群組提供 **篩選節點**、**地區**、**排序** 和 **只顯示可用節點**。自動群組初始摺疊；固定選擇的群組或透過連結開啟的群組會自動展開。

巢狀群組顯示父群組對它測得的延遲；若沒有此樣本，則顯示其目前選擇最終指向節點的延遲。

### 選擇成員

1. 如果卡片提供**兩者**、**TCP**和**UDP**，先選擇要修改的網路協定。
2. 選擇成員。手動群組會選擇該成員；允許覆寫的自動群組會將其固定，並顯示**已手動固定**。
3. 要取消固定，在**更多操作**中選擇**恢復自動選擇**。卡片展開時，此操作遵循所選網路協定；自動群組卡片折疊時，會清除兩種協定的固定狀態。

重新啟動後是否保留選擇，見[持久儲存條件](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-persistence)。

### 建立或編輯群組

1. 點選**新增群組**，或點選卡片的鉛筆按鈕編輯該群組。
2. 新增群組須填寫**群組名稱**，然後選擇**選擇方式**。
3. 選擇要包含的地區、訂閱、節點或巢狀群組。儲存前檢查**符合的節點**。空篩選條件會包含所有節點。
4. 成員選項無法表達的條件，透過**新增篩選**補充。同一篩選中的條件須全部符合；**新增 OR 比對**用於增加另一種比對方式。
5. 檢查提供的**預設成員**、**最終出站**和切換時中斷連線的開關。預設成員用於手動選擇的初始狀態；沒有可用成員時使用最終出站。
6. 新增群組點選**建立**，編輯群組點選**套用**，隨後檢查結果。**取消**會在必要的放棄確認後捨棄草稿。

移除明確選取的成員後，如果該節點仍符合其他篩選條件，就不會被排除；須同時修改對應條件。欄位無法修改時，參閱[群組編輯條件](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-group-edit)。

**預設成員** 只在手動選擇策略下顯示，列出直接成員。改用自動策略不會清除已儲存的 `default`。**最終出站** 可選 `direct`、`block`、群組和節點，但不包含會形成循環引用的群組。選擇 **無** 會移除對應的 `default` 或 `final` 設定。

**切換時中斷現有連線** 控制切換成員時是否關閉現有連線。在 **編輯群組** 中修改後需點 **套用**；在 **檢視組態** 中切換則立即寫入。

設定衝突後重試會保留未編輯欄位的新值。雙方修改同一欄位或群組被重新命名時，需重新開啟編輯器。若群組已在別處刪除，編輯器會保持開啟並提示變更未儲存。

展開 **地區** 可選擇地區，已選標籤會保持顯示。**新增篩選** 支援名稱和 `subtag` 比對，自訂運算式仍可作為文字編輯。**子群組** 和 **節點** 選擇器捲動選項時，搜尋框保持固定。

### 測試成員或修改背景檢查

使用群組的 **更多操作** → **測試全部** 或節點測試按鈕，按[手動探測偏好](https://doona.daeuniverse.org/zh-TW/config-and-settings.md#settings-page)測試。選擇 **以選項探測…** 可調整本次測試。操作無法使用時，查看[探測需求](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-probes)。

探測逾時、取消、無可用位址或本機拒絕可能使結果為 `unknown`；這不能證明節點不可用。Trojan、AnyTLS 和 VLESS 仍提供 DNS UDP 探測選項，是否支援取決於節點設定。後端拒絕探測時會顯示原因，不會自動改用 HTTP。

要修改群組的背景檢查，選擇**更多操作** → **檢測設定**，修改提供的欄位後點選**套用**。背景檢查與手動測試分開設定。

檢查欄位留空會清除群組的覆寫值，改用全域值或預設值。發生衝突後，未編輯的欄位會採用後端新值；雙方都改過的欄位保留草稿，並在旁邊顯示後端值。再次套用會用草稿覆寫該值。

<a name="rules"></a>

## 套用路由範本

開啟**規則** → **路由規則**。顯示檢視切換時，**簡易**用於範本，**進階**用於規則清單。套用前先檢查[規則與範本條件](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-rules)。

即使規則 API 無法使用，仍可從可讀取的設定檢視範本。**簡易** 是預設檢視；連結指定規則、預填新規則或檢視暫存規則時除外。自訂路由或分布在多個檔案中的路由不會選中任何範本。

1. 選擇**分流方式**，或開啟**更多範本**。檢查範本說明和選項。
2. 點選**套用**，開啟確認對話框。
3. 檢查目標檔案、將建立或沿用的群組，以及檔案差異。範本會取代目標檔案的頂層路由規則。取代時移除的路由引入陳述式不再引入原有規則，但被引入的檔案仍保留在磁碟上。
4. 如果提供**同時加入 DNS 路由**，決定是否加入建議的 DNS 組態。
5. 點選**套用**確認，隨後檢查結果。驗證失敗時，先修正報告的問題再套用。

已有群組會保留原設定。確認前須檢查沿用群組或群組名稱與節點名稱衝突的警告。

| 範本選項 | 預設值與效果 |
| --- | --- |
| **封鎖廣告** | 預設關閉；開啟後封鎖 `geosite:category-ads-all`。 |
| **封鎖 QUIC** | 預設開啟，封鎖 UDP 443 連接埠。honk 在路由前標記自身 socket，因此不會封鎖其與 QUIC 節點的連線。 |
| **NetworkManager 直連** | 預設開啟，將 NetworkManager 流量直連。 |

所有已載入檔案都沒有 `dns` 區塊時，才會顯示 **同時加入 DNS 路由**，且預設勾選。它將 `geosite:cn` 查詢透過 UDP 送往 `223.5.5.5:53` 的 `alidns`，其餘查詢透過 DNS over TLS 送往 `1.1.1.1:853` 的 `cloudflare`。

警告會指出只選擇單個精確節點或使用 `fixed` 策略的現有群組。若新群組與節點同名，使用該名稱的規則會指向群組，而不是節點。

**分流方式** 提供 **繞過中國大陸**、**只代理 GFW 名單** 和 **全域代理**。**更多範本** 提供 **單一代理群組**、**按服務分組**、**按服務與地區分組** 和 **回國**。最後一項將中國大陸網域及 IP 送往 `cn` 群組，該群組按節點名稱比對成員時排除香港、澳門和台灣，其餘流量直連。

目標為包含頂層 `routing` 的檔案；若不存在，則使用主檔案。缺少的群組會在目標檔案中建立。現有 DNS 路由、其他內容及其他檔案保持不變。新群組標籤使用介面語言，地區標籤帶國旗。

<a name="add-rule"></a>

## 新增或修改單條路由規則

1. 開啟**規則** → **路由規則**；顯示檢視切換時，選擇**進階**。
2. 點選**新增規則**。選擇**依據**並填寫**值**，多個值以逗號分隔。**新增 AND 條件**用於新增必須同時符合的條件；自訂條件可使用**運算式**。
3. 選擇**出站**和**插入位置**。決定位置時須檢查前面的規則，因為第一條符合的規則決定結果。
4. 點選**新增規則**，在清單中檢查結果。

從 **運算式** 切換到 **選擇** 時，可轉換的運算式會變為條件列；其餘運算式保留在 **運算式** 並顯示提示。**網域關鍵字** 比對子字串，例如 `tracker, ads` 符合任一關鍵字即可。

**出站** 提供 `direct`、`block` 和群組，不提供單個節點。開啟 **鎖定此出站** 會加入 `must`。**插入位置** 可選 **最後（fallback 之前）** 或某條規則之前，初始選擇為第一個可用位置。兩個選擇器都支援搜尋。

透過規則列的**編輯規則**修改條件或目標，再點選**儲存**；透過**移除規則**並確認刪除。**開啟設定檔**會定位到宣告所在的來源。前面的規則都不符合時，使用 fallback 列指定的目標。

若規則無法在清單中編輯或刪除，請用 **開啟設定檔** 編輯宣告檔案。唯讀來源也可透過此操作開啟到規則所在行。編輯兜底規則只會改變目標。

**命中** 只統計仍保留且 `rule_generation_id` 與規則清單 `generation_id` 相同的流量記錄，不是累計值。沒有規則清單時，檢視會按規則彙整目前快照中的流量，顯示 **命中** 和 **佔比**。**規則來源** 區分 `kernel`、`userspace`、`recomputed` 和 `unknown`。

### 從已觀察到的流量建立規則

1. 使用**連線**、**分流**或 **DNS** 列上的新增規則操作，或使用追蹤結果中提供的新增操作。
2. 檢查所選規則清單、條件、目標和插入位置。DNS 網域可以開啟 DNS 請求規則；不支援 DNS 規則時會開啟路由規則。
3. 檢查預覽，以及規則重複或前序規則可能先符合的警告。
4. 點選**套用**寫入這條規則，或點選**暫存**加入[暫存規則](https://doona.daeuniverse.org/zh-TW/routing.md#held-rules)。無法寫入時，使用**複製規則**。

對話框不預選出站，會顯示目前出站，並在所選目標不會改變出站時提示。命中規則屬於可寫入檔案時，**插入位置** 預設選擇 **命中規則之前**；其他選項為 **最後（fallback 之前）** 和 **最前**。DNS 條件還可限制為該查詢的記錄類型。

無需先選中列即可使用列內圖示。**連線** 的詳細資料面板也有 **新增規則**，工具列沒有此操作。**分流** 使用列內圖示，詳細資料面板沒有此操作。**DNS** 在查詢結果、回答位址旁，以及 **解析記錄** 和 **快取** 列內提供 **新增規則**。

套用成功後，路由規則的提示提供 **檢視規則**；從 DNS 查詢新增的 DNS 規則則提供 **重新查詢**。

<a name="dns-rules"></a>

## 新增或修改 DNS 規則

開啟**規則** → **DNS 規則**。請求規則決定如何解析查詢；回應規則決定如何處理回答。

1. 在 **request 規則**或 **response 規則**下點選**新增規則**。
2. 選擇條件並輸入值，或使用**運算式**。
3. 選擇**動作**，並在需要時選擇上游。須先定義上游時，參閱 [DNS 設定範例](https://doona.daeuniverse.org/zh-TW/tutorial.md)。
4. 選擇**插入位置**，檢查條件和動作，再點選**新增規則**。
5. 在 [DNS 頁面](https://doona.daeuniverse.org/zh-TW/observe.md#dns)查詢網域，檢查結果。

已有 DNS 規則使用與路由規則相同的編輯、儲存和移除控制項。清單或操作無法使用時，參閱 [DNS 規則條件](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-rules)。

兩個 DNS 清單都依序比對。回應規則可接受回答、拒絕回答或查詢其他上游。DNS 規則對話框使用 **動作**，不使用 **出站**，也不提供 **鎖定此出站**。**解析記錄** 開啟 DNS 頁面；**開啟 DNS 組態** 開啟 `dns` 區段。

<a name="held-rules"></a>

## 套用暫存規則

暫存規則只保留在目前頁面工作階段中。重新整理瀏覽器頁面會遺失這些草稿。

1. 開啟**規則**，檢查各清單的待套用卡片。
2. 用**捨棄暫存的規則**移除不需要的項目。
3. 點選**套用暫存的規則**，或頂欄顯示規則數量的套用按鈕。此操作會套用所有清單中的暫存規則。
4. 檢查結果。檔案逐個處理；某個檔案失敗時，尚未寫入的規則會繼續暫存。已寫入的規則即使未能生效，也會從暫存清單移除；繼續操作前須按失敗通知處理。

有暫存規則時，離開頁面前瀏覽器會要求確認。待處理卡片列出規則及插入位置，提示其他清單的暫存規則；涉及多個檔案時還會顯示檔案數。寫入失敗的規則會顯示在卡片上。

**重載 honk**只會重新載入已儲存的組態，不會套用暫存規則。

<a name="trace"></a>

## 用追蹤檢查路由

追蹤會按目前組態評估輸入，不會測試到目標的連線。

1. 開啟**規則** → **追蹤模擬**。
2. 選擇**網路協定**，填寫**網域**、**目的 IP**或兩者，並填寫**目的連接埠**。
3. 選擇可用的**解析模式**。支援的模式見[追蹤條件](https://doona.daeuniverse.org/zh-TW/feature-requirements.md#req-routing-trace)。

   **即時解析（live）** 和 **先查 DNS 再模擬（query）** 必須填寫 **網域**，並將 **目的 IP** 留空。

4. 規則需要來源、程序、DSCP 或標記資訊時，展開**進階條件**並填寫對應欄位。

   **DSCP** 接受 0 到 63 的整數。

5. 點選**開始追蹤**，查看**判定**、出站和各條規則的結果。輸入不足時，補充後再次追蹤。
6. 要檢查真實連線，開啟[連線](https://doona.daeuniverse.org/zh-TW/observe.md#connections)。追蹤結果提供**新增規則**時，可以用該次輸入建立規則。

只填寫 IP 時，Trace 只評估該 IP 和連接埠。domain 系列 `dial_mode` 可從真實 TLS 或 HTTP 流量中發現網域並重新評估路由；模擬此情況時需填寫網域。無法確定結果時，補充 **缺少輸入** 中列出的資訊。若顯示 **可能出站**，它是根據同一世代中的命中規則推斷的，不代表已確定結果。結果標明觀測時間和設定世代，並將每條規則標為 **相符**、**不符**、**略過** 或 **無法判定**。

先解析再模擬時，會顯示 DNS 查詢卡片，提供 **查詢 DNS** 和 **檢視快取** 連結。群組結果在 **節點** 下顯示群組到節點的鏈，並顯示 **連通性**，並提供測試節點、開啟群組或節點頁面的操作。
