You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
dport(53) && pname(systemd-resolved) -> direct
dport(53) -> must_rules
# Should equal to:
# dport(53) && !pname(systemd-resolved) -> must_rules
dip(geoip:private) -> direct
dip(geoip:cn) -> direct
domain(geosite:cn) -> direct
fallback: proxy
可以按照预期实现最开头我想实现的效果
或是
!pname(systemd-resolved) -> must_direct #不劫持resolved之外的
fallback: direct #也就是只劫持resolved
亦或是
pname(systemd-resolved) -> must_direct # 不劫持resolved
fallback: direct #其他都劫持
Checks
Current Behavior
首先,我期望除了
systemd-resolved
进行的DNS查询都不被DAE劫持,因此有了如下规则:这里我们讨论第一条规则,它的效果应该是:
若是
systemd-resolved
产生的流量,应当不会触发must_rules
,随后被DAE的DNS模块接管而其他流量,应该会触发
must_rules
,不被DAE的DNS模块接管例如,我这边
systemd-resolved
若查询raw.githubusercontent.com
会获得0.0.0.0
在没有第一条规则的默认情况下,所有DNS查询都会被DAE劫持,能够正常返回结果
加入第一条规则后,则成功触发第一条规则就不能返回正确结果
按照第一条规则,通过
systemd-resolved
进行查询时,这条规则应为false,即应当不触发规则并返回正确结果:结果却和预期不尽相同,返回了错误结果,也就是说没有经过DAE的DNS(日志也可以佐证这一点),即触发了这条规则
若我们直接通过dig查询,此时这条规则应为true,即应当触发规则并返回错误结果:
结果和预期一致
即对于这条规则,无论哪个经常查询,都会触发(都是true)
一开始以为是取反在作祟,然后继续测试发现,不取反也会无条件的一定触发,例如对于如下规则:
和之前的规则是反过来的,则
systemd-resolved
进行的查询不被劫持,其他都应当劫持但效果却和取反了一样,无论哪个经常查询,都不劫持,则无论如何都触发了
must_rules
.更奇怪的是,对于如下规则:
字面意思应该是,如果不是
systemd-resolved
发的流量,而且还不是DNS流量,就不劫持DNS,其余都劫持也就是说没有任何DNS流量可以匹配该规则,即所有DNS流量都应当被劫持
但是这条规则却可以无视第一个条件,让所以流量都触发
must_rules
,都不劫持除此之外,经过测试,只要不涉及
must_rules
,无论是否取反,pname都正确工作,例如:可以按照预期实现最开头我想实现的效果
或是
亦或是
经测试都按照预期效果工作
Expected Behavior
或
或
应该按照语义工作
Steps to Reproduce
例如,创建如下规则:
随后观察xxx的DNS流量是否可以进入DAE的DNS模块
应当可以,但是因为
pname = xxx
时!pname(xxx)
错误的为true,事实上不行Environment
dae --version
):在 patch/optimize(bpf): improve lan hijack datapath performance #466 上测试,上述的问题在0.4.0中表现也基本一致
0.4.0还有一些其他问题,没有做完整的测试
但至少
must_rules
的,这显然是不合理的cat /etc/os-release
):uname -a
):Anything else?
No response
The text was updated successfully, but these errors were encountered: