135 lines
7.0 KiB
Markdown
135 lines
7.0 KiB
Markdown
---
|
||
hide:
|
||
- navigation
|
||
---
|
||
|
||
# 常见问题
|
||
|
||
## SmartDNS 和 DNSmasq 有什么区别?
|
||
|
||
SmartDNS 在设计上并不是 DNSmasq 的替代品,它的主要功能集中在 DNS 解析增强上,增强部分有:
|
||
|
||
- 多上游服务器并发请求,对结果进行测速后,返回最佳结果;
|
||
- address、ipset 域名匹配采用高效算法,查询匹配更加快速,即使是路由器设备也依然高效;
|
||
- 域名匹配支持忽略特定域名,可单独匹配 IPv4 和 IPv6,支持多样化定制;
|
||
- 针对广告屏蔽功能做增强,返回 SOA,屏蔽广告效果更佳;
|
||
- IPv4、IPv6 双栈 IP 优选机制,在双网情况下,选择最快的网络通讯;
|
||
- 支持最新的 TLS 和 HTTPS 协议,提供安全的 DNS 查询能力;
|
||
- ECS 支持,使查询结果更佳准确;
|
||
- IP 黑名单和忽略 IP 机制,使域名查询更佳准确;
|
||
- 域名预查询,访问常用网站更加快速;
|
||
- 域名 TTL 可指定,使访问更快速;
|
||
- 高速缓存机制,使访问更快速;
|
||
- 异步日志,审计机制,在记录信息的同时不影响 DNS 查询性能;
|
||
- 域名组(group)机制,特定域名使用特定上游服务器组查询,避免隐私泄漏;
|
||
- 第二 DNS 支持自定义更多行为。
|
||
|
||
## 如何配置上游服务器最佳?
|
||
|
||
SmartDNS 有测速机制,在配置上游服务器时,建议配置多个上游 DNS 服务器,包含多个不同区域的服务器,但总数建议在 10 个左右。推荐搭配
|
||
|
||
- 运营商 DNS。
|
||
- 国内公共 DNS,如 `119.29.29.29`, `223.5.5.5`。
|
||
- 国外公共 DNS,如 `8.8.8.8`, `8.8.4.4`。
|
||
|
||
## 如何启用审计日志?
|
||
|
||
审计日志记录客户端请求的域名,记录信息包括,请求时间,请求 IP,请求域名,请求类型,如果要启用审计日志,在配置界面配置 `audit-enable yes` 启用,`audit-size`、 `audit-file`、`audit-num` 分别配置审计日志文件大小,审计日志文件路径,和审计日志文件个数。审计日志文件将会压缩存储以节省空间。
|
||
|
||
## 如何避免隐私泄漏?
|
||
|
||
默认情况下,SmartDNS 会将请求发送到所有配置的DNS服务器,若上游 DNS 服务器使用DNS,或记录日志,将会导致隐私泄漏。为避免隐私泄漏,请尽量:
|
||
|
||
- 配置使用可信的DNS服务器。
|
||
- 优先使用 TLS 查询。
|
||
- 设置上游 DNS 服务器组。
|
||
|
||
## IPv4、IPv6 双栈 IP 优选功能如何使用?
|
||
|
||
目前 IPv6 已经开始普及,但 IPv6 网络在速度上,某些情况下还不如 IPv4。为在双栈网络下获得较好的体验,SmartDNS 提供来双栈IP优选机制,同一个域名,若 IPv4 的速度远快与 IPv6,那么 SmartDNS 就会阻止IPv6的解析、使用 IPv4 访问。可在配置文件中通过设置 `dualstack-ip-selection yes` 启用此功能,通过 `dualstack-ip-selection-threshold [time]` 来修改阈值。如果要完全禁止 IPv6 AAAA记录解析,可设置 `force-AAAA-SOA yes`。
|
||
|
||
## 如何提高缓存效率,加快访问速度?
|
||
|
||
SmartDNS 提供了域名缓存机制,对查询的域名,进行缓存,缓存时间符合 DNS TTL 规范。为提高缓存命中率,可采用如下措施:
|
||
|
||
- 适当增大缓存的记录数
|
||
|
||
通过 `cache-size` 来设置缓存记录数。
|
||
|
||
查询压力大的环境下,并且有内存大的机器的情况下,可适当调大。
|
||
|
||
- 适当设置最小 TTL 值
|
||
|
||
通过 `rr-ttl-min` 将最低 DNS TTL 时间设置为一个合理值,延长缓存时间。
|
||
|
||
建议是超时时间设置在 10~30 分钟,避免服务器域名变化时,查询到失效域名。
|
||
|
||
- 开启域名预获取功能
|
||
|
||
通过 `prefetch-domain yes` 来启用域名预先获取功能,提高查询命中率。
|
||
|
||
配合上述 TTL 超时时间,SmartDNS 将在域名 TTL 即将超时时,再次发送查询请求,并缓存查询结果供后续使用。频繁访问的域名将会持续缓存。此功能将在空闲时消耗更多的 CPU。
|
||
|
||
- 过期缓存服务功能
|
||
|
||
通过 `serve-expired` 来启用过期缓存服务功能,可提高缓存命中率的同时,降低CPU占用。
|
||
|
||
此功能会在TTL超时后,将返回 TTL=0 给客户端,并且同时再次发送查询请求,并缓存新的结果给后续使用。
|
||
|
||
## 第二 DNS 如何自定义更多行为?
|
||
|
||
第二 DNS 可以作为其他 DNS 服务器的上游,提供更多的查询行为,通过 bind 配置支持可以绑定多个端口,不同端口可设置不同的标志,实现不同的功能,如
|
||
|
||
```shell
|
||
# 绑定 6053 端口,6053 端口的请求将采用配置 office 组的上游查询,且不对结果进行测速,忽略 address 的配置地址
|
||
bind [::]:6053 -no-speed-check -group office -no-rule-addr
|
||
```
|
||
|
||
## DoT 的 SPKI 如何获取?
|
||
|
||
SPKI 可以通过 DNS 服务商发布的页面获取,如果没有发布,可以通过如下命令获取,其中将对应IP地址更换为要获取 SPKI 的 IP 地址。
|
||
|
||
```shell
|
||
echo | openssl s_client -connect '1.0.0.1:853' 2>/dev/null | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
|
||
```
|
||
|
||
## iOS系统解析缓慢问题怎么解决?
|
||
|
||
IOS14开始,苹果支持了DNS HTTPS(TYPE65)记录的解析,此功能用于快速DNS查询和解决HTTPS链接相关的问题,但当前还是草案,另外会导致广告屏蔽等功能失效,建议通过如下配置关闭TYPE65记录查询。
|
||
|
||
```shell
|
||
force-qtype-SOA 65
|
||
```
|
||
|
||
## 为什么smartdns会返回多个IP
|
||
|
||
SmartDNS在早期版本,只会返回一个IP地址,这一个IP地址速度是最快的,这对游戏,浏览器都很好,但对于一些视频播放软件,下载软件则不太友好。这些软件需要更多好的IP地址。
|
||
|
||
所以,smartdns从37开始,支持返回多个优选的IP地址,这些优选的IP地址原则是:
|
||
|
||
1. 如果缓存没有命中,则及时返回一个IP地址给客户端,并设置TTL为3,让客户端再次查询,避免客户端等待。
|
||
1. 并行的,smartdns等待所有IP地址的查询结果,并对查询结果进行优选。原则为:
|
||
- IP列表中的第一个IP为最快地址。
|
||
- 其他IP相比第一个IP的速度差不多。
|
||
- 速度较差的IP丢弃。
|
||
1. 客户端3秒后,再次查询,将会获的所有最佳IP地址,但第一个IP地址仍然为最快,大部分软件也只会使用第一个IP。
|
||
|
||
值得注意的是,上述机制,是在开启了缓存的情况下,如果缓存未开启,则仍然返回最快的一个地址。
|
||
|
||
## DDNS处理
|
||
|
||
SMARTDNS默认启用了过期缓存,当使用DDNS时,有可能造成IP地址变化后,访问失败的情况下,可以通过如下方式,关闭对应DDNS域名的过期缓存。
|
||
|
||
```shell
|
||
domain-rules /ddns.com/ --no-serve-expired
|
||
```
|
||
|
||
另外一个推荐的方法是使用本地网络的地址,因为DDNS指向的设备一般在本地局域网,通过本地网络访问服务器没必要用外网IP,而是可以直接使用本地IP。
|
||
|
||
```shell
|
||
address /ddns.com/192.168.1.1
|
||
```
|
||
|
||
## 更多问题
|
||
|
||
如有更多问题,请查阅或提交issue: [https://github.com/pymumu/smartdns/issues](https://github.com/pymumu/smartdns/issues) |