在OpenWrt社区逛的时候又发现了一些宝贝。
https://github.com/daeuniverse/dae
DAE(鹅)又是一个代理程序,不过它是透明代理,可以理解成全局代理,所有流量都会经过该软件。
DAE的特色是使用上了eBPF技术。
- eBPF 是 extended Berkeley Packet Filter 的缩写,它是一种内核技术,允许开发人员在不修改内核代码的情况下运行特定的功能。eBPF 的概念源自于 Berkeley Packet Filter(BPF),后者是由贝尔实验室开发的一种网络过滤器,可以捕获和过滤网络数据包。
其实用最简单的话来说就是内核插件技术。

这张图是DAE对比目前其他流行代理程序的吞吐量。在代理环境中其实没有什么区别。主要区别其实是在直连的吞吐量上,领先了其他程序有20倍左右,非常夸张。
今天用上了DAE这个玩意,不得不说这玩意的性能确实够得劲,以前openwrt一分钟内的负载1-2 左右,换了之后负载直接掉到0.5以下了, 基本在0.1-0.3左右。
分流功能也有,比较可惜的是面板功能不够多,以及这个玩意手动切换节点也比较繁琐,目前只有自动换更节点的策略,不过目前还是能凑合着用。
下面我的配置:
1pname(NetworkManager, systemd-resolved, dnsmasq) -> must_direct
2pname(mosdns) -> must_rules # mosdns 的DNS流量不要走DAE
3
4# 所有UDP流量走直连,除了DNS和Quic
5l4proto(udp) && !dport(53, 443) -> direct
6
7# ipv6 走直连,代理不支持
8ipversion(6) -> direct
9
10# 局域网内广播,防止被代理转发
11dip(224.0.0.0/3, 'ff00::/8') -> direct
12
13# qbittorrent 传入链接端口
14sport(33915) -> direct
15# DSCP规则(匹配 DSCP,可用于绕过 BT),见 https://github.com/daeuniverse/dae/discussions/295
16dscp(4) -> direct
17
18# https://github.com/daeuniverse/dae/discussions/298 Apple 设备未收到 Apple 推送通知
19dip(17.0.0.0/8) -> direct
20
21# 目标非常用端口都走直连,避免BT流量走代理
22!dport(21,23,53,80,123,143,194,443,465,587,853,993,995,998) -> direct
23
24mac("c8:bf:4c:3e:d1:bc") -> direct
25# nintendo switch
26mac("98:41:5c:20:54:db") -> direct
27# 树莓派
28mac("f2:db:f0:bd:02:5d") -> direct
29
30# 一些域名
31domain(keyword: 'syncthing.net') -> direct
32domain(keyword: 'picacomic') -> direct
33domain(keyword: 'mangacopy') -> direct
34domain(keyword: 'tr.nyacat') -> direct
35domain(keyword: 'tracker') -> direct
36domain(keyword: 'ghproxy') -> direct
37domain(keyword: 'gh-proxy') -> direct
38domain(keyword: 'fgit') -> direct
39domain(keyword: 'jsdelivr') -> direct
40domain(keyword: 'nintendo') -> direct
41domain(keyword: 'fanqiev2') -> direct
42domain(keyword: 'announce') -> direct
43domain(keyword: 'torrent') -> direct
44
45# 阻断广告连接
46domain(ext:'geosite.dat:category-ads') -> block
47
48# 国内网站
49domain(ext:'geosite.dat:category-games') -> direct
50domain(ext:'geosite.dat:category-game-accelerator-cn') -> direct
51domain(ext:'geosite.dat:alibaba') -> direct
52domain(ext:'geosite.dat:bilibili') -> direct
53domain(ext:'geosite.dat:bilibili2') -> direct
54domain(ext:'geosite.dat:tencent') -> direct
55domain(ext:'geosite.dat:zhihu') -> direct
56domain(ext:'geosite.dat:cloudflare') -> direct
57domain(ext:'geosite.dat:cloudflare-cn') -> direct
58domain(ext:'geosite.dat:category-scholar-cn') -> direct
59domain(ext:'geosite.dat:category-media-cn') -> direct
60domain(ext:'geosite.dat:category-social-media-cn') -> direct
61domain(ext:'geosite.dat:category-dev-cn') -> direct
62domain(ext:'geosite.dat:category-bank-cn') -> direct
63domain(ext:'geosite.dat:category-public-tracker') -> direct
64domain(ext:'geosite.dat:mozilla') -> direct
65domain(ext:'geosite.dat:picacg') -> direct
66domain(ext:'geosite.dat:apple') -> direct
67domain(ext:'geosite.dat:apple-cn') -> direct
68domain(ext:'geosite.dat:icloud') -> direct
69domain(ext:'geosite.dat:icloudprivaterelay') -> direct
70domain(ext:'geosite.dat:nintendo') -> direct
71domain(ext:'geosite.dat:speedtest') -> direct
72domain(ext:'geosite.dat:cn') -> direct
73domain(ext:'geosite.dat:china-list') -> direct
74domain(ext:'geosite.dat:geolocation-cn') -> direct
75domain(ext:'geosite.dat:private') -> direct
76
77domain(suffix: 'windows.com') -> direct
78
79dip(ext:'geoip.dat:private') -> direct
80dip(ext:'geoip.dat:cn') -> direct
81
82fallback: proxy
DNS配合mosdns使用:
1upstream {
2 cndns: 'udp://127.0.0.1:6553'
3 falldns: 'udp://127.0.0.1:6554'
4}
5
6routing {
7 request {
8 qname(ext:'geosite.dat:category-ads') -> reject
9 qname(ext:'geosite.dat:category-ads-all') -> reject
10 fallback: cndns
11 }
12
13 response {
14 # 值得信赖的国外DNS
15 upstream(falldns) -> accept
16 # 可能被污染,走一遍国外DNS
17 ip(geoip:private) && !qname(geosite:cn) -> falldns
18 # 有些固件在DAE拦截DNS后还能正常解析主机名,但是有些固件就不行,这里过滤.lan(主机名后缀)
19 # ip(geoip:private) && !qname(geosite:cn) && !qname(keyword: ".lan") -> falldns
20 # 总是同意
21 fallback: accept
22 }
23}