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

关于线路优化的问题 #59

Closed
pexcn opened this issue Aug 30, 2016 · 8 comments
Closed

关于线路优化的问题 #59

pexcn opened this issue Aug 30, 2016 · 8 comments
Labels

Comments

@pexcn
Copy link
Contributor

pexcn commented Aug 30, 2016

wiki: https://github.com/aa65535/openwrt-chinadns/wiki/Use-DNS-Forwarder 说到 pdnsd 的缓存功能不能完全禁用而导致 chinadns 的线路优化功能失效,那线路优化功能是指什么呢?

@aa65535
Copy link
Owner

aa65535 commented Aug 30, 2016

线路优化可以认为是解析结果优化,这属于 ChinaDNS 的基础功能。
线路优化的效果是假定在 DNS 服务器总是返回离发起请求的位置最近(不一定是物理位置,可以认为是线路最优)结果之上。
ChinaDNS 需要设置两组上游 DNS 服务器:国内 DNS 和 「国外 DNS 或者 可信 DNS」,是否是国内 DNS是根据 chnroute 判断的。
国内 DNS 通过当前 ISP 提供的流量解析(不经过代理),如果返回的结果也是国内 IP,则采用此结果,否则采用 「国外 DNS 或者 可信 DNS」的解析结果。
国外 DNS 通过所使用的代理流量解析,而访问解析的目标站点也是提供代理流量。
另外「国外 DNS 或者 可信 DNS」的结果优先级是高于国内 DNS 的,所以一旦先返回的结果是「国外 DNS 或者 可信 DNS」的,就直接采用了,导致国内 DNS 的解析结果被忽略,导致访问国内站点速度变慢(因为是「国外 DNS 或者 可信 DNS」的解析结果),所以 ChinaDNS 上游服务器是不能在本地做缓存的。

线路优化直观上理解就是访问国内站点时,不需要走代理,所以返回的是离你家最近的结果;访问国外站点时,需要走代理,所以返回的是离你代理服务器最近的结果,当然了,这里的最近不一定是物理距离。

@pexcn
Copy link
Contributor Author

pexcn commented Aug 30, 2016

不过,我觉得就算 pdnsd 的缓存不能禁用也对线路优化的问题没有影响啊。
我是用 ss-tunnel 转发 127.0.0.1:本地pdnsd端口127.0.0.1:5300 ,然后 ChinaDNS 上游 DNS 填写 223.5.5.5,127.0.0.1:5300。这样一直使用正常,你指的情况是 ChinaDNS 上游 DNS 为:223.5.5.5,127.0.0.1:本地pdnsd端口 这样吗?@aa65535

@aa65535
Copy link
Owner

aa65535 commented Aug 30, 2016

  1. ChinaDNS 默认是国内 DNS 比 「国外 DNS 或者 可信 DNS」响应速度要快.
  2. ChinaDNS 每次都会向所有上游 DNS 同时发送解析请求.

使用 pdnsd 作为「国外 DNS 或者 可信 DNS」时,第一次请求的确是这样,这时 ChinaDNS 可以正确处理,但是当第二次请求时,因为 pdnsd 缓存的作用,pdnsd 比国内 DNS 先响应,这样的结果就是解析国内站点时也采用的是 pdnsd 的结果,可能会导致国内站点解析到国外,影响访问速度。

@hdstar2009
Copy link

@aa65535
chinadns的流程我整理下我的思路,看看是否正确理解了你上面说的。
一个域名解析请求会同时向国内dns和国外dns(chinadns设置的上游dns)发送,请求的结果如果是国外dns先返回,那么采用国外dns的结果(你上面说国外dns结果有优先);请求的结果如果是国内dns先返回,又分两种情况:1、如果国内dns返回的结果是国内的ip地址,那么采用;2、如果返回的是国外的地址,那么不采用国内dns的结果而采用国外dns的结果。

pdnsd不适合做上游是因为有缓存,有缓存会出现上游设置的国外dns(实际是pdnsd)的返回结果速度永远比国内dns返回快。

是这样吧?

@aa65535
Copy link
Owner

aa65535 commented Sep 7, 2016

@hdstar2009 是的

@hdstar2009
Copy link

@aa65535
还有疑问,如果国内dns服务器返回污染的ip结果,比如查询google.com返回国内的ip地址,会怎么处理?

@aglent
Copy link

aglent commented Dec 24, 2019

@aa65535
还有疑问,如果国内dns服务器返回污染的ip结果,比如查询google.com返回国内的ip地址,会怎么处理?

同问 请大师指点

@aglent
Copy link

aglent commented Dec 27, 2019

1. ChinaDNS 默认是国内 DNS 比 「国外 DNS 或者 可信 DNS」响应速度要快.

2. ChinaDNS 每次都会向所有上游 DNS 同时发送解析请求.

使用 pdnsd 作为「国外 DNS 或者 可信 DNS」时,第一次请求的确是这样,这时 ChinaDNS 可以正确处理,但是当第二次请求时,因为 pdnsd 缓存的作用,pdnsd 比国内 DNS 先响应,这样的结果就是解析国内站点时也采用的是 pdnsd 的结果,可能会导致国内站点解析到国外,影响访问速度。

请问openwrt里 修改pdnsd的配置文件 注释掉缓存哪一行 这样可行吗?

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

No branches or pull requests

4 participants