daeuniverse / dae

eBPF-based Linux high-performance transparent proxy solution.
GNU Affero General Public License v3.0
3.05k stars 191 forks source link

[Feature Request] <Dae的dns策略非常不错能否单独作为一个 dns sever来运行呢> #508

Open shoaly opened 5 months ago

shoaly commented 5 months ago

Use Cases

主要是那个dns 中 response的部分可以很好的应对dns污染

dae-prow[bot] commented 5 months ago

Thanks for opening this issue!

mzz2017 commented 5 months ago

可以看看 mosdns 这个项目

onion83 commented 5 months ago

强烈支持增加这个 dns server 这个 feature, 上游有 geosite/geoip 等活跃生态,这样 dae 就是一个全功能网关了(如能再加个轻量dhcp server 更佳,完全能充当主路由)

目前有一个 trick 可以楼主实现这个功能:就是将一个不存在的 IP 做一条静态/策略路由到 dae 主机本身,即可实现你要的 dns 分流功能。

mzz2017 commented 5 months ago

可以在本地起一个 glider 实现 dns server 和 dhcp server,dae 增加 bindwan

shoaly commented 5 months ago

强烈支持增加这个 dns server 这个 feature, 上游有 geosite/geoip 等活跃生态,这样 dae 就是一个全功能网关了(如能再加个轻量dhcp server 更佳,完全能充当主路由)

目前有一个 trick 可以楼主实现这个功能:就是将一个不存在的 IP 做一条静态/策略路由到 dae 主机本身,即可实现你要的 dns 分流功能。

确实就是把xary+ [dae+ armbian] 替换openwrt来用的, 如果出了新的协议, 只需要替换xray部分的socks5代理就好, 整个结构非常轻量且稳定

BoringCat commented 5 months ago

+1 长远来看增加dns server是有必要的,最近发现windows上的chromium系浏览器开始优先使用dns over tcp了,导致dns分流失效,不得不在路由器上加上dns重定向的iptables规则。 image

eskimokk commented 4 months ago

强烈支持增加这个 dns server 这个 feature, 上游有 geosite/geoip 等活跃生态,这样 dae 就是一个全功能网关了(如能再加个轻量dhcp server 更佳,完全能充当主路由)

目前有一个 trick 可以楼主实现这个功能:就是将一个不存在的 IP 做一条静态/策略路由到 dae 主机本身,即可实现你要的 dns 分流功能。

展开说说?

onion83 commented 4 months ago

强烈支持增加这个 dns server 这个 feature, 上游有 geosite/geoip 等活跃生态,这样 dae 就是一个全功能网关了(如能再加个轻量dhcp server 更佳,完全能充当主路由) 目前有一个 trick 可以楼主实现这个功能:就是将一个不存在的 IP 做一条静态/策略路由到 dae 主机本身,即可实现你要的 dns 分流功能。

展开说说?

这个很简单啊,假设 dae 主机的 IP 是 192.168.1.1 ,“虚拟DNS“”的 IP 是 11.22.33.44 你在路由器上配置一条静态路由, 对等的linux命令是 ip route add 11.22.33.44 via 192.168.1.1 利用 dig www.google.com @11.22.33.44 就能看到效果了,最后配置 dhcp server 的全局下发这个“虚拟dns” 即可。

原理就是利用 dae 默认会全局嗅探 dns 并劫持后分流,它才不管你来路,这招已经用很久了。

onion83 commented 4 months ago

补充上楼,因为这个 "虚拟dns" 地址不存在,为了避免 dae 继续转公网出去,需要在路由阶段将其 block 掉,这样就能走 dns 路由规则了。

routing {
    ...

    # Fake DNS
    dip('11.22.33.44') -> block

    ...
}