DNS over HTTPS
github.com
github.com
I understand the privacy and security aspects. But I am wondering - how can DNS over HTTPS be more performant in the case of curl commands? A browser could probably persist the connection to the resolver and issue several requests together, but with a single curl command surely there's the overhead of initiating the first DNS resolve, the HTTPS connection, the second DNS resolve. There must be some delay compared to regular DNS.
Side note - I just learned that performant is not a recognized word (https://english.stackexchange.com/questions/38945/what-is-wr...)
I don't personally use the word since there are many alternatives, but its use is now definitely widespread and consistently understood. There's really no argument against the fact that it has entered the English lexicon.
To my mind, the difference is that “performant” delivers results quickly, whereas “efficient” uses little energy. A performant solution might be efficient, but not necessarily, and vice versa. Does anyone else share this understanding or am I living in a linguistic bubble?
Not sure about Swedish (Daniel is Swedish), but in Finnish, we have the word “suorituskykyinen”, meaning “efficient” or “able to perform”. I can see how Finnish writers might want to use “performant” to replace this commonly used word. Perhaps there's a similar history for Swedish speakers? I sure have seen “performant” a lot in academic texts written by Finnish and Swedish speakers in the last 20 years.
webster says:
"performant"
The word you've entered isn't in the dictionary. Click on a spelling suggestion below or try again using the search bar above.
preformant performance performing performances performable preformants perforate conformant perform formant performed informant performer perforata performers performs preformat efficiency = performance / resources
Efficient has connotations of economy, of optimal use of resources but with a hint of parsimony - another way to get efficiency is to reduce the denominator.Performant emphasises the numerator much more.
nitpick aside, agreed
Efficiency is relative to the amount of resources required to achieve a similar result. To use the car example above, a car that can do 100km/h at 4L/100km is more efficient than another can than do 100km/h at 8L/100km.
The point of absolute efficiency is referred to as optimum. Essentially, top performance possible with the minimum of resources possible.
It suffers in that doesn't sound very technical.
That's right - the CPU is faster at completing the job, though the GPU executes instructions more quickly.
CW: ...and this way it'll be more performant too.
Me: Performant? As in faster?
CW: Yes.
Me (to self): Then why didn't you just say it'll be faster?
IMHO it obfuscates meaning and should be avoided; the surrounding discussion/vagueness about what it means (I don't think it means efficient, but only faster --- as in, a high-performance car) shows that too.
"Acceptable or adequate"
When schoolteacher Edna Krabappel hears the Springfield town motto "A noble spirit embiggens the smallest man," she comments she'd never heard of the word embiggens before moving to Springfield. Miss Hoover replies, "I don't know why; it's a perfectly cromulent word".
This is close to being a contradiction in terms. The purpose of words is to communicate, and if a word is being successfully used to communicate -- which clearly it is -- what exactly does it mean to say that isn't "considered a real word"?
Also, "Considered" by whom? The dictionary? Dictionaries are descriptivist -- they record usage, they don't prescribe it [0]. If it isn't in the dictionary yet, that's only because the usage hasn't been used widely and/or for long enough that it meets the inclusion criteria [1].
(As it happens, "performant" is at the stage where it is starting to pass those thresholds, and is now in the OED [2])
[0] http://englishplus.com/news/news1100.htm
[1] http://public.oed.com/about/frequently-asked-questions/#qual...
Strictly speaking, I don't believe your [2] is the OED. It's "Oxford Living Dictionaries", which I assume tries to be more current/dynamic, but might be regarded as less authoritative.
Interestingly, the word "performant" is in the OED itself, with the earliest citation being from 1809 -- but it is listed only as a noun, meaning "A person who performs a duty, ceremony, etc., a performer", not the adjectival usage under discussion here.
http://www.oed.com/view/Entry/262085?redirectedFrom=performa... (requires login)
https://dictionary.cambridge.org/dictionary/english/performa...
I just checked and the French have it too, I can see how it has slowly made its way into English, through immigration and especially the Internet.
A live language is always changing, resistance is futile. :)
If your question is how to reuse the connection pool for, say, 1000 DNS queries from one machine, curl already uses a connection pool. Next, to use fewer TCP connections and get faster response, my first proposal is HTTP/2 which supports TCP multiplexing such that multiple requests can be issued over a single TCP connection. Every response is return asynchronously, we can achieve nonblocking.
cURL also supports HTTP/2.
Speaking of word: it seems author of curl project prefers “curl” over “cURL”? Worth asking.
same goes for UDP which DNS runs over normally.
Like the original commenter, I fail to see how stacking DNS over HTTP over TLS over TCP over IP is going to be faster than running DNS over UDP over IP.
Also, you still need to resolve the address of your DNS-over-HTTP server, which you'd probably still do over traditional DNS-over-UDP.
This feels like doing nothing but adding complexity for zero gain.
Also you would probably need to put in the IP of the DNS server manually, exactly like you have to with DNS now.
From 2016: https://www.bizety.com/2016/01/26/half-of-chrome-to-google-t...
If you had to go the TLS route and wanted better perf, then it'd make more sense to build a new, dead simple, framing protocol that actually specified working pipelining and eliminated HOL blocking by allowing out-of-order responses.
They're just using HTTP because HTTP(S) defaults to port 443 and it'll go through more firewalls, and I guess their thinking here is to (just add more complexity) and move to HTTP/2
[0] https://dictionary.cambridge.org/dictionary/english/performa...
Dictionaries are descriptive, not prescriptive.
AIUI; not legal advice.
Iodine requires a client and a server. Both belong to you, what is the problem here? That I use a network to transmit packets? We are not talking about installing iodine on someone else's computer!
"My son handles the computer stuff for me, I don't even know about that logging page you're talking about."
"I thought restricted networks had a WPA-2 password? That's what they use at my workplace."
Judges just aren't that stupid.
Who can tell me with a straight face that this is criminal behaviour
Maybe I'm not understanding this correctly, but if a coffee shop has wifi and you need to enter info into a captive portal before you can use their network, by circumventing it, the "Someone else" is the coffee shop owner, and the hardware is their router.
"Please get off my router if you don't agree to my conditions". "Nah I'm just using DNS, it's fine" probably is not an admissible excuse.
If the shop don't intend the use its not authorised. Your ethical framework may not put any value on that lack of authorisation, but you see the action is unauthorised, surely?
On a public wlan I first try to use VPN with port 53 (not DNS). If it works, I'll use it that way.
We mostly built it because it sounded cool, but one use case that I though was important was being able to boot these images in different data centers to collect telemetry on DNS differences geographically (eg for hijacking or anycast).
We at DNSFilter are able to collect that same telemetry just by having resolvers at each of the anycast locations -- between the different locations, and passing along eDNS Client Subnet information, many responses will be (legitimately) different. A little hard to see a hijack in that noise.
Correct me if I'm wrong, but I'm pretty sure the host name is generally only sent in an HTTP header, which should be encrypted over HTTPS.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Ho...
The ServerHello starts out by finishing key agreement and then (in the same message) it assumes its peer now knows the session key and encrypts the rest of the message, including Certificate.
(Essentially, the problem is that prior to requesting the certificate for X.com, you need to know that you're talking to X.com; a sort of authentication chicken and egg.)
So, firstly I'm going to say, go read the drafts for yourself https://tools.ietf.org/html/draft-ietf-tls-tls13-23 because I am pretty sure that's the most snarky response and also hey, it's right there, if I'm wrong that's a great place to start in proving so.
But then I'll answer your substantive question, because the answer is pretty interesting (and quite unlike earlier versions of TLS).
So, you are correct that we can (and TLS does) do DH without knowing who we're talking to, and that our problem is that although our session is encrypted and can't be eavesdropped, this seems useless because we don't know who the heck we're talking to, surely we can be subject to a Man in the Middle attack.
However, TLS 1.3 has a trick here, after sending Certificate the server sends CertificateVerify. CertificateVerify signs the entire key agreement (which we just did) with the identity from the Certificate. So, a client receiving CertificateVerify either gets a matching signature (the party we did our DH key agreement with _was_ the owner of the Certificate - good) or they don't (we're being MitM'd the phone call is coming from inside the house - get out!)
Once the client has checked CertificateVerify (and presuming they're happy with whatever was inside Certificate) they're truly secure and Application Data can begin to be processed.
Of course DNS over HTTPS is not a sliver bullet that will ensure your privacy, instead, it's one step towards better security and thus (hopefully) privacy.
As I understand it, this would fix leaking during DNS resolution, fixing any leaks from TLS is a separate issue. And yes, when that's fixed, you'll still be leaking destination IP.
But if not one step at time, how is it going to get better? :)
needed for webservers because of multiple domains (SNI) on single IP address. Didn't read the spec, but couldn't be hostname encrypted in case of DNS resolving? (eg. hostname can be sent in http body).
What if that site does a lot more things? Even they can only upset their population so much by blocking entire domains. With regards to Russia, Google's DNS over HTTPS is a perfect example. "Domain fronting" is a thing for a reason.
We at DNSFilter are working on client to resolver agents which use DNS over TLS as well as DNSCrypt. We're also looking to create a standard for recursive resolvers like us to communicate securely with authoritative providers (no RFC yet).
Strikes me as funny. Interesting concept apart from this detail though. Are there any servers that aren’t owned by advertisers and the like?
Otherwise, why even have protocols at all? Just say the only protocol is HTTP. IP, etc. are just an HTTP implementation detail.
I didn't say I'm against DNS being encrypted, even with TLS. I just hate that instead of doing the right thing (e.g. political battle with the government, opening a port on a firewall) people choose the laziest way: just tunnel it over HTTP.
>Protocol can be layered just fine (HTTP itself is a good example)
They can, but why do it? Just figure out a way to make your server be yet-another-"REST"-service and pat yourself on the back for cleverness.
>DNS as it exists now is another random special snowflake that vendors need corresponding snowflake implementations for.
As is: SMTP, POP, IMAP, SSH, AMQP, FIX, SWIFT, LDAP, ODBC and a host of other protocols. Why do you use negative language like "random special snowflake that vendors need corresponding snowflake implementations for"? These are seperate protocols, which serve seperate specific needs. This is how IP was designed to work.
DNS has a different set of use cases than HTTP so, while it can be made to work with enough effort (anything can), HTTP can never be as good at DNS as an actual protocol designed to do DNS can.
I'd say there is an arms race between admins and users. Step by step features get forbidden and blocked usually in the name of security. For example, NAT took away your globally visible IP address.
The next step is probably blocking domains. In a dystopian vision, Google and Facebook become the proxies for all traffic as all other domains get blocked for most users.
DNS over DTLS (RFC 8094) speaks only to UDP This could be compared with DNSCrypt's implementation
DNS over TLS (RFC 7858) is TCP focused
DNS over HTTPs is focused on... you guessed it, HTTPs
So all the same thing, all trying to add security and privacy, just over different transport mechanisms.
While we're at it -- you did not mention DNS over QUIC: https://tools.ietf.org/id/draft-huitema-quic-dnsoquic-00.htm...
Some factors which start to come in to play with the various options are: Compatibility with firewalls and proxies (DNS over HTTPs wins, others over port 853 have a disadvantage, even if you put them on port 443, they may get stopped by deep packet inspection)
TLS Improvement knobs: 0-RTT, TCP Fast Open, etc. (You can find a summary of these here: https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Implement... )
And closely related, performance. It's tough to beat a lossy protocol with minimal overhead (UDP), but there have been a lot of improvements with Keep alive, eDNS0, pipelining, etc.
We're currently doing a lot of testing around this, as we are working to offer useragents and LAN proxies implementing DNS over TLS, compared with DNSCrypt.
Finally: DNSSEC. It lives in a different part of the 'security' spectrum here... The purpose of DNSSEC is to be able to authenticate the validity of an answer when traveling through untrusted parties (say you're using a third-party resolver, or do you trust your ISP's DNS to not mangle with responses). It does not encrypt request/responses. It does not provide privacy. It answers the question: "Can I trust this response I received for example.org to be the one that example.org intended me to receive?"
I didn't even know about dns-over-QUIC, but considering QUIC is still a draft itself… (I've been excited about it for quite a while though).
Regarding middleboxes, I forgot about those, and it's very sad that they keep hindering progress this way.
It seems the only advantage of DNS-over-HTTPS is that it does DNS over TLS on port 443, which is harder for militant netadmins to block.
It's definitely a solution to a niche problem, but if we really want to encrypt DNS at scale then we could do it easily enough by introducing DNScurve to the SOHO market.
But, I guess same problem for DNS-over-HTTPS currently.
Your ISP can see the IPs you connect to regardless of whether you use your ISPs DNS server or not (unless of course you tunnel ALL traffic of all clients through the vpn as well.)
"A server that is acting both as a normal web server and a DNS API server is in a position to choose which DNS names it forces a client to resolve (through its web service) and also be the one to answer those queries (through its DNS API service)."
https://tools.ietf.org/html/draft-ietf-doh-dns-over-https-02
How might this affect users who block ads via DNS?
What about users who want the system DNS settings they have configured (e.g. /etc/resolv.conf) to be honoured?
I can clear browser DNS cache with a couple of keystrokes, but I am not using Chrome, Firefox, IE/Edge, Safari, Brave, Opera, etc.
How easy is it for a user to clear the DNS cache in the popular browsers?
The best "privacy, performance and security" for the user is achieved by using /etc/hosts. HOSTS (i.e., no DNS) will beat DNS on all three, every time. "Flexibility" was not mentioned as a criteria.
There is also the issue of "transparency" to consider. It is easy for the user to check their HOSTS file to see what are the current name to address mappings. How easy is it for the user to check what mappings are in the browsers DNS cache?
Fact: Many/most of the names looked up by a user repeatedly every day do not change by the hour, by the day, the week, month or even year.
As a user, I use HOSTS heavily, with appropriate ed scripts for fast automated modification. I use HOSTS for the transparency, control and speed. Any privacy or security benefit is a bonus.
Contrast: https://en.wikipedia.org/wiki/Fast_flux (need DNS or perhaps "DOH" for this to work)
They should make sure to use a trusted DNS over HTTPS resolver.
Similar to how tor hidden services get resolved, distributed hash tables seem like the way to go. Take the ISPs and Cert Authorities out of the equation.
Because sites would randomly block reverse proxies, web proxies, enterprise users, people using certain WiFi APs, and it would give advertisers another thing to track users on.
Frankly after looking at what websites did with the User Agent, I'm scared to see what they'd do when a certificate mismatch occurs.
Tor hidden services are secure because of the lack of human meaningful names.
Thanks for Zooko's Traingle wiki. Hadn't seen that one before.
However, i've been thinking of this, for enterprise, you could build a dns server which servers over TLS connections, and then put a local dns proxy on clients which receives on 127.0.0.1 and sends out tls to the custom dns server. That way any local network connections would be encrypted to passive listeners on the network.
recursive queries would go onto the internet plaintext to 'normal' dns servers.
IMO, the purpose of DOH is to address semi hostile environments like the free Wifi at the Airport. It is kind of like a VPN for just your DNS traffic.
DNSCurve secures the link between resolvers and authoritative servers. DNSCrypt (based on DNSCurve) secures the link between clients and resolvers.
Tough to say what direction the project will take.
I for one welcome other advancements such as Google's efforts.
FWIW, my understanding is if you use Chrome it actually communicates over QUIC
I'm planning to write an Nginx module to support it soon.
It unfortunately was recently abandoned by the original developer. Some folks have mirrored it here: https://github.com/DNSCrypt
DNSSEC already gives us validation of the records, and thanks to SNI, this doesn't give us any privacy.
It is more complex, more centralized, and ends up slower than using actual DNS, and doesn't seem to provide any benefits.
Am I missing something?
If you just want a solution for having a remote server execute DNS queries for you, you can just use any of the existing VPN protocols purely for DNS resolution, or even make a better performing version.
All that overhead HTTP adds is wasted for this.
When you're in an area where your DNS provider is limited by the state, you won't consider it wasted. But if you're not and you do consider it wasted, don't use it. But saying it doesn't seem to provide any benefit is wrong and just telling people to use a VPN for DNS resolution is also wrong (at least until the ergonomics improve).
As result, SNI is here to stay.
A hypothetical encrypted SNI would be "optional" in the sense that your Firefox 57 wouldn't use it, but a site could implement it, and Firefox 73 could too and then the actual user of that actual site is protected by upgrading to FF 73.
If you were right everything would still be HTML 4 over HTTP 1.1
This is why today your browser sends the SNI info even if the site will never need it.
And that also means for eternity all TLS1.3 or lower connections will continue to use SNI.
Assumption: All sites use SNI or will use SNI.
True?
Experiment: List all domains posted to HN (pages 1-20) that require https on any given day. Try accessing each one without SNI.
Result: Most do not require SNI.
SNI has to be sent without any previous negotiation. Therefore the client does not know if a site will require SNI or not.
Assumption 1: browser vendors do not want to break sites relying on SNI
(Confirmed by WHATWG)
Assumption 2: at least one major site will continue to use SNI
Conclusion: browsers will continue to send SNI.
The client that I use assumes no SNI required. (It intentionally does not support SNI.) If it fails because the website is on a shared host and requires SNI, then it retries via a local SNI-enabled proxy bound to localhost.
"Conclusion: browsers will continue to send SNI."
Some clients/browsers will continue to send the domainname in the clear for every https url, even when it is not required.
Some users might consider that as sacraficing their privacy even when it is not necessary.
But not the client I use. It assumes no SNI is required, by default. It never sends the domainname in the clear for https when it is not necessary.
Anyone that can set your setup up can also just openvpn to a remote server, and redirect all DNS queries over that connection (which is quite easily doable, actually).
Everyone that can't do this would still use SNI, so DNS-over-HTTPS wouldn't provide any security win for them.
Edit: Looks like it’s changed and it’s now a url, so you’re right it is a bit chicken and egg
Most people would never need one, but a few people have a real use for them.
> "The DOH server is given with a host name that itself needs to be resolved. This initial resolve needs to be done by the native resolver before DOH kicks in."
That depends on your level of access/monitoring: if it's just a firewall log that shows source/destination IP, then yes - but as soon as you have any kind of packet monitoring, then the domain can be easily sniffed from the SNI header.
I think with https the results were something like 90% of page access could be guessed using meta-data (see eg https://web.archive.org/web/20090308103611/http://sysd.org/s...). That's going to drop when you don't know the site but you're going to need more counter-measures to hide your access effectively.