在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}