pymumu / smartdns

A local DNS server to obtain the fastest website IP for the best Internet experience, support DoT, DoH. 一个本地DNS服务器,获取最快的网站IP,获得最佳上网体验,支持DoH,DoT。
https://pymumu.github.io/smartdns/
GNU General Public License v3.0
8.42k stars 1.08k forks source link

【Feature Request】smartdns需求收集 #1236

Open pymumu opened 1 year ago

pymumu commented 1 year ago

目前smartdns基本功能已经完善,后续还有什么需求请各位给建议。

需求收集包括:

需求功能:
   一句话描述功能。
需求描述:
  详细描述功能。
使用场景:
  使用的运营商,网络情况等。

如果有相同需求,请点赞,点赞数量多的需求实现优先级会相应的高。

wangjian1009 commented 1 year ago

需求功能: 兼顾主机dns配置 需求描述:

  1. 在配置有自定义上游服务器的情况下,能过加载主机dns配置 /etc/resolve.conf
  2. 能监听 /etc/resolve.conf 的变化自动更新 使用场景: 在公司内网使用时,有公司内部的一些配置,希望能够兼顾
PikuZheng commented 1 year ago

稍微总结一下,可能有遗漏

1143 将测速失败的(比如tcp rst,icmp reject)ip加入一个ipset

1065 从一个上游查询结果中排除单个ip(在关闭测速的情况下)

1034 仅在域名不提供ipv4结果时返回ipv6

994 合并全部上游的结果

839 server组支持测速方式配置(speed-check-mode

763 对address记录(如address /www.google.com/192.168.1.31)提供ptr查询结果

yuxuan0107 commented 1 year ago

作个死,X86平台来个统计展示和控制界面吧,类似AdGuardHome那样的哈哈

PikuZheng commented 1 year ago

作个死,X86平台来个统计展示和控制界面吧,类似AdGuardHome那样的哈哈

1154 #1163 #1214 没懂用来统计或控制啥 都x86了 稍微搭一个elastic多好。也可以简单的写一个界面来呈现审计日志的内容。

LisonFan commented 1 year ago

https://github.com/pymumu/smartdns/issues/1211 https://github.com/pymumu/smartdns/issues/1022

关于分流解析功能增强的

@pymumu 大佬,考虑一下这个需求呗

233lol commented 1 year ago

需求功能: 双栈网站,优先ipv4或者ipv6 需求描述: 某些网站有ipv4和ipv6,可以配置优先ipv4还是ipv6 使用场景: 1.校园网ipv6节省流量。 2.某些地区ipv6网络质量没有ipv4好,但是还需要访问某些纯ipv6网站。

233lol commented 1 year ago

需求功能: CDN网站ip重定向 需求描述: 国外很多网站都在使用 Cloudflare CDN,但分配给中国内地访客的 IP 并不友好(延迟高、丢包多、速度慢)。 https://github.com/XIU2/CloudflareSpeedTest 结合这软件,批量替换适合自己的ip地址 使用场景: cloudflare在DNS上的ip地址未必是最适合的。通过CloudflareSpeedTest找出适合的ip地址后对修改域名的ip进行替换。

PikuZheng commented 1 year ago

需求功能: CDN网站ip重定向 需求描述: 国外很多网站都在使用 Cloudflare CDN,但分配给中国内地访客的 IP 并不友好(延迟高、丢包多、速度慢)。 https://github.com/XIU2/CloudflareSpeedTest 结合这软件,批量替换适合自己的ip地址 使用场景: cloudflare在DNS上的ip地址未必是最适合的。通过CloudflareSpeedTest找出适合的ip地址后对修改域名的ip进行替换。

1062 使用特定的ip替换某个ip段的结果

这个功能我目前是用路由器的dstnat实现的。修改dns结果可能会导致一些附加消息丢失,我建议还是用路由器的方法来做

w22gb8 commented 1 year ago

需求功能: 根据客户端ip选择相应的dns服务器和不同的缓存 需求描述: 定义客户端ip集合,不同的集合使用不同的服务器查询并缓存到对应cache 使用场景: 有的客户端ip全部使用国内服务器查询,有的客户端ip需要使用国外服务器查询。 另能否edns-client-subnet添加选项32和128,然后smartdns自动添加客户端ipv4/32或ipv6/128为edns-client-subnet,这样当smartdns做前端时可将查询客户端ip传给后端判断。

Trojanking123 commented 1 year ago

需求功能:一个dns request 包支持 多个query 需求描述:现在如果一个dns 请求 里面有 A 类型 和 AAAA类型query 类型,就是报不支持。支持对这种格式类型的dns 报文

PikuZheng commented 1 year ago

另能否edns-client-subnet添加选项32和128,然后smartdns自动添加客户端ipv4/32或ipv6/128为edns-client-subnet,这样当smartdns做前端时可将查询客户端ip传给后端判断。

希望可以按上游分别配置 edns-client-subnet

Auska commented 1 year ago

需求功能: CDN网站ip重定向 需求描述: 国外很多网站都在使用 Cloudflare CDN,但分配给中国内地访客的 IP 并不友好(延迟高、丢包多、速度慢)。 https://github.com/XIU2/CloudflareSpeedTest 结合这软件,批量替换适合自己的ip地址 使用场景: cloudflare在DNS上的ip地址未必是最适合的。通过CloudflareSpeedTest找出适合的ip地址后对修改域名的ip进行替换。

1062 使用特定的ip替换某个ip段的结果

这个功能我目前是用路由器的dstnat实现的。修改dns结果可能会导致一些附加消息丢失,我建议还是用路由器的方法来做

我是使用浮动路由表实现的,目前运行良好。

wzy105 commented 1 year ago

需求功能: CDN网站ip重定向 需求描述: 国外很多网站都在使用 Cloudflare CDN,但分配给中国内地访客的 IP 并不友好(延迟高、丢包多、速度慢)。 https://github.com/XIU2/CloudflareSpeedTest 结合这软件,批量替换适合自己的ip地址 使用场景: cloudflare在DNS上的ip地址未必是最适合的。通过CloudflareSpeedTest找出适合的ip地址后对修改域名的ip进行替换。

我的需求和这兄弟差不多,就是希望增加 “dns优选” 功能,弄一个 “dns优选模式” 里面整理了各种“著名”dns,打开这个“dns优选模式”日常使用就会对所有dns进行查询测试,最终测试出最精准并最快的dns。 ps.小白说话比较通俗简陋。。

enihcam commented 1 year ago

Given two DNS servers A.A.A.A (local or domestic) and B.B.B.B (foreign), a domain name (for example, new.c.mi.com) can be resolved by B.B.B.B only. However, sometimes I still prefer A.A.A.A as primary. That means, results from the secondary B.B.B.B (or C.C.C.C and go on...) are taken only if A.A.A.A is unable to resolve the domain name.

How to specify this in configuration? Concretely, how to specify priorities of DNS servers (or groups of them)?

cubercsl commented 1 year ago
  1. 既然现在可以用 SmartDNS 解析本地域名,那是否也应该考虑如 dnsmasq 一样可以设置本地域名 (lan)。
  2. 读取已分配的 DHCPv6 租约 /var/hosts/odhcpd 用于给出内网 IPv6 地址。
Hill-98 commented 1 year ago

需求功能:https 验证模式 需求描述:SmartDNS 向解析到的 IP 发送 https 请求,验证 SSL 证书是否合法,如果查询到多个结果 IP,那么优先返回合法的 IP。可以同时测试 IPv4 和 v6,如果只有 v4 合法,那么只返回 v4。如果有多个合法 IP,再进行测速。 使用场景:同时配置多个国内外 DNS 服务器时避免 DNS 污染,主要是针对不存在与 GFWList 的域名,GFWList 的域名可以通过配置走特定 DNS 服务器,但是还没有被添加的域名还是会被污染。

unicser commented 1 year ago

通过kill -HUP不重启smartdns进程,重新加载配置文件和domain-set list文件

daxingplay commented 1 year ago

命令行参数能增加一个 config test 的能力。 应用场景:定时更新 domain-set,重启 smartdns 进程之前希望能先校验一下配置文件的合法性。

xianren78 commented 1 year ago

增加DNS rewrites功能,adguard home上这样实现 rewrites:

rapdodge commented 1 year ago

DNS64 features https://www.rfc-editor.org/rfc/rfc6147

showgood163 commented 1 year ago

Add a flag for ipv6 only environment, e.g. force-A-SOA which is like force-AAAA-SOA but discards all A records

PikuZheng commented 1 year ago

Add a flag for ipv6 only environment, e.g. force-A-SOA which is like force-AAAA-SOA but discards all A records

force-qtype-SOA 1

wolerine commented 1 year ago

DoQ https://www.rfc-editor.org/rfc/rfc9250

mokeyish commented 1 year ago

希望开个 discord.com 在线群聊的频道,方便沟通交流

iamyangyiok commented 1 year ago

可否测速后,返回结果不是一个,排序所有的结果都保留。这样多点下载能用到。

PikuZheng commented 1 year ago

可否测速后,返回结果不是一个,排序所有的结果都保

目前开启缓存后,二次查询即返回所有结果。一次查询可以用 response-mode 控制

zb737472783 commented 1 year ago

需求功能: 增加图形界面操作 需求描述: 增加图形化界面的参数配置,操作等 使用场景: 图形化操作

iamyangyiok commented 1 year ago

可否测速后,返回结果不是一个,排序所有的结果都保

目前开启缓存后,二次查询即返回所有结果。一次查询可以用 response-mode 控制 可以设每一次都返回全部排序不,不要二次才返回全部

pymumu commented 1 year ago

希望开个 discord.com 在线群聊的频道,方便沟通交流

这个网站访问不了吧,可以在github的discussion里面也可以? 或者可以建立一个IRC。比如:https://webchat.oftc.net/?channels=smartdns 可以命令行链接: /server irc.oftc.net /join #smartdns

pymumu commented 1 year ago

可否测速后,返回结果不是一个,排序所有的结果都保

目前开启缓存后,二次查询即返回所有结果。一次查询可以用 response-mode 控制 可以设每一次都返回全部排序不,不要二次才返回全部

默认配置,第二次访问就是多IP了

PikuZheng commented 1 year ago

可否测速后,返回结果不是一个,排序所有的结果都保 可以设每一次都返回全部排序不,不要二次才返回全部

speed-check-mode ping
response-mode fastest-ip
cache-size 大于0

试试,但是首次查询要等待所有上游结果,稍慢

mokeyish commented 1 year ago

希望开个 discord.com 在线群聊的频道,方便沟通交流

这个网站访问不了吧,可以在github的discussion里面也可以? 或者可以建立一个IRC。比如:https://webchat.oftc.net/?channels=smartdns 可以命令行链接: /server irc.oftc.net /join #smartdns

可以访问啊,像是什么 vue、react、rust 在这上面都有频道,遇到问题,在对应的频道问,上万人的大群都有,比 QQ 群方便。

图片

PikuZheng commented 1 year ago

希望开个 discord.com 在线群聊的频道,方便沟通交流

这个网站访问不了吧,可以在github的discussion里面也可以? 或者可以建立一个IRC。比如:https://webchat.oftc.net/?channels=smartdns 可以命令行链接: /server irc.oftc.net /join #smartdns

可以访问啊,像是什么 vue、react、rust 在这上面都有频道,遇到问题,在对应的频道问,上万人的大群都有,比 QQ 群方便。

试了下国内访问有困难。安卓app干点啥就假死(点击没反应),已经差评了

pymumu commented 1 year ago

希望开个 discord.com 在线群聊的频道,方便沟通交流

这个网站访问不了吧,可以在github的discussion里面也可以? 或者可以建立一个IRC。比如:https://webchat.oftc.net/?channels=smartdns 可以命令行链接: /server irc.oftc.net /join #smartdns

可以访问啊,像是什么 vue、react、rust 在这上面都有频道,遇到问题,在对应的频道问,上万人的大群都有,比 QQ 群方便。

图片

discord应该是无法直接访问的,irc频道联通手机是可以直接访问的

iamyangyiok commented 1 year ago

可否测速后,返回结果不是一个,排序所有的结果都保 可以设每一次都返回全部排序不,不要二次才返回全部

speed-check-mode ping
response-mode fastest-ip
cache-size 大于0

试试,但是首次查询要等待所有上游结果,稍慢

试了不行,还是只有一个。

PikuZheng commented 1 year ago

可否测速后,返回结果不是一个,排序所有的结果都保 可以设每一次都返回全部排序不,不要二次才返回全部

speed-check-mode ping
response-mode fastest-ip
cache-size 大于0

试试,但是首次查询要等待所有上游结果,稍慢

试了不行,还是只有一个。

max-reply-ip-num 设大于1的值 如果还不行 建议开单独的issue

jkle112 commented 1 year ago

由於網絡干擾HTTPS/TLS加密,導致服務器很不好用,需要支持QUIC和DNSCRYPT的方式,如果是UDP/TCP容易被服務商劫持。 新增的廣告過濾功能按照提示安裝了anti-AD,希望能起作用,內存沒有什麼變化! BLACK IP功能能否像廣告過濾域名一樣,也添加類似anti-AD的源地址,支持類似的文件! 107.25.100.0/24 192.187.1.4 如果都是按照文檔一個一個修改後再粘貼到自定義規則裡面,效果不好,之前數據量大,導致界面顯示不正常,此外更新也麻煩。 最近幾天出現沒有網絡的情況,切換到AdGuardHome就恢復了,再換回來SMARTDNS又沒有網絡了,給添加114的服務器用UDP方式,還是沒有網絡。 過幾天SMARTDNS又可以使用了,而且還不需要使用114的服務器,開啟了收集功能,但是沒有找到日誌和相關文件,所以迫切希望參考AdGuardHome增加抗干擾的服務器模式,另外SMARTDNS比AdGuardHome在過濾域名方面有優勢,內存占用很小。 新年新希望,有測試版本也請及時發布,我會及時反饋信息的。 非常感謝!

mokeyish commented 1 year ago
  1. 既然现在可以用 SmartDNS 解析本地域名,那是否也应该考虑如 dnsmasq 一样可以设置本地域名 (lan)。

    1. 读取已分配的 DHCPv6 租约 /var/hosts/odhcpd 用于给出内网 IPv6 地址。

设置本地域名 lan,我昨天在实现了下。 暂定用 domain xxx 的方式 图片

第二点,原来 ipv6 的在这,我一直找不到文件在哪,我下周加上🤣

整个 DHCP 的功能,也打算加上,这里已经有人实现了库,到时集成进来,这样可以替代 dnsmasq 的所有功能了。

pymumu commented 1 year ago

@mokeyish dnsmasq里面有两个参数,一个是domain,一个是local domain应该是给dhcp用的。local表示对应的域名后缀使用本地方法解析,比如读取host文件或dhcp信息。

做法上可以保持和dnsmasq类似。

后面local可以增加mdns的能力。

还有dhcpv6的的地址,如果是无状态的,那个文件应该是没有地址的。 除非是有状态的。

但有状态的,如果作外部公网转发的话,是无法做的。所以对于小型家庭网络,可能用无状态dhcpv6会比较多。

mokeyish commented 1 year ago

@pymumu 是的,我在archlinux wiki,也看到了, 所以用就暂定用 domain 了

pymumu commented 1 year ago

local=/lan/ domain=lan

这两个一般是同时使用的。domain是给dhcp用的。local是给dns用的。 所以,如果是解析主机名的话,应该用local

https://thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html

honwen commented 1 year ago

redirect like mosdns

refer: https://github.com/IrineSistiana/mosdns/discussions/605 , fix cnbeta

pymumu commented 1 year ago

redirect like mosdns

refer: https://github.com/IrineSistiana/mosdns/discussions/605 , fix cnbeta

cname /a.com/b.com

abolast commented 1 year ago

需求功能: rr-ttl set 能豁免具体对某个域名的ttl修改 需求描述: rr-ttl-min 可以修改本地ttl,有时候会设置过大来避免频繁去查询dns,这个时候希望可以单独配置某个域名比较小的ttl,比如domain-rules /ddns.example.com/ -rr-ttl-max 60 -speed-check-mode none -no-serve-expired 使用场景: 比如自己控制下的域名,修改解析ip之后能很快让之前获取到的dns结果失效并获取新到ip。因为我rr-ttl-min设置不规范,设置到了24h了,就算是等待1h也是很漫长的时间了。能设置rr-ttl-min是我喜欢smartdns的功能之一了。 还有一个场景,就是自建的梯子ip这一项用二级域名替代,梯子服务器更换ip之后本地节点只需要等待该二级域名新结果而不需要任何修改,这个时候也需要之前获取到的dns结果快点失效

pymumu commented 1 year ago

需求功能: rr-ttl set 能豁免具体对某个域名的ttl修改 需求描述: rr-ttl-min 可以修改本地ttl,有时候会设置过大来避免频繁去查询dns,这个时候希望可以单独配置某个域名比较小的ttl,比如domain-rules /ddns.example.com/ -rr-ttl-max 60 -speed-check-mode none -no-serve-expired 使用场景: 比如自己控制下的域名,修改解析ip之后能很快让之前获取到的dns结果失效并获取新到ip。因为我rr-ttl-min设置不规范,设置到了24h了,就算是等待1h也是很漫长的时间了。能设置rr-ttl-min是我喜欢smartdns的功能之一了。 还有一个场景,就是自建的梯子ip这一项用二级域名替代,梯子服务器更换ip之后本地节点只需要等待该二级域名新结果而不需要任何修改,这个时候也需要之前获取到的dns结果快点失效

自己网络访问自己的DDNS域名,难道不是直接address设置本地局域网固定IP么?

address /ddns.example.com/192.168.1.1

domain-rules增加了三个参数-rr-tll -rr-ttl-min -rr-ttl-max。

PikuZheng commented 1 year ago

需求功能: rr-ttl set 能豁免具体对某个域名的ttl修改 需求描述: rr-ttl-min 可以修改本地ttl,有时候会设置过大来避免频繁去查询dns,这个时候希望可以单独配置某个域名比较小的ttl,比如domain-rules /ddns.example.com/ -rr-ttl-max 60 -speed-check-mode none -no-serve-expired 使用场景: 比如自己控制下的域名,修改解析ip之后能很快让之前获取到的dns结果失效并获取新到ip。因为我rr-ttl-min设置不规范,设置到了24h了,就算是等待1h也是很漫长的时间了。能设置rr-ttl-min是我喜欢smartdns的功能之一了。 还有一个场景,就是自建的梯子ip这一项用二级域名替代,梯子服务器更换ip之后本地节点只需要等待该二级域名新结果而不需要任何修改,这个时候也需要之前获取到的dns结果快点失效

ddns什么的建议禁用缓存,可以用domain-rules实现。另外ddns不要用阿里作为上游。

pymumu commented 1 year ago

DNS64 features https://www.rfc-editor.org/rfc/rfc6147

最新代码简单支持了下DNS64,可以获取验证下看看。

dualstack-ip-allow-force-AAAA yes
dns64 64:ff9b::/96
abolast commented 1 year ago

需求功能: rr-ttl set 能豁免具体对某个域名的ttl修改 需求描述: rr-ttl-min 可以修改本地ttl,有时候会设置过大来避免频繁去查询dns,这个时候希望可以单独配置某个域名比较小的ttl,比如domain-rules /ddns.example.com/ -rr-ttl-max 60 -speed-check-mode none -no-serve-expired 使用场景: 比如自己控制下的域名,修改解析ip之后能很快让之前获取到的dns结果失效并获取新到ip。因为我rr-ttl-min设置不规范,设置到了24h了,就算是等待1h也是很漫长的时间了。能设置rr-ttl-min是我喜欢smartdns的功能之一了。 还有一个场景,就是自建的梯子ip这一项用二级域名替代,梯子服务器更换ip之后本地节点只需要等待该二级域名新结果而不需要任何修改,这个时候也需要之前获取到的dns结果快点失效

自己网络访问自己的DDNS域名,难道不是直接address设置本地局域网固定IP么?

address /ddns.example.com/192.168.1.1

domain-rules增加了三个参数-rr-tll -rr-ttl-min -rr-ttl-max。

折腾了几个小时,我没办法在linux下成功构建arm的交叉编译环境,希望功能增加到一定程度能发布新版本和smartdns-arm二进制文件,我在tomato下运行smartdns是通过二进制文件运行的,非常感谢

pymumu commented 1 year ago

需求功能: rr-ttl set 能豁免具体对某个域名的ttl修改 需求描述: rr-ttl-min 可以修改本地ttl,有时候会设置过大来避免频繁去查询dns,这个时候希望可以单独配置某个域名比较小的ttl,比如domain-rules /ddns.example.com/ -rr-ttl-max 60 -speed-check-mode none -no-serve-expired 使用场景: 比如自己控制下的域名,修改解析ip之后能很快让之前获取到的dns结果失效并获取新到ip。因为我rr-ttl-min设置不规范,设置到了24h了,就算是等待1h也是很漫长的时间了。能设置rr-ttl-min是我喜欢smartdns的功能之一了。 还有一个场景,就是自建的梯子ip这一项用二级域名替代,梯子服务器更换ip之后本地节点只需要等待该二级域名新结果而不需要任何修改,这个时候也需要之前获取到的dns结果快点失效

自己网络访问自己的DDNS域名,难道不是直接address设置本地局域网固定IP么? address /ddns.example.com/192.168.1.1 domain-rules增加了三个参数-rr-tll -rr-ttl-min -rr-ttl-max。

折腾了几个小时,我没办法在linux下成功构建arm的交叉编译环境,希望功能增加到一定程度能发布新版本和smartdns-arm二进制文件,我在tomato下运行smartdns是通过二进制文件运行的,非常感谢

smartdns-build.zip 等大家测试稳定了,会发版本。

PikuZheng commented 1 year ago

折腾了几个小时,我没办法在linux下成功构建arm的交叉编译环境,希望功能增加到一定程度能发布新版本和smartdns-arm二进制文件,我在tomato下运行smartdns是通过二进制文件运行的,非常感谢

我用qemu,在GitHub action环境下是可以成功编译的