全局配置文件
global {
# tproxy监听端口
tproxy_port: 12345
# 设置为true开启可保护tproxy端口不受未经请求的流量的影响
tproxy_port_protect: true
# so_mark标记网络数据包,如果不为零,则从 dae 发送的流量将被设置为 SO_MARK
so_mark_from_dae: 0
# 日志级别: error, warn, info, debug, trace.
log_level: info
# 是否禁止等待网络,在拉取订阅之前
disable_waiting_network: false
##### 网络接口和内核选项
# 如果你需要为其他局域网设备提供代理,需要绑定LAN接口,多个网卡","分割
lan_interface: eth0,docker0
# 如果你要代理本机流量,需要绑定WAN接口,多个接口","分割,也可以使用自动检测"auto"
wan_interface: auto
# 自动配置Linux内核参数。ip_forward和send_redirects
auto_config_kernel_parameter: true
##### IP地址连通性检查
# 如果你主机有双栈的话,检查链接需要有IPV4和IPV6
# 第一个是URL,其他可以指定IP
# 考虑到流量消耗,建议选择anycast IP(CDN)、响应数据少的站点。
#tcp_check_url: 'http://cp.cloudflare.com'
tcp_check_url: 'http://cp.cloudflare.com,1.1.1.1,2606:4700:4700::1111'
# 检查的HTTP请求方法
tcp_check_http_method: HEAD
# 用于检查IP地址的UDP连接. 如果dns_upstream配置包含 tcp, 同样可以用来检查TCPIP地址
# 第一个是URL,其他是IP
# 如果你主机有双栈的话,IPV4和IPV6都需要指定
#udp_check_dns: 'dns.google.com:53'
udp_check_dns: 'dns.google.com:53,8.8.8.8,2001:4860:4860::8888'
# 检查间隔
check_interval: 30s
# 当IP地址延迟差多少会切换IP地址
check_tolerance: 50ms
##### 连接选项.
# 拨号模式:ip,domain,domain+,domain++
dial_mode: domain
# 是否允许不安全的TLS证书
allow_insecure: false
# 等待第一次嗅探数据发送的超时时间
# 如果dial_mode是ip,那么设置为0
sniffing_timeout: 100ms
# tls实现,设置为tls则使用crypto/tls,设置为utls则使用uTLS,可以模仿浏览器的指纹
tls_implementation: utls
# utls要模仿的客户端,仅当utls时生效
utls_imitate: chrome_auto
}
DNS配置文件
dns {
# ip偏好,如果为4,则当域名有ipv4和ipv6记录,则只会响应ipv4
#ipversion_prefer: 4
# 固定域名的ttl,若设置0,代表不缓存DNS查询结果
fixed_domain_ttl {
ddns.example.org: 10
test.example.org: 3600
}
upstream {
# 格式为 scheme://host:port, 支持 tcp/udp/tcp+udp.
# 如果是host是域名而且有IPv4和IPv6记录, dae 会通过组策略自动选择,例如最小延迟策略
# 请确保DNS流量通过dae并由dae转发, 这是域路由必须的
# 如果 dial_mode 是 "ip", 则上游DNS应答不应该被污染, 所以不推荐使用国内公共DNS.
alidns: 'udp://dns.alidns.com:53'
googledns: 'tcp+udp://dns.google.com:53'
}
routing {
# 根据DNS查询的请求,决定使用哪个DNS服务器
# 规则从上到下匹配
request {
# 内置出站:asis,reject
# 可用的方法qname, qtype
# 广告拒绝
qname(geosite:category-ads-all) -> reject
# 这里的意思是google中是cn的域名使用alidns
qname(geosite:google@cn) -> alidns
# 匹配后缀,匹配关键字
qname(suffix: abc.com, keyword: google) -> googledns
# 全匹配和正则匹配
qname(full: ok.com, regex: '^yes') -> googledns
# DNS 请求类型
# ipv4和ipv6请求使用alidns
qtype(a, aaaa) -> alidns
# cname请求googledns
qtype(cname) -> googledns
# 默认DNS服务器
fallback: alidns
}
# 根据DNS查询的响应,决定接受或者使用另外一个DNS服务器重新查询记录
# 规则从上到下匹配
response {
# 内置出站:accept,reject
# 可用的方法:qname, qtype, upstream, ip.
# 如果是发送到googledns的请求响应,则接受,可用于避免循环
upstream(googledns) -> accept
# 意思是如果请求的域名不是国内网站,但是返回了一个私有的IP,那就是被污染了。重新通过googledns请求
ip(geoip:private) && !qname(geosite:cn) -> googledns
# 以上不匹配,默认
fallback: accept
}
}
}
路由配置文件
routing {
### 以下是预设规则
# 本地的网络管理器应该直连,以避免在绑定WAN接口的时候出现错误的网络连通性检查结果
pname(NetworkManager) -> direct
# 把它放在前面,可以防止多播应该发送到局域网的数据包被代理转发。
# "dip" 意思是目的IP.
dip(224.0.0.0/3, 'ff00::/8') -> direct
# 该设置允许你直接访问私有地址而不是通过代理,如果你想访问代理主机的私有网络地址,可以修改下面配置
dip(geoip:private) -> direct
### 以下是自定义规则
# 内置出站:block, direct, must_rules
# must_rules表示不将DNS流量重定向到dae并继续匹配
# must_direct和must_my_groupName 表示不会将DNS流量重定向到dae,不会继续匹配
# 对于单个规则,direct会劫持并处理DNS请求(用于流量分割),而must_direct不会
# 如果存在DNS请求循环时,must_direct很有用
# "must_direct" 可以写成 "direct(must)".
# 同样,“must_groupname”也支持不劫持和处理 DNS 流量,
# 相当于“groupname(must)”。groupname指的是出站分组
# 如果没有任何规则匹配,默认的出站分组
fallback: my_group
## 域名规则
# 后缀匹配
domain(suffix: “师夷长技以制夷”a.org) -> my_group
# 全匹配,两种写法
# equals to domain(“师夷长技以制夷”a.org) -> my_group
domain(full: dns.google.com) -> my_group
# 关键字匹配
domain(keyword: facebook) -> my_group
# 正则匹配
domain(regex: '\.goo.*\.com$') -> my_group
# geosite匹配
domain(geosite:category-ads) -> block
domain(geosite:cn) -> direct
# 组合规则
domain(keyword: google, suffix: www.twitter.com, suffix: “师夷长技以制夷”a.org) -> my_group
## 目的IP规则
# 单个IP匹配
dip(8.8.8.8) -> direct
# 单个IP段匹配
dip(101.97.0.0/16) -> direct
# geoip匹配
dip(geoip:private) -> direct
# 多目的IP规则
dip(geoip:cn, geoip:private) -> direct
dip(9.9.9.9, 223.5.5.5) -> direct
## 源IP规则
sip(192.168.0.0/24) -> my_group
sip(192.168.50.0/24) -> direct
# 多源IP规则
sip(192.168.0.6, 192.168.0.10, 192.168.0.15) -> direct
# ip规则
ip(geoip:cn) -> direct
## 目的端口规则
# 单个端口
dport(80) -> direct
# 端口范围
dport(80) -> direct
# 端口范围
dport(10080-30000) -> direct
## 源端口规则
# 单个端口
sport(38563) -> direct
# 端口范围
sport(10080-30000) -> direct
## 四层协议规则:
# tcp
l4proto(tcp) -> my_group
# udp
l4proto(udp) -> direct
## IP版本规则:
# IPv4
ipversion(4) -> block
# IPv6
ipversion(6) -> ipv6_group
## 源MAC规则
mac('02:42:ac:11:00:02') -> direct
## 进程名规则 (当绑定WAN接口是只支持本地进程)
pname(curl) -> direct
## DSCP规则 (匹配 DSCP; 对于绕过BT有用).
# See https://github.com/daeuniverse/dae/discussions/295
dscp(0x4) -> direct
## "且"规则
dip(geoip:cn) && dport(80) -> direct
dip(8.8.8.8) && l4proto(tcp) && dport(1-1023, 8443) -> my_group
dip(1.1.1.1) && sip(10.0.0.1, 172.20.0.0/16) -> direct
## “非“规则
# 下面代表,域名不是geosite类型为google-scholar或者category-scholar-!cn或者category-scholar-cn
!domain(geosite:google-scholar,
geosite:category-scholar-!cn,
geosite:category-scholar-cn
) -> my_group
## 更复杂的规则,我觉得少用
domain(geosite:geolocation-!cn) &&
!domain(geosite:google-scholar,
geosite:category-scholar-!cn,
geosite:category-scholar-cn
) -> my_group
## 自定义 DAT 文件
domain(ext:"yourdatfile.dat:yourtag")->direct
dip(ext:"yourdatfile.dat:yourtag")->direct
## 设置 fwmark(Firewall Mark)
# 当您想要将流量重定向到特定接口(例如wireguard)或用于其他高级用途时,标记非常有用
# 以下是将Disney的流量重定向到wg0接口的过程
# You need set ip rule and ip table like this:
# 1. Set all traffic with mark 0x800/0x800 to use route table 1145:
# >> ip rule add fwmark 0x800/0x800 table 1145
# >> ip -6 rule add fwmark 0x800/0x800 table 1145
# 2. Set default route of route table 1145:
# >> ip route add default dev wg0 scope global table 1145
# >> ip -6 route add default dev wg0 scope global table 1145
# Notice that interface wg0, mark 0x800, table 1145 can be set by preferences, but cannot conflict.
# 3. Set routing rules in dae config file.
domain(geosite:disney) -> direct(mark: 0x800)
## Must rules
# 对于以下规则,DNS请求将会被强制重定向到dae,除了mosdns的请求
# 不同于must_direct/must_my_group,来自mosdns的流量会继续匹配其他规则
pname(mosdns) -> must_rules
ip(geoip:cn) -> direct
domain(geosite:cn) -> direct
fallback: my_group
} 