Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

配置 serve-expired no 后在域名过期仍会导致3秒ttl=3 #1912

Open
PikuZheng opened this issue Feb 11, 2025 · 3 comments
Open

配置 serve-expired no 后在域名过期仍会导致3秒ttl=3 #1912

PikuZheng opened this issue Feb 11, 2025 · 3 comments

Comments

@PikuZheng
Copy link
Contributor

问题现象
配置 serve-expired yes 后 观察下游发现大量域名ttl=3。遂配置 serve-expired no 。此时观察在域名过期后仍会导致3秒ttl=3

运行环境

  1. docker

  2. 多上游

  3. 最新release自编译

  4. 涉及的配置(注意去除个人相关信息)

bind [::]:53

prefetch-domain yes
dualstack-ip-selection no
serve-expired no
response-mode fastest-response

cache-size 10000

rr-ttl-min 1
rr-ttl-max 3600
rr-ttl-reply-max 3600

重现步骤

  1. 上游DNS配置。
    server-tls 1.12.12.12 -host-name dot.pub -group mainland -blacklist-ip

  2. 访问的域名。
    私有域名

信息收集

localhost:~# kdig sponsor.ajay.app @127.0.0.1
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 38887
;; Flags: qr rd ra; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; sponsor.ajay.app.            IN      A

;; ANSWER SECTION:
sponsor.ajay.app.       6       IN      A       104.21.44.169
sponsor.ajay.app.       6       IN      A       172.67.201.151

;; Received 66 B
;; Time 2025-02-11 18:42:05 CST
;; From 127.0.0.1@53(UDP) in 0.6 ms
localhost:~# kdig sponsor.ajay.app @127.0.0.1
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 49607
;; Flags: qr rd ra; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; sponsor.ajay.app.            IN      A

;; ANSWER SECTION:
sponsor.ajay.app.       3       IN      A       104.21.44.169
sponsor.ajay.app.       3       IN      A       172.67.201.151

;; Received 66 B
;; Time 2025-02-11 18:42:11 CST
;; From 127.0.0.1@53(UDP) in 0.6 ms
localhost:~# kdig sponsor.ajay.app @127.0.0.1
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 3429
;; Flags: qr rd ra; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; sponsor.ajay.app.            IN      A

;; ANSWER SECTION:
sponsor.ajay.app.       3       IN      A       104.21.44.169
sponsor.ajay.app.       3       IN      A       172.67.201.151

;; Received 66 B
;; Time 2025-02-11 18:42:12 CST
;; From 127.0.0.1@53(UDP) in 0.6 ms
localhost:~# kdig sponsor.ajay.app @127.0.0.1
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 65380
;; Flags: qr rd ra; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; sponsor.ajay.app.            IN      A

;; ANSWER SECTION:
sponsor.ajay.app.       89      IN      A       172.67.201.151
sponsor.ajay.app.       89      IN      A       104.21.44.169

;; Received 66 B
;; Time 2025-02-11 18:42:12 CST
;; From 127.0.0.1@53(UDP) in 0.7 ms
localhost:~# kdig sponsor.ajay.app @127.0.0.1
;; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 51708
;; Flags: qr rd ra; QUERY: 1; ANSWER: 2; AUTHORITY: 0; ADDITIONAL: 0

;; QUESTION SECTION:
;; sponsor.ajay.app.            IN      A

;; ANSWER SECTION:
sponsor.ajay.app.       88      IN      A       172.67.201.151
sponsor.ajay.app.       88      IN      A       104.21.44.169

;; Received 66 B
;; Time 2025-02-11 18:42:13 CST
;; From 127.0.0.1@53(UDP) in 0.5 ms
@htfcuddles
Copy link

ttl=3有两种情况:1.过期域名 2.首次查询域名。确定不是第二种情况吗?

@PikuZheng
Copy link
Contributor Author

ttl=3有两种情况:1.过期域名 2.首次查询域名。确定不是第二种情况吗?

配置了 response-mode fastest-response 应该完全透传上游结果

@htfcuddles
Copy link

即使是fastest-response,我理解也只是快速返回第一个相应结果,后台还会对多IP进行优选,以返回多个IP。

如果缓存没有命中,则及时返回一个IP地址给客户端,并设置TTL为3,让客户端再次查询,避免客户端等待。
并行的,smartdns等待所有IP地址的查询结果,并对查询结果进行优选。原则为:
    IP列表中的第一个IP为最快地址。
    其他IP相比第一个IP的速度差不多。
    速度较差的IP丢弃。
客户端3秒后,再次查询,将会获的所有最佳IP地址,但第一个IP地址仍然为最快,大部分软件也只会使用第一个IP。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants