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