跳至正文

組態參考 ​

doona 使用下列 honk DAE 設定。各表列出預設值及生效方式。組態語法請查閱 honk 的節點、訂閱、群組、路由和 DNS 參考。初次使用請從快速入門開始,或依為第一條連線設定路由操作。

表中預設值對應 honk 1b95e2e,範例會覆寫其中部分值。生效方式欄連結至 doona 可以修改什麼中對應的寫入權限或重新啟動項目。

原生 API 與認證 ​

鍵預設值doona 如何使用生效方式honk 參考
experimental.native_api.enabledfalse啟用 doona 使用的原生 API。重新啟動experimental
experimental.native_api.listen127.0.0.1:9527API 監聽位址。須使用數字 IP 和非零連接埠。重新啟動experimental
experimental.native_api.password_authfalse啟用管理員登入;不能與 secret 或匿名回環存取並用。重新啟動experimental
experimental.native_api.secret''Token 登入。只接受不含空白或逗號的可見 ASCII。重新啟動experimental
experimental.native_api.allow_anonymous_loopbackfalse允許無憑證的回環存取;不授予受保護的寫入權限。重新啟動experimental
experimental.native_api.config_writefalse配合憑證允許寫入組態來源及更新地理資料。重新啟動experimental
experimental.native_api.ui''在 /ui/ 提供 doona:填寫含 index.html 的目錄,或在啟用 native-ui 的建置中使用 embedded/embedded-lite。重新啟動experimental
experimental.native_api.allow_origins[]額外允許的瀏覽器來源,如 https://panel.example。重新啟動experimental
experimental.native_api.allowed_hosts[]額外允許的 HTTP 主機名稱及連接埠,如 panel.example。重新啟動experimental

資料目錄與狀態資料庫 ​

鍵預設值doona 如何使用生效方式honk 參考
global.data_dir/var/lib/honk執行資料根目錄;狀態資料庫位於其下的 state/honk.db。重新啟動global
global.store_subscribetrue儲存訂閱內容供離線啟動使用;訂閱項目的 cache 也須允許快取。重新啟動subscription
experimental.cache_file.enabled未設定未設定時保留 Selector 選擇和延遲樣本;false 關閉此快取;true 還儲存 Clash 模式並允許持久儲存 DNS。重新啟動experimental
experimental.cache_file.store_dnsfalse在 enabled: true 時儲存 DNS 回答。重新啟動experimental

狀態資料庫還儲存管理員憑證和地理資料設定。--store db 選擇資料庫組態修訂儲存;這是啟動選項,不是 DAE 鍵。見修訂功能條件。

資源與訂閱預設值 ​

鍵預設值doona 如何使用生效方式honk 參考
assets.route空;遵循路由規則預設下載路由:routing、direct 或群組名稱。地理資料、介面和訂閱繼承此值。重新啟動assets
assets.geodata.geosite'';有狀態資料庫時使用內建 URL已載入網域分類的 HTTP(S) 來源。重新啟動assets
assets.geodata.geoip'';有狀態資料庫時使用內建 URL已載入 IP 分類的 HTTP(S) 來源。重新啟動assets
assets.geodata.route繼承 assets.route資料與檢查碼的下載路由。未設定時保留已儲存的覆寫值。重新啟動assets
assets.ui.urlzashboard dist.zipClash 儀表板下載位址,與 doona 目錄無關。HONK_UI_DOWNLOAD_URL 優先。重新啟動assets
assets.ui.route繼承 assets.routeClash 儀表板下載路由;也接受節點標籤。重新啟動assets
assets.subscription.uahonk/<version>預設訂閱 User-Agent;訂閱項目可覆寫。重載assets
assets.subscription.interval86400s預設更新間隔;0 關閉定時更新。重載assets
assets.subscription.cachetrue預設快取訂閱內容,受 global.store_subscribe 限制。重載assets

訂閱項目選項優先於預設值,子區塊路由優先於 assets.route。變更若影響繼承後的地理資料或介面設定,需要重新啟動;僅影響訂閱時可重載。啟動組態中明確指定的地理資料 URL 和路由會替換已儲存的覆寫值。宣告 URL 不會載入資源。見地理資料更新條件。

記錄權限 ​

鍵預設值doona 如何使用生效方式honk 參考
experimental.native_api.record_traffictrue流量歷史圖表。重新啟動experimental
experimental.native_api.record_memorytrue記憶體歷史圖表。重新啟動experimental
experimental.native_api.record_flowstrue允許記錄分流及規則命中資訊。重新啟動experimental
experimental.native_api.record_logstrue允許記錄日誌頁內容。重新啟動experimental
experimental.native_api.record_dns_logtrue允許記錄 DNS 解析日誌。重新啟動experimental

這些檔案鍵授予記錄權限。流、日誌和 DNS 日誌以按需模式啟動;執行期開關不能覆寫組態中的停用設定。連線頁單獨列出活動的使用者空間連線,不依賴流記錄器。見連線條件、流記錄條件和執行時覆寫條件。

健康檢查 ​

鍵預設值doona 如何使用生效方式honk 參考
global.tcp_check_urlhttps://www.gstatic.com/generate_204全域 HTTP 探測目標清單;健康檢查使用第一個 URL。重新啟動global
global.tcp_check_http_methodHEAD全域 HTTP 健康檢查方法。重新啟動global
global.udp_check_dnsdns.google:53, 8.8.8.8, 2001:4860:4860::8888UDP 探測目標;第一個 IP 位址優先於網域名稱。重新啟動global
global.check_interval30s全域健康檢查間隔。重新啟動global
global.check_tolerance50msURLTest 切換成員所需的預設延遲改善量。重載global

日誌 ​

鍵預設值doona 如何使用生效方式honk 參考
global.log_levelinfo啟動日誌篩選等級。有效的 RUST_LOG 優先,其次為 --debug。重新啟動global
global.log_file''可選日誌檔案。相對路徑以 data_dir 為基準;--log-file 優先。重新啟動global

介面與核心 ​

鍵預設值doona 如何使用生效方式honk 參考
global.lan_interface[]轉送流量的 LAN 介面;為空時不掛接 LAN。重新啟動global
global.wan_interface[]本機流量的介面;auto 跟隨度量值最低的 IPv4 預設路由。重新啟動global
global.tproxy_port12345透明 TCP/UDP 監聽連接埠。重新啟動global
global.so_mark_from_dae0為零時實際標記為 0x100;否則使用設定的通訊端繞過標記。重新啟動global
global.nfqueue_enabletrue請求對路由尚未確定的 LAN 轉送 UDP 使用 NFQUEUE 暫存。需要真實 eBPF 後端。重新啟動global

要處理 LAN 用戶端流量,將 global.lan_interface 設為連接這些用戶端的介面:

  • 主路由使用 LAN 橋接器,通常為 br-lan;用戶端已將此路由器設為閘道器。
  • 使用旁路由時,還須將用戶端的閘道器與 DNS 設為旁路由的 LAN 位址,可逐台設定,也可透過主路由的 DHCP 設定派送。

不要假定 lan_interface: auto 會選擇 LAN。它選擇度量值最低的 IPv4 預設路由所在介面,在主路由上通常是 WAN 介面。

連線與預熱 ​

鍵預設值doona 如何使用生效方式honk 參考
global.dial_modedomain網域識別與路由重新評估模式:ip、domain、domain+、domain++。重載global
global.bootstrap_resolver''節點網域及控制平面連線的解析器。依網域直連下載地理資料需要此項。重載global
global.tls_implementationtls選擇一般 TLS 或 utls ClientHello 模擬。重新啟動global
global.max_concurrent_dials64代理實體連線與交握的請求上限;資源預算可能降低此值。重載global
global.udp_warm_node_count0UDP 預熱候選節點數;零表示關閉。重載global
global.preconnect_node_countauto僅在啟動時預熱 TCP;auto 最多選擇八個合格節點。重載不會再次預熱。重新啟動後預熱global

接受但沒有執行效果的欄位 ​

鍵預設值doona 如何使用生效方式honk 參考
global.tproxy_port_protecttrue僅儲存;不控制連接埠保護。重新啟動global
global.pprof_port0僅儲存;不會啟動 pprof 服務。重新啟動global
global.auto_config_kernel_parameterfalse僅儲存;不控制資料路徑固定的 sysctl 設定。重新啟動global
global.disable_waiting_networkfalse僅儲存;不改變啟動等待行為。重載global
global.allow_insecurefalse僅儲存;不會全域關閉憑證驗證。重載global
global.sniffing_timeout30ms僅儲存;不設定實際嗅探逾時。重載global
global.mptcpfalse僅儲存;不啟用 MPTCP。重載global
global.fallback_resolver8.8.8.8:53僅儲存;不選擇備援解析器。重載global
global.tls_fragmentfalse僅儲存;不啟用 TLS 分片。重載global
global.tls_fragment_length''僅儲存;不設定分片長度。重載global
global.tls_fragment_interval''僅儲存;不設定分片間隔。重載global
global.bandwidth_max_tx''僅儲存;不限制傳送頻寬。重載global
global.bandwidth_max_rx''僅儲存;不限制接收頻寬。重載global
global.utls_imitatechrome_auto接受指紋名稱,但不會改變唯一支援的 Chrome 設定。重載global

DNS 監聽與 Clash 相容設定 ​

鍵預設值doona 如何使用生效方式honk 參考
dns.bind''獨立 DNS 監聽位址;為空時關閉。須在 doona 之外編輯。重新啟動dns
experimental.clash_api.external_controller''Clash API 監聽位址;為空時關閉。重新啟動experimental
experimental.clash_api.external_ui''Clash 儀表板目錄。重新啟動experimental
experimental.clash_api.secret''Clash Token;含此宣告的來源在 doona 中唯讀。重新啟動experimental
experimental.clash_api.default_modeRule初始 Clash 模式:Rule、Global 或 Direct。重新啟動experimental

執行期 API 欄位,不是 DAE 鍵 ​

鍵預設值doona 如何使用生效方式honk 參考
record_flows, record_logs, record_dns_logauto按需記錄模式:auto、on、off;仍受組態停用條件限制。即時api
log.level來自 global.log_level即時日誌篩選等級;覆寫後也影響主控台和檔案輸出。即時api
log.buffered_records512日誌緩衝容量;64–512。即時api
dns_log.max_records512DNS 日誌容量;64–512。即時api
flows.max_flows1024流記錄容量;64–1024。即時api
flows.retention_seconds300已結束流的保留時間;1–300 秒。即時api

在設定頁修改這些欄位,不要寫入 DAE 檔案。成功啟用組態或重新啟動會重置這些值。見執行期覆寫條件。

持久儲存的地理資料設定,不是 DAE 鍵 ​

鍵預設值doona 如何使用生效方式honk 參考
geodata.geosite.urls, geodata.geoip.urlsGitHub + jsDelivr;GeoIP 使用 geoip.dat已儲存的 URL 清單;啟動組態中的 URL 優先。即時,持久儲存api
geodata.download路由規則下載路由及可選的 group_id;啟動組態中的路由優先。即時,持久儲存api
geodata.verify_checksumtrue下載檢查碼驗證。即時,持久儲存api
geodata.auto_update.enabledtrue啟用定時更新檢查。即時,持久儲存api
geodata.auto_update.interval_hours24定時檢查間隔,單位為小時。即時,持久儲存api

在設定頁修改這些欄位需要憑證和可用的狀態資料庫。儲存設定不會啟用新的資源檔案。見地理資料設定條件。

別名與遷移鍵 ​

舊名稱目前名稱
experimental.native_api.geosite_download_urlassets.geodata.geosite
experimental.native_api.geoip_download_urlassets.geodata.geoip
experimental.native_api.geodata_download_detourassets.geodata.route
experimental.clash_api.external_ui_download_urlassets.ui.url
experimental.clash_api.external_ui_download_detourassets.ui.route
experimental.udp_nfqueue.enabledglobal.nfqueue_enable

新檔案請使用目前名稱。資源別名會產生 legacy-assets-key 警告;非空舊值與對應新鍵並用會報 conflicting-assets-setting。舊 NFQUEUE 區塊會產生遷移警告,僅在未設定 global.nfqueue_enable 時提供該值。experimental.cache_file.path 和 cache_id 僅用於舊資料匯入,不指定目前資料庫位置。store_fakeip 沒有效果。

完整註解範例 ​

此主檔案包含教學所用的訂閱、群組、網域規則、DNS 規則和下載預設值。啟動 honk 前,請替換訂閱 URL。

將 API 憑證與節點頁修改的主檔案分開。見組態來源寫入條件。

主檔案 ​

dae
# /etc/honk/config.dae
# 將 API 憑證儲存在獨立的引入檔案中。
include {
    config.d/*.dae
}

# 本機流量、儲存、檢查與連線設定。
global {
    wan_interface: auto
    # 如需處理 LAN 用戶端流量,取消註解並填寫其閘道器介面。
    # lan_interface: br-lan
    data_dir: '/var/lib/honk'
    store_subscribe: true
    log_level: info
    # 可選的附加日誌檔案,路徑相對於 data_dir。
    # log_file: 'honk.log'
    tproxy_port: 12345
    so_mark_from_dae: 0
    nfqueue_enable: true
    tcp_check_url: 'https://www.gstatic.com/generate_204'
    tcp_check_http_method: HEAD
    udp_check_dns: 'dns.google:53', '8.8.8.8', '2001:4860:4860::8888'
    check_interval: 30s
    check_tolerance: 50ms
    dial_mode: domain
    bootstrap_resolver: '1.1.1.1:53'
    tls_implementation: tls
    max_concurrent_dials: 64
    preconnect_node_count: auto
    udp_warm_node_count: 0
}

# 將佔位位址替換為供應商的訂閱 URL。
subscription {
    harbor: 'https://subscription.example/sub'
}

# 可選靜態節點;填寫真實節點資訊後再取消註解。
node {
    # backup: 'socks5://192.0.2.2:1080'
}

# 依移動平均延遲選擇 harbor 的節點。
group {
    # 流量規則和 DNS 上游共用此群組。
    proxy {
        filter: subtag('harbor')
        policy: min_moving_avg
    }
}

# 僅將教學網域送入此群組。
routing {
    domain(full: example.com) -> proxy
    fallback: direct
}

# 透過同一群組解析教學網域。
dns {
    # 使用 IP 位址的 HTTPS 端點,避免依賴其網域的初始解析。
    upstream {
        remote_dns: 'https://1.1.1.1/dns-query' -> proxy
    }
    # 其他 DNS 請求保留原目的地。
    routing {
        # 比對與流量規則相同的完整網域。
        request {
            qname(full: example.com) -> remote_dns
            fallback: asis
        }
        # 保留所選上游的回答。
        response {
            fallback: accept
        }
    }
}

# 下載預設值;僅設定這些 URL 不會載入地理資料資源。
assets {
    route: routing
    # 路由規則載入對應資源後的更新來源。
    geodata {
        geosite: 'https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/release/geosite.dat'
        geoip: 'https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/release/geoip.dat'
        route: direct
    }
    # 僅用於獨立設定的 Clash 儀表板,不用於 doona。
    ui {
        url: 'https://github.com/Zephyruso/zashboard/releases/latest/download/dist.zip'
        route: direct
    }
    # 各訂閱項目的選項可以覆寫這些預設值。
    subscription {
        interval: 86400s
        cache: true
        # ua: 'clash.meta'
    }
}

API 檔案 ​

將快速入門中的 API 區塊寫入 /etc/honk/config.d/api.dae;使用獨立介面檔案時,改用獨立介面組態。

然後重新啟動 honk。對應的介面操作見為第一條連線設定路由。


來源:doona 上游文件,採用 CC BY 4.0 授權條款。