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

支持指定协议 upstream 和 listen #6

Open
huihuimoe opened this issue Apr 14, 2020 · 1 comment
Open

支持指定协议 upstream 和 listen #6

huihuimoe opened this issue Apr 14, 2020 · 1 comment

Comments

@huihuimoe
Copy link

huihuimoe commented Apr 14, 2020

现在在部分运营商可能会封锁 TCP 53 的 DNS 请求,也有部分 DNS 提供商不支持 TCP Request,比如使用

λ .\freedns-go.exe -f 1.2.4.8:53 -c 127.0.0.1:10053 -l 0.0.0.0:53
λ dig baidu.com @127.0.0.1 +tcp

的时候就会出现 fast dns timeout 的现象,详细 log

time="2020-04-14T18:10:22+08:00" level=info domain=baidu.com. op=update_cache type=A upstream="127.0.0.1:10053"
time="2020-04-14T18:10:22+08:00" level=info domain=baidu.com. op=handle status=NOERROR type=A upstream="127.0.0.1:10053"
time="2020-04-14T18:10:22+08:00" level=error msg="dial tcp 1.2.4.8:53: i/o timeout" domain=baidu.com. op=naive_resolve upstream="1.2.4.8:53"

建议可以指定 upstream 和 listen 的协议类型,譬如指定监听 udp://0.0.0.0:53 ,作为 upstream 的 server 也可以指定譬如 tcp://114.114.114.114:53 和 tcp://8.8.8.8:53

建议调整为

λ .\freedns-go.exe -f udp://1.2.4.8:53 -c tcp://8.8.8.8:53 -l udp://0.0.0.0:53
λ # 监听 udp+tcp
λ .\freedns-go.exe -f udp://1.2.4.8:53 -c tcp://8.8.8.8:53 -l udp+tcp://0.0.0.0:53
@louchenyao
Copy link
Member

louchenyao commented Apr 27, 2020

感谢建议。

通常DNS利用TCP协议查询是因为返回的结果太大,无法使用一个UDP包传输。https://serverfault.com/a/404843

所以如果freedns-go 收到了TCP请求,为了保证能满足正常的需求,也就是返回结果比较大时,也理应使用TCP请求上游。

所以上游如果不支持就真的无能为力……改一下指定的协议并不能解决这个问题。所以你想要的功能是快速fallback到clean dns来返回tcp请求?这个如果在使用中造成很大困扰我可以考虑改进fallback的机制。

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