Subject: [DNSOP] About DNS over HTTP(s)

From: Davey Song <[email-masked]>
Date: Wed, 5 Aug 2015 09:47:00 +0800

Hi folks,

As one of my own observation, there is a trend of using port http(s) for DNS transaction to provide better DNS service regarding DNS Hijacking issue, middle-box issue, DNS privacy and IP Geolocation consideration. As a typical scenario and requirement, end users will benefit from the capability always choosing the reliable and credible recursive server no matter where they are. In addition, Ads providers can alleviate their suffering  from DNS Hijacking by malware and network devices, which is a common Internet misbehavior nowadays. I heard the constant complaining from local Ads providers like Taobao and Baidu.

There are some related work already done from the industry, for example:

1) DNSpod serves DNS over HTTP service called ‘D+’ to help their clients get avoid DNS hijacking, with lower RRT. This service is used by Tencent to identify clients’ ISP accurately. (https://www.dnspod.cn/httpdns <https://www.dnspod.cn/httpdns>  only in Chinese)

2) DNSSEC trigger uses DNS over HTTP as a back-up for DNSSEC validation failure (https://www.nlnetlabs.nl/projects/dnssec-trigger/ <https://www.nlnetlabs.nl/projects/dnssec-trigger/>)

3) Restful DNS API (DNS in Json ) allows to perform DNS queries over HTTP  in Json format.  (http://www.dns-lg.com/ <http://www.dns-lg.com/>) Also, PowerDNS supports DNS queries over HTTP in Json format by a “experimental-json-interface=yes” config.( https://doc.powerdns.com/md/httpapi/README/ <https://doc.powerdns.com/md/httpapi/README/>)
4) DNSoverHTTP using proxies as a quick deployment tool which encapsulates DNS package into HTTP connections. These proxies are implemented both in C(https://github.com/BII-Lab/DNSoverHTTP <https://github.com/BII-Lab/DNSoverHTTP>/) and golang(https://github.com/BII-Lab/DNSoverHTTPinGO <https://github.com/BII-Lab/DNSoverHTTPinGO>/)

There are maybe other variations in different . Due to there is no specific standard about DNS over HTTP(s), implementations vary without interoperability with each other. Some implementations can not fully support all DNS records. As far as I know, there is no document to address that issue.  So I’m considering if there is any worth to document the current practice of DNS over http(s) with suggestions to implementation and operation. If necessary we can also defined/assign some parameters for DNS over HTTP(s) in the scope of W3C or IANA

So an intuitive thinking is that we can unify some parameters of HTTP protocol for DNS application. Here is a list of parameters which might need to be unify as my own concern:

1.      Resource name: To distinguish DNS over HTTP with normal HTTP request, there should be a unique resource name for DNS over HTTP (there are cases Web and DNS services  are hosted in a same server ). For example, in our proxy implementation we use “proxy-dns” as resource name to differentiate from other webpage resources 

2.      Content type: To avoid DNS over HTTP request be processed by unsupported server mistakenly. DNS over HTTP may use a unique sub content type under content type application. 

3.      Return code:(I’m not very sure whether this parameter is necessary) To indicate client the errors, DNS over HTTP may have a set of return code(error code). 

4.      Post/Get: The server’s behavior to Post and Get method should be specified. A easy thinking is that the server might return the description of DNS over HTTP when client use Get method while provide DNS over HTTP service when client use Post method.

5.      Other parameter : There might be some parameters need be added in DNS over HTTP’s header, such as Host IP, UDP/TCP (http-proxy usage), Json/Octet-stream etc . 

Any suggestion please comment.

Best regards,
Davey

------------------------------
Davey Song(宋林健)
BII Lab
[email-masked]

---

From: "Darcy Kevin (FCA)" <[email-masked]>
Date: Wed, 5 Aug 2015 17:02:37 +0000

Add yet another category of websites to block in corporate web proxies: DNS query anonymizers.

                                                                                                                                                                - Kevin

From: DNSOP [mailto:[email-masked]] On Behalf Of Davey Song
Sent: Tuesday, August 04, 2015 9:47 PM
To: [email-masked]
Subject: [DNSOP] About DNS over HTTP(s)

Hi folks,

There are some related work already done from the industry, for example:
1) DNSpod serves DNS over HTTP service called ‘D+’ to help their clients get avoid DNS hijacking, with lower RRT. This service is used by Tencent to identify clients’ ISP accurately. (https://www.dnspod.cn/httpdns  only in Chinese)
2) DNSSEC trigger uses DNS over HTTP as a back-up for DNSSEC validation failure (https://www.nlnetlabs.nl/projects/dnssec-trigger/)
3) Restful DNS API (DNS in Json ) allows to perform DNS queries over HTTP  in Json format.  (http://www.dns-lg.com/) Also, PowerDNS supports DNS queries over HTTP in Json format by a “experimental-json-interface=yes” config.( https://doc.powerdns.com/md/httpapi/README/)
4) DNSoverHTTP using proxies as a quick deployment tool which encapsulates DNS package into HTTP connections. These proxies are implemented both in C(https://github.com/BII-Lab/DNSoverHTTP/) and golang(https://github.com/BII-Lab/DNSoverHTTPinGO/)
There are maybe other variations in different . Due to there is no specific standard about DNS over HTTP(s), implementations vary without interoperability with each other. Some implementations can not fully support all DNS records. As far as I know, there is no document to address that issue.  So I’m considering if there is any worth to document the current practice of DNS over http(s) with suggestions to implementation and operation. If necessary we can also defined/assign some parameters for DNS over HTTP(s) in the scope of W3C or IANA
So an intuitive thinking is that we can unify some parameters of HTTP protocol for DNS application. Here is a list of parameters which might need to be unify as my own concern:
1.      Resource name: To distinguish DNS over HTTP with normal HTTP request, there should be a unique resource name for DNS over HTTP (there are cases Web and DNS services  are hosted in a same server ). For example, in our proxy implementation we use “proxy-dns” as resource name to differentiate from other webpage resources
2.      Content type: To avoid DNS over HTTP request be processed by unsupported server mistakenly. DNS over HTTP may use a unique sub content type under content type application.
3.      Return code:(I’m not very sure whether this parameter is necessary) To indicate client the errors, DNS over HTTP may have a set of return code(error code).
4.      Post/Get: The server’s behavior to Post and Get method should be specified. A easy thinking is that the server might return the description of DNS over HTTP when client use Get method while provide DNS over HTTP service when client use Post method.
5.      Other parameter : There might be some parameters need be added in DNS over HTTP’s header, such as Host IP, UDP/TCP (http-proxy usage), Json/Octet-stream etc .

Best regards,
Davey

------------------------------
Davey Song(宋林健)
BII Lab
[email-masked]<mailto:[email-masked]>

---

From: Davey Song <[email-masked]>
Date: Thu, 6 Aug 2015 11:44:46 +0800

Thanks Kevin, you mean in the server side we should suggest DNSoverHTTP operators  to adopt a filter to block the proxy which anonymize the source IP of DNS query. It is not related to DNSoverHTTP protocol but security consideration, right? 

Davey

> 在 2015年8月6日，01:02，Darcy Kevin (FCA) <[email-masked]> 写道：
> 
> [email-masked] <mailto:[email-masked]>
>