dae 旁路由架設:Debian 部署、DNS 與故障還原

dae 旁路由架設:Debian 部署、DNS 與故障還原

Ryan Foster
2026年10月14日· 7 分鐘讀完

dae 旁路由是區域網絡內一部運行 dae 的 Debian 主機,dae 是以 eBPF 為基礎的透明代理,而主路由器繼續負責 DHCP 和上網連線。只把 dae 綁定到 LAN 介面,把一部裝置的閘道指向這部主機,並證明撤銷改動後這部裝置能回復正常。本文依據文末所列官方來源整理,未完成完整端到端實測。

關鍵要點

  • dae 綁定 LAN 需要 Linux 5.17 或以上版本,以及特定的 BPF 核心選項。
  • 只綁定 lan_interface 時,Debian 主機本身的程式不會經代理。
  • 在單臂閘道上,除非兩個重新導向開關都關閉,ICMP 重新導向可能令客戶端繞過 dae。
  • 測試裝置的還原方法很簡單:改回原本的閘道和 DNS。

dae 旁路由與其他做法有何不同?

dae eBPF 透明代理把分流邏輯放進 Linux 核心。直連流量因此可以不經用戶空間代理而直接通過,項目稱之為 Real Direct,這需要開啟 IP 轉發。[1] 代理部分仍然連接你定義的節點,節點使用 VLESS、Trojan 或 Shadowsocks 等連結。[2]

本文以 dae 架設一部 Debian 旁路閘道。如果你的閒置裝置運行的是 OpenWrt,可參考 OpenWrt 單臂旁路閘道設定流程。如果仍在選擇流量接管方式,REDIRECT、TPROXY 與 TUN 的比較介紹了傳統以規則為本的方案;dae 則以自己的 eBPF 程式取代你人手維護的規則。

運行任何閘道,都代表更新、故障和日誌由你負責。自建服務規劃指南列出了這些責任;在把家中流量交給它之前,亦值得先比較自行維護的伺服器與託管 VPN 服務。

步驟 1:核對 Debian 核心和網絡佈局

本文基線為 dae v2.1.1,文件按該版本標籤閱讀。快速入門指南列明,綁定 LAN 或 WAN 介面的最低核心版本為 Linux 5.17,運行 dae trace 則需要 5.15。[3]

uname -r
(zcat /proc/config.gz || cat /boot/config-$(uname -r)) | grep -E 'CONFIG_(BPF|BPF_SYSCALL|BPF_JIT|DEBUG_INFO_BTF|NET_CLS_BPF|NET_SCH_INGRESS|KPROBES)='
ip -4 addr show
ip route show default

快速入門列出完整的必需選項,包括 CONFIG_BPF_SYSCALL=y、CONFIG_DEBUG_INFO_BTF=y 和 CONFIG_NET_CLS_BPF=m。桌面發行版通常已啟用,嵌入式建置則不一定。[3] 欠缺任何一個必需選項就停下,不要嘗試載入其他核心的模組。

把將要使用的佈局記下。本文假設主路由器為 192.168.1.1,Debian 主機在 eth0 介面使用固定地址 192.168.1.2,兩者位於同一個區域網絡。請在主路由器的 DHCP 設定為主機保留地址,而不是改由其他裝置運行 DHCP。

步驟 2:從項目軟件源安裝 dae

對於 Debian 和 Ubuntu,快速入門使用 Dae Universe 的 APT 軟件源。APT 3.0 或以上選用 .sources 檔案,較舊的 APT 選用 .list 檔案,然後匯入簽署密鑰並安裝。[3]

sudo apt update && sudo apt install curl
sudo curl -fsSL -o /etc/apt/sources.list.d/daeuniverse.sources https://daeuniverse.pages.dev/daeuniverse.sources
sudo curl -fsSL -o /usr/share/keyrings/daeuniverse-archive-goose.gpg https://daeuniverse.pages.dev/daeuniverse-archive-goose.gpg
sudo apt update && sudo apt install dae
dae --version

套件會安裝 systemd 服務和示例檔案 /etc/dae/example.dae;你的設定要放在 /etc/dae/config.dae。[3] 暫時不要啟動服務。確認輸出的版本號,並把它和網絡佈局記在一起。

步驟 3:編寫只綁定 LAN 的最小設定

以 chmod 600 建立 /etc/dae/config.dae,因為其中存放節點憑證。以下設定只綁定 LAN 介面,定義一個你擁有或有權使用的節點,並把本地和多點傳播以外的流量全部送往這個節點。[2][3]

global {
  lan_interface: eth0
  log_level: info
  allow_insecure: false
  auto_config_kernel_parameter: true
}

node {
  mynode: 'vless://REPLACE_WITH_YOUR_OWN_LINK'
}

dns {
  upstream {
    googledns: 'tcp+udp://dns.google:53'
  }
  routing {
    request {
      fallback: googledns
    }
  }
}

group {
  proxy {
    filter: name(mynode)
    policy: fixed(0)
  }
}

routing {
  dip(224.0.0.0/3, 'ff00::/8') -> direct
  dip(geoip:private) -> direct
  fallback: proxy
}

不寫 wan_interface 是刻意的。按快速入門的說明,只綁定 LAN 時,受影響的是來自區域網絡裝置的流量,主機本身的程式(包括 SSH 和套件更新)不受影響。[3] 保持 allow_insecure: false,讓證書問題明確報錯,而不是被掩蓋。

啟動前先驗證。項目的 systemd 服務單元會在 ExecStartPre 執行同樣的檢查,這一步不會改動 BPF 狀態,亦不存取網絡。[4]

sudo dae validate -c /etc/dae/config.dae

步驟 4:檢查轉發和 ICMP 重新導向

設定 auto_config_kernel_parameter: true 後,dae 會為它綁定的 LAN 介面設定核心參數,包括轉發和 send_redirects。[2][5] 在單臂閘道上,客戶端的封包從同一個介面進出,核心通常會發出 ICMP 重新導向,叫客戶端繞過 dae、直接找主路由器。

核心規定,只要 conf/all 或 conf/<interface> 其中一個開啟,該介面的 send_redirects 便算開啟,所以兩者都必須為 0。[6] 啟動 dae 後讀取這些值:

sudo systemctl start dae
sysctl net.ipv4.ip_forward net.ipv4.conf.all.send_redirects net.ipv4.conf.eth0.send_redirects

如果 all 仍為 1,就把 net.ipv4.conf.all.send_redirects = 0 寫入 /etc/sysctl.d/ 下的一個檔案,並執行 sudo sysctl --system。另外要留意,dae 每次啟動都會設定 net.ipv4.conf.all.rp_filter = 0,並調整它自己的 dae0 介面;請記下原本的值,解除安裝後方便還原。[5]

步驟 5:把一部裝置指向旁路閘道

揀選一部以有線連接或 Wi-Fi 穩定的手提電腦或桌上電腦。記錄它目前經 DHCP 取得的地址、閘道和 DNS。然後改為手動 IPv4 設定:地址不變,閘道設為 192.168.1.2,DNS 設為 192.168.1.1。

DNS 繼續指向主路由器是刻意的。dae 會攔截它所路由的 UDP 和 TCP 53 連接埠流量,所以測試裝置送往路由器的查詢仍會經過 dae 的 DNS 模組,並按你的 dns 設定處理。[7] 疑難排解文件亦提醒,暫停狀態下的 dae 不會攔截 DNS,因此不應把閘道主機公佈為 DNS 伺服器。[8]

步驟 6:驗證出口、DNS 和區域網絡存取

下表為預期現象,實際結果請自行記錄。

檢查方法預期現象失敗時處理
在測試裝置開啟 IP 檢測頁顯示節點的公共地址查看 journalctl -u dae 和節點連結
在另一部裝置開啟同一頁面顯示平日的網絡供應商地址改錯了裝置或 DHCP
在測試裝置解析域名正常傳回回應檢查上游和 dip(geoip:private) 規則
開啟路由器管理頁和區域網絡共享本地地址仍可存取確認私有地址規則排在前面
在主機查看 sysctl 重新導向值兩個 send_redirects 均為 0修正 sysctl 檔案並重新啟動 dae

檢查出口時,可以查看測試裝置對外顯示的公共地址。地址改變了,代表網頁流量到達了節點;DNS 和區域網絡存取仍要按上表分開檢查。

步驟 7:演練故障還原與解除安裝

在裝置旁邊進行故障演練。以 sudo systemctl stop dae 停止 dae;視乎主機的轉發狀態,測試裝置會斷網,或退回直接轉發。然後把裝置還原為原本的 DHCP 設定,確認可正常上網。這一步就是日後任何故障時的還原路徑,包括 Debian 主機斷電。

只有還原順利之後,才執行 sudo systemctl enable dae。設定開機啟動並不會即時啟動服務。[3] 修改設定時,dae reload 會在不中斷現有連線的情況下生效,dae suspend 則會暫時暫停 dae。[3]

解除安裝時,先把所有裝置還原為 DHCP 設定,再執行 sudo systemctl disable --now dae 和 sudo apt remove dae,並刪除軟件源檔案、密鑰和你加入的 sysctl 檔案。還原你記下的 rp_filter 值;如果不肯定 dae 留下了甚麼,就重新啟動主機。

這套設定不會影響哪些流量?

主機本身的程式不在只綁定 LAN 的範圍內,所以在這部主機上更新 Debian 或使用 SSH 都不會經節點。[3] 其他區域網絡裝置仍以主路由器為閘道,除非你改動了它們,否則不受影響。

常見的缺口是 IPv6。主機透過路由器通告(Router Advertisement)得知預設路由器,因此有全球 IPv6 地址的測試裝置,即使改了 IPv4 閘道,IPv6 流量仍會送往主路由器。[9] 要麼只測試 IPv4 路徑並記錄這項限制,要麼在擴大範圍前另行規劃 IPv6。

甚麼時候可以擴大到多部裝置?

只有出口、DNS、區域網絡和還原檢查全部通過,而且主機在啟用 dae 的情況下經得起重新啟動,才考慮擴大範圍。先以手動閘道設定逐部加入裝置。修改主路由器 DHCP 派發的閘道會一次過影響所有客戶端,應留到最後。

基於上述的暫停原因,派發的 DNS 伺服器仍保持為主路由器。[8] 如果 Debian 主機還要運行本地 DNS 服務,請先閱讀 dae DNS 文件中有關 must_direct 規則的說明,因為送往主機本身的 53 連接埠流量會被這類規則另行處理。[7]

總結

  • 安裝 dae v2.1.1 之前,確認核心為 Linux 5.17 或以上版本,並具備 BPF 選項。
  • 只綁定 lan_interface,先驗證設定,並妥善保管節點憑證。
  • 確保兩個 send_redirects 開關都已關閉,避免客戶端繞過 dae。
  • 先驗證單一裝置的出口、DNS 和區域網絡存取,演練還原後才設定開機啟動。

常見問題

dae 會代理 Debian 主機本身的流量嗎?

在這份設定下不會。只綁定了 lan_interface,所以 dae 處理的是區域網絡裝置的流量,主機本身的程式仍走正常路由。

dae 旁路由需要甚麼版本的核心?

dae 快速入門把 Linux 5.17 列為綁定 LAN 介面的最低版本,同時需要 BPF 和 BTF 相關核心選項,可以在核心設定中逐項核對。

為何要關閉 ICMP 重新導向?

在單臂閘道上,核心會提示客戶端把流量直接送往主路由器。只要全域開關或介面開關其中一個開啟,重新導向便會繼續發出。

要把 Debian 主機設為 DHCP 伺服器嗎?

不需要。DHCP 繼續由主路由器負責,只以人手修改一部裝置。這樣還原簡單,亦可避免同一區域網絡出現兩部互相衝突的 DHCP 伺服器。

為何測試裝置的 DNS 要設為主路由器?

dae 會攔截它所路由的 53 連接埠流量,查詢照樣經過它的 DNS 模組。即使 dae 被暫停,這些查詢亦可繼續由路由器正常回應。

Debian 主機斷電會怎樣?

以它為閘道的裝置會斷網,直至改回使用主路由器為止。還原測試裝置的 DHCP 設定就是還原路徑,所以務必預先演練一次。

dae 和自行編寫 TPROXY 規則是同一回事嗎?

不是。dae 以 eBPF 程式實現流量攔截和分流,你不需要自行維護 TPROXY 或 REDIRECT 規則,但區域網絡設計上的問題依然存在。

免責聲明: 本文僅供一般資訊參考,不構成法律、技術或其他專業建議。我們不保證內容的準確性、完整性或時效性。請只在你擁有或獲授權使用的網絡、主機和代理節點上操作。

來源:

  1. daeuniverse — dae README (v2.1.1) — https://github.com/daeuniverse/dae/blob/v2.1.1/README.md
  2. daeuniverse — example.dae (v2.1.1) — https://github.com/daeuniverse/dae/blob/v2.1.1/example.dae
  3. daeuniverse — dae Quick Start Guide (v2.1.1) — https://github.com/daeuniverse/dae/blob/v2.1.1/docs/en/README.md
  4. daeuniverse — dae systemd unit (v2.1.1) — https://github.com/daeuniverse/dae/blob/v2.1.1/install/dae.service
  5. daeuniverse — Configure Kernel Parameters (v2.1.1) — https://github.com/daeuniverse/dae/blob/v2.1.1/docs/en/user-guide/kernel-parameters.md
  6. Linux kernel — IP sysctl — https://docs.kernel.org/networking/ip-sysctl.html
  7. daeuniverse — DNS configuration (v2.1.1) — https://github.com/daeuniverse/dae/blob/v2.1.1/docs/en/configuration/dns.md
  8. daeuniverse — Troubleshooting (v2.1.1) — https://github.com/daeuniverse/dae/blob/v2.1.1/docs/en/troubleshooting.md
  9. IETF — RFC 4861, Neighbor Discovery for IP version 6 (IPv6) — https://www.rfc-editor.org/rfc/rfc4861

Sources checked 2026 年 10 月 14 日。


延伸閱讀:

開啟 3 天免費試用

註冊即可免費體驗全部高級功能。

*只限新用戶;每位用戶只可獲得一次試用。

dae 旁路由架設:Debian 部署、DNS 與故障還原 | AethoVPN