To use DoH someone needs to host a DoH server.
A server may filter, log or limit the requests it receives!
Filtering can be useful in case you want to avoid malware/ads/adult-content.
Logging may be required in some countries and limiting may be part of a business model.
Furthermore the different endpoints may or may not be distributed around the globe, making requests slower/faster depending on the client's location.
This package comes with a pretty long list of well-known and tested endpoints, listed below. By default it will use the known endpoints that promise to not apply filters or logs.
If you are presenting this library to an end-user, you may want to pass the offer what endpoint they want to use as it has privacy and usage implications!
Note: Not all endpoints supply CORS headers which means that the list is severly reduced if you use this library in the browser.
name | host(:port=443)(/path=/dns-query) | loc | filter | log | cors | method |
---|---|---|---|---|---|---|
cloudflare | cloudflare-dns.com | ? | 𐄂 | 𐄂 | ✓ | GET |
cloudflareFamily | family.cloudflare-dns.com | ? | ✓ | 𐄂 | ✓ | GET |
cloudflareSecurity | security.cloudflare-dns.com | ? | ✓ | 𐄂 | ✓ | GET |
cloudflareEth | eth.resolver.cloudflare-eth.com | ? | ✓ | 𐄂 | ✓ | GET |
aAndA | dns.aa.net.uk | ? | ✓ | 𐄂 | 𐄂 | GET |
usablePrivacy | adfree.usableprivacy.net | ? | ✓ | 𐄂 | 𐄂 | GET |
adguard | dns.adguard.com | ? | ✓ | 𐄂 | 𐄂 | GET |
adguardFamily | dns-family.adguard.com | ? | ✓ | 𐄂 | 𐄂 | GET |
adguardUnfiltered | dns-unfiltered.adguard.com | ? | 𐄂 | 𐄂 | 𐄂 | GET |
ahadnsIn | doh.in.ahadns.net | India | ✓ | 𐄂 | ✓ | GET |
ahadnsIt | doh.it.ahadns.net | Italy | ✓ | 𐄂 | ✓ | GET |
ahadnsEs | doh.es.ahadns.net | Spain | ✓ | 𐄂 | ✓ | GET |
ahadnsNo | doh.no.ahadns.net | Norway | ✓ | 𐄂 | ✓ | GET |
ahadnsNl | doh.nl.ahadns.net | Netherlands | ✓ | 𐄂 | ✓ | GET |
ahadnsPl | doh.pl.ahadns.net | Poland | ✓ | 𐄂 | ✓ | GET |
ahadnsNy | doh.ny.ahadns.net | New York | ✓ | 𐄂 | ✓ | GET |
ahadnsChi | doh.chi.ahadns.net | Chicago | ✓ | 𐄂 | ✓ | GET |
ahadnsAu | doh.au.ahadns.net | Australia | ✓ | 𐄂 | ✓ | GET |
ahadnsLa | doh.la.ahadns.net | Los Angeles | ✓ | 𐄂 | ✓ | GET |
alidns | dns.alidns.com | China | ✓ | 𐄂 | ✓ | GET |
amsNl | dnsnl.alekberg.net | Amsterdam | 𐄂 | 𐄂 | 𐄂 | GET |
amsSe | dnsse.alekberg.net | Sweden | 𐄂 | 𐄂 | 𐄂 | GET |
amsEs | dnses.alekberg.net | Spain | 𐄂 | 𐄂 | 𐄂 | GET |
arapurayil | dns.arapurayil.com | ? | ✓ | 𐄂 | 𐄂 | GET |
digitaleGesellschaft | dns.digitale-gesellschaft.ch | Switzerland | 𐄂 | 𐄂 | ✓ | GET |
dnsForFamily | dns-doh.dnsforfamily.com | ? | ✓ | 𐄂 | 𐄂 | GET |
dnsHome | dns.dnshome.de | Germany | 𐄂 | 𐄂 | 𐄂 | GET |
blahDnsCh | doh-ch.blahdns.com | Switzerland | ✓ | 𐄂 | ✓ | GET |
blahDnsSg | doh-sg.blahdns.com | Singapore | ✓ | 𐄂 | ✓ | GET |
blahDnsJp | doh-jp.blahdns.com | Japan | ✓ | 𐄂 | ✓ | GET |
blahDnsDe | doh-de.blahdns.com | Germany | ✓ | 𐄂 | ✓ | GET |
blahDnsFi | doh-fi.blahdns.com | Finland | ✓ | 𐄂 | ✓ | GET |
cleanBrowsingSecurity | doh.cleanbrowsing.org/doh/security-filter/ | ? | ✓ | 𐄂 | ✓ | GET |
cleanBrowsingFamily | doh.cleanbrowsing.org/doh/family-filter/ | ? | ✓ | 𐄂 | ✓ | GET |
cleanBrowsingAdult | doh.cleanbrowsing.org/doh/adult-filter/ | ? | ✓ | 𐄂 | ✓ | GET |
appliedPrivacy | doh.applied-privacy.net/query | Austria | 𐄂 | 𐄂 | 𐄂 | GET |
ffmuc | doh.ffmuc.net | Germany | 𐄂 | 𐄂 | 𐄂 | GET |
tiarap | doh.tiar.app | ? | ✓ | 𐄂 | 𐄂 | GET |
tiarapJp | jp.tiar.app | Japan | ✓ | 𐄂 | 𐄂 | GET |
dns.google | ? | 𐄂 | 𐄂 | ✓ | GET | |
he | ordns.he.net | ? | 𐄂 | ✓ | 𐄂 | GET |
iij | public.dns.iij.jp | Japan | ✓ | ✓ | 𐄂 | GET |
libredns | doh.libredns.gr | Germany | 𐄂 | 𐄂 | 𐄂 | GET |
librednsAds | doh.libredns.gr/ads | Germany | ✓ | 𐄂 | 𐄂 | GET |
linuxSec | doh.linuxsec.org | Indonesia | ✓ | 𐄂 | ✓ | GET |
linuxSecAdGuard | doh.linuxsec.org/adguard | Indonesia | ✓ | 𐄂 | ✓ | GET |
njalla | dns.njal.la | Sweden | 𐄂 | 𐄂 | 𐄂 | GET |
opendns | doh.opendns.com | ? | 𐄂 | 𐄂 | 𐄂 | GET |
opendnsFamily | doh.familyshield.opendns.com | ? | ✓ | 𐄂 | 𐄂 | GET |
powerDNS | doh.powerdns.org | ? | ✓ | 𐄂 | 𐄂 | GET |
sebyVultr | doh.seby.io:8443 | Sydney | ✓ | 𐄂 | ✓ | GET |
sebyOVH | doh-2.seby.io | Sydney | ✓ | 𐄂 | ✓ | GET |
quad9 | dns10.quad9.net | ? | 𐄂 | 𐄂 | 𐄂 | GET |
quad9Ads | dns.quad9.net | ? | ✓ | 𐄂 | 𐄂 | GET |
switchCh | dns.switch.ch | Switzerland | ✓ | 𐄂 | 𐄂 | GET |
yepdns | sg.yepdns.com | Singapore | ✓ | 𐄂 | 𐄂 | GET |
lavaDnsEU1 | eu1.dns.lavate.ch | Helsinki | 𐄂 | 𐄂 | 𐄂 | GET |
controlId | freedns.controld.com/p0 | ? | 𐄂 | 𐄂 | 𐄂 | GET |
controlIdMw | freedns.controld.com/p1 | ? | ✓ | 𐄂 | 𐄂 | GET |
controlIdAds | freedns.controld.com/p2 | ? | ✓ | 𐄂 | 𐄂 | GET |
controlIdSoc | freedns.controld.com/p3 | ? | ✓ | 𐄂 | 𐄂 | GET |
rubyfish | rubyfish.cn | China | ✓ | ✓ | ✓ | GET |
uncensoredAny | anycast.censurfridns.dk | ? | 𐄂 | 𐄂 | 𐄂 | GET |
uncensoredUni | unicast.censurfridns.dk | Copenhagen | 𐄂 | 𐄂 | 𐄂 | GET |
dnssb | doh.sb | ? | 𐄂 | 𐄂 | ✓ | GET |
dnssbGlobal | doh.dns.sb | ? | 𐄂 | 𐄂 | ✓ | GET |
dbssbDeDus | de-dus.doh.sb | Düsseldorf | 𐄂 | 𐄂 | ✓ | GET |
dnssbDeFra | de-fra.doh.sb | Frankfurt | 𐄂 | 𐄂 | ✓ | GET |
dnssbNlAms | nl-ams.doh.sb | Amsterdam | 𐄂 | 𐄂 | ✓ | GET |
dnssbNlAms2 | nl-ams2.doh.sb | Amsterdam | 𐄂 | 𐄂 | ✓ | GET |
dnssbUkLon | uk-lon.doh.sb | London | 𐄂 | 𐄂 | ✓ | GET |
dnssbEeTll | ee-tll.doh.sb | Tallinn | 𐄂 | 𐄂 | ✓ | GET |
dnssbJpKix | jp-kix.doh.sb | Osaka | 𐄂 | 𐄂 | ✓ | GET |
dnssbHkHkg | hk-hkg.doh.sb | Hong Kong | 𐄂 | 𐄂 | ✓ | GET |
dnssbAuSyd | au-syd.doh.sb | Sydney | 𐄂 | 𐄂 | ✓ | GET |
dnssbUsChi | us-chi.doh.sb | Chicago | 𐄂 | 𐄂 | ✓ | GET |
dnssbInBlr | in-blr.doh.sb | Bengaluru | 𐄂 | 𐄂 | ✓ | GET |
dnssbSgSin | sg-sin.doh.sb | Singapore | 𐄂 | 𐄂 | ✓ | GET |
dnssbKrSel | kr-sel.doh.sb | Seoul | 𐄂 | 𐄂 | ✓ | GET |
dnssbRuMow | ru-mow.doh.sb | Moscow | 𐄂 | 𐄂 | ✓ | GET |
ethlink | eth.link | ? | 𐄂 | 𐄂 | ✓ | GET |
name | host(:port=443)(/path=/dns-query) | loc | filter | log | cors | method | issues |
---|---|---|---|---|---|---|---|
meganerd | chewbacca.meganerd.nl/doh | Amsterdam | 𐄂 | 𐄂 | 𐄂 | GET | Connection refused |
moulticast | dns.moulticast.net | ? | 𐄂 | 𐄂 | 𐄂 | GET | Certificate Expired |
dnsOverHttps | dns.dns-over-https.com | ? | 𐄂 | ✓ | ✓ | GET | Timeout |
lavaDnsUS1 | us1.dns.lavate.ch | California | 𐄂 | 𐄂 | 𐄂 | GET | Timeout |
plan9NJ | hydra.plan9-ns1.com | New Jersey | 𐄂 | 𐄂 | ✓ | GET | Certificate Expired |
dnsCrypt1 | dns1.dnscrypt.ca:453 | Canada | 𐄂 | 𐄂 | ✓ | GET | Occassional 503 err |
dnsCrypt2 | dns2.dnscrypt.ca:453 | Canada | 𐄂 | 𐄂 | ✓ | GET | Occassional 503 err |
irisden1 | ns1.iriseden.fr | Paris | 𐄂 | 𐄂 | ✓ | GET | Timeout |
irisden2 | ns2.iriseden.fr | Paris | 𐄂 | 𐄂 | ✓ | GET | Timeout |
dnsForge | dnsforge.de | Germany | ✓ | 𐄂 | ✓ | GET | Some TXT responses missing |
dnsPod | doh.pub | China | ✓ | 𐄂 | ✓ | GET | Some TXT responses missing |
- https://doh.bortzmeyer.fr (404)
- https://www.nic.cz/odvr/ (socket hangup)
- https://emeraldonion.org/faq/ (socket hangup) - dns.emeraldonion.org
- https://mullvad.net/en/help/dns-over-https-and-dns-over-tls/ (socket hangup)
- https://jlongua.github.io/plan9-dns/ (socket hangup) - FLORIDA! - draco.plan9-ns2.com
- https://101.101.101.101/index_en.html (timeout) - Taiwan