开启 3 天免费试用
注册即可免费体验全部高级功能。
*仅限新用户;每位用户只能获得一次试用。


dae 旁路由是局域网里一台运行 dae 的 Debian 主机,dae 是基于 eBPF 的透明代理,而主路由器继续负责 DHCP 和上网连接。只把 dae 绑定到 LAN 接口,把一台设备的网关指向这台主机,并证明撤销改动后这台设备能恢复正常。本文依据文末列出的官方来源整理,未完成完整端到端实测。
关键要点
- dae 绑定 LAN 需要 Linux 5.17 或更高版本,以及特定的 BPF 内核选项。
- 只绑定
lan_interface时,Debian 主机自身的程序不会走代理。- 在单臂网关上,除非两个重定向开关都关闭,ICMP 重定向可能让客户端绕过 dae。
- 测试设备的恢复方法很简单:改回原来的网关和 DNS。
dae eBPF 透明代理把分流逻辑放进 Linux 内核。直连流量因此可以不经过用户态代理直接通过,项目称之为 Real Direct,这需要开启 IP 转发。[1] 代理部分仍然连接你定义的节点,节点使用 VLESS、Trojan 或 Shadowsocks 等链接。[2]
本文用 dae 搭建一台 Debian 旁路网关。如果你的闲置设备运行的是 OpenWrt,可参考 OpenWrt 单臂旁路网关配置流程。如果还在选择流量接管方式,REDIRECT、TPROXY 与 TUN 的对比介绍了传统的基于规则的方案;dae 则用自己的 eBPF 程序代替你手工维护的规则。
运行任何网关,都意味着更新、故障和日志由你负责。自建服务规划指南列出了这些责任;在把家里的流量交给它之前,也值得先对比自己维护的服务器和托管 VPN 服务。
本文基线是 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。
对于 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] 暂时不要启动服务。确认输出的版本号,并把它和网络布局记在一起。
用 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
设置 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]
选一台有线连接或 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]
下表是预期现象,实际结果请自行记录。
| 检查方法 | 预期现象 | 失败时处理 |
|---|---|---|
| 在测试设备上打开 IP 检测页 | 显示节点的公网地址 | 查看 journalctl -u dae 和节点链接 |
| 在另一台设备上打开同一页面 | 显示平时的运营商地址 | 改错了设备或 DHCP |
| 在测试设备上解析域名 | 正常返回应答 | 检查上游和 dip(geoip:private) 规则 |
| 打开路由器管理页和局域网共享 | 本地地址仍可访问 | 确认私有地址规则排在前面 |
在主机上查看 sysctl 重定向值 | 两个 send_redirects 均为 0 | 修正 sysctl 文件并重启 dae |
检查出口时,可以查看测试设备对外显示的公网地址。地址变了说明网页流量到达了节点;DNS 和局域网访问仍要按上表单独检查。
在设备旁边做故障演练。用 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]
lan_interface,先校验配置,并妥善保管节点凭证。send_redirects 开关都已关闭,避免客户端绕过 dae。在这份配置下不会。只绑定了 lan_interface,所以 dae 处理的是局域网设备的流量,主机自身的程序仍走正常路由。
dae 快速入门把 Linux 5.17 列为绑定 LAN 接口的最低版本,同时还需要 BPF 和 BTF 相关内核选项,可以在内核配置中逐项核对。
在单臂网关上,内核会提示客户端把流量直接发给主路由器。只要全局开关或接口开关任一开启,重定向就会继续发送。
不需要。DHCP 继续由主路由器负责,只手动修改一台设备。这样恢复简单,也能避免同一局域网里出现两台互相冲突的 DHCP 服务器。
dae 会拦截它所路由的 53 端口流量,查询照样经过它的 DNS 模块。即使 dae 被暂停,这些查询也能继续由路由器正常应答。
以它为网关的设备会断网,直到改回使用主路由器为止。恢复测试设备的 DHCP 设置就是恢复路径,所以务必提前演练一次。
不是。dae 用 eBPF 程序实现流量拦截和分流,你不需要自己维护 TPROXY 或 REDIRECT 规则,但局域网设计上的问题依然存在。
免责声明: 本文仅供一般信息参考,不构成法律、技术或其他专业建议。我们不保证内容的准确性、完整性或时效性。请只在你拥有或获授权使用的网络、主机和代理节点上操作。
来源:
Sources checked 2026 年 10 月 14 日。
延伸阅读:
注册即可免费体验全部高级功能。
*仅限新用户;每位用户只能获得一次试用。