leiless / dnsredir

Yet another seems better forward/proxy plugin for CoreDNS
https://leiless.github.io/dnsredir/
Apache License 2.0
83 stars 11 forks source link

能否支持edns #19

Closed linusxiong closed 3 years ago

linusxiong commented 3 years ago

这个插件是否支持edns?

leiless commented 3 years ago

可以支持的,最早的时候我的确考虑支持EDNS,当时参考的https://github.com/m13253/dns-over-https/blob/master/doh-client/client.go#L457的代码。

不过有个问题是如何获取公网IP作为EDNS subnet是个最大的问题,举例来说,当你的主网卡绑定了一个公网IP,一切都很简单,只需要Mask一下即可。

但是如果你有多个网卡,或者你的网卡全是内网IP,你无法从DNS request里面获取到Public IP并masking,这时候就需要你用 curl -L https://icanhzip.com 的方式来获取公网IP。

这个就有另外一个问题,假设使用fallback的方式去获取公网IP,那么要选用哪一个URL作为参考呢?(虽然可以设计为可配置的) 如果我的网络有分流的情况下,那就似乎更麻烦了。

我当时测试发现,m13253/dns-over-https doh client在没有公网IP的家宽下发送出去的DNS request EDNS subnet是一个局域网IP,这几乎等于没用。

当时的想法是,在有分流的情况下,好像不实现也影响不大。

不过如果你有什么特别的场景的话,可以告知我再评估下。(虽然最近很忙)

leiless commented 3 years ago

上面我的考虑可能想复杂了一点,不过主要目的是为了Rewrite DNS message EDNS subnet是局域网IP的问题。

linusxiong commented 3 years ago

上面我的考虑可能想复杂了一点,不过主要目的是为了Rewrite DNS message EDNS subnet是局域网IP的问题。

可以参考overture的代码,经过测试overture是完美支持的,而且也部分调用coredns的代码