paulmillr/encrypted-dns

DNS over HTTPS config profiles for iOS & macOS

JavaScript

4,854

168 commits

updated Jul 25, 2026

See the code

README

English | 简体中文 | 繁體中文

encrypted-dns-configs

Configuration profiles for DNS over HTTPS and DNS over TLS. Check out the article for more info: paulmillr.com/posts/encrypted-dns/. To add a new provider, or edit an existing one: see #contributing.

Usage

Install / download profile (.mobileconfig file) from a table below. After that:

iPhones, iPads:

  1. Open the file by using Safari (other browsers will just download the file and won't ask for installation)
  2. Tap on "Allow" button. The profile should download.
  3. Go to System Settings => General => VPN, DNS & Device Management, select downloaded profile and tap the "Install" button.

Mac:

  1. Ensure the downloaded file has proper extension: NAME.mobileconfig, not NAME.mobileconfig.txt.
  2. Choose Apple menu > System Settings, click Privacy and Security in the sidebar, then click Profiles on the right. You may need to scroll down. You may be asked to supply your password or other information during installation.
  3. In the Downloaded section, double-click the profile. Review the profile contents then click Continue, Install or Enroll to install the profile. If an earlier version of a profile is already installed on your Mac, the settings in the updated version replace the previous ones.

Providers

Censorship (also known as "filtering") means the profile will not send true information about hostname=IP relation for some hosts.

NameRegionCensorshipNotesInstallInstall (unsigned)
360 Security DNS🇨🇳YesOperated by 360 Digital Security GroupHTTPSHTTPS
AdGuard DNS Default🇷🇺YesOperated by AdGuard Software Ltd. Blocks ads, tracking & phishingHTTPS, TLSHTTPS, TLS
AdGuard DNS Family Protection🇷🇺YesOperated by AdGuard Software Ltd. Blocks Default + malware & adult contentHTTPS, TLSHTTPS, TLS
AdGuard DNS Non-filtering🇷🇺NoOperated by AdGuard Software Ltd. Non-filteringHTTPS, TLSHTTPS, TLS
Alekberg Encrypted DNS🇳🇱NoIndependentHTTPSHTTPS
Aliyun Public DNS🇨🇳NoOperated by Alibaba Cloud Ltd.HTTPS, TLSHTTPS, TLS
BlahDNS CDN Filtered🇺🇸YesIndependent. Blocks ads, tracking & malwareHTTPSHTTPS
BlahDNS CDN Unfiltered🇺🇸NoIndependent. Non-filteringHTTPSHTTPS
BlahDNS Germany🇩🇪YesIndependent. Blocks ads, tracking & malwareHTTPSHTTPS
BlahDNS Singapore🇸🇬YesIndependent. Blocks ads, tracking & malwareHTTPSHTTPS
Canadian Shield Private🇨🇦NoOperated by the Canadian Internet Registration Authority (CIRA)HTTPS, TLSHTTPS, TLS
Canadian Shield Protected🇨🇦YesOperated by the Canadian Internet Registration Authority (CIRA). Blocks malware & phishingHTTPS, TLSHTTPS, TLS
Canadian Shield Family🇨🇦YesOperated by the Canadian Internet Registration Authority (CIRA). Blocks malware, phishing & adult contentHTTPS, TLSHTTPS, TLS
Cleanbrowsing Family Filter🇺🇸YesFilters malware & adult, mixed contentHTTPS, TLSHTTPS, TLS
Cleanbrowsing Adult Filter🇺🇸YesFilters malware & adult contentHTTPS, TLSHTTPS, TLS
Cleanbrowsing Security Filter🇺🇸YesFilters malwareHTTPS, TLSHTTPS, TLS
Cloudflare 1.1.1.1🇺🇸NoOperated by Cloudflare Inc.HTTPS, TLSHTTPS, TLS
Cloudflare 1.1.1.1 Security🇺🇸YesOperated by Cloudflare Inc. Blocks malware & phishingHTTPSHTTPS
Cloudflare 1.1.1.1 Family🇺🇸YesOperated by Cloudflare Inc. Blocks malware, phishing & adult contentHTTPSHTTPS
DNS4EU🇨🇿NoOperated by a consortium lead by Whalebone.HTTPS, TLSHTTPS, TLS
DNS4EU Protective🇨🇿YesOperated by a consortium lead by Whalebone. Blocks Malware.HTTPS, TLSHTTPS, TLS
DNS4EU Protective ad-blocking🇨🇿YesOperated by a consortium lead by Whalebone. Blocks Malware and AdsHTTPS, TLSHTTPS, TLS
DNS4EU Protective with child protection🇨🇿YesOperated by a consortium lead by Whalebone. Blocks malware and explicit content.HTTPS, TLSHTTPS, TLS
DNS4EU Protective with child protection & ad-blocking🇨🇿YesOperated by a consortium lead by Whalebone. Blocks Malware, Ads and explicit contentHTTPS, TLSHTTPS, TLS
DNSPod Public DNS🇨🇳NoOperated by DNSPod Inc., a Tencent Cloud CompanyHTTPS, TLSHTTPS, TLS
FDN🇫🇷NoOperated by French Data NetworkHTTPS, TLSHTTPS, TLS
FFMUC-DNS🇩🇪NoFFMUC free DNS servers provided by Freifunk München.HTTPS, TLSHTTPS, TLS
Google Public DNS🇺🇸NoOperated by Google LLCHTTPS, TLSHTTPS, TLS
keweonDNS🇩🇪NoOperated by Aviontex. Blocks ads & trackingHTTPS, TLSHTTPS, TLS
Mullvad DNS🇸🇪YesOperated by Mullvad VPN ABHTTPSHTTPS
Mullvad DNS Adblock🇸🇪YesOperated by Mullvad VPN AB. Blocks ads & trackingHTTPSHTTPS
OpenDNS Standard🇺🇸NoOperated by Cisco OpenDNS LLCHTTPSHTTPS
OpenDNS FamilyShield🇺🇸YesOperated by Cisco OpenDNS LLC. Blocks malware & adult contentHTTPSHTTPS
Quad9🇨🇭YesOperated by Quad9 Foundation. Blocks malwareHTTPS, TLSHTTPS, TLS
Quad9 w/ ECS🇨🇭YesOperated by Quad9 Foundation. Supports ECS. Blocks malwareHTTPS, TLSHTTPS, TLS
Quad9 Unfiltered🇨🇭NoOperated by Quad9 Foundation.HTTPS, TLSHTTPS, TLS
Tiarap🇸🇬 🇺🇸YesOperated by Tiarap Inc. Blocks ads, tracking, phising & malwareHTTPS, TLSHTTPS, TLS
ADNull DNS🇺🇦YesPublic DNS operated by ADNull. Blocks ads & tracking. Paid plans offer personalized DNS with advanced ad and phishing blocking.HTTPSHTTPS

Known issues

  1. Some apps and protocols will ignore encrypted-dns:
    • Firefox in specific regions, App Store in all regions. More info
    • iCloud Private Relay, VPN clients
    • Little Snitch, LuLu
    • DNS-related CLI tools: host, dig, nslookup etc.
  2. Wi-Fi captive portals in cafes, hotels, airports are exempted by Apple from eDNS rules; to simplify authentication - this is ok
  3. TLS DNS is easier for providers to block, because it uses non-standard port 853. More info
  4. e-dns over TOR could be better privacy-wise, but we don't have this for now.

Contributing

  • To add / edit a profile: edit json files in src directory.
  • To verify resolver IPs / hostnames: compare mobileconfig files to their original websites (open files in a text editor).
  • Check out developer.apple.com for more docs.
  • On demand activation: You can optionally exclude some trusted Wi-Fi networks where you don't want to use encrypted DNS. To do so, add your SSIDs in the OnDemandRules section inside the PayloadContent dictionary of a profile.

Scripts

  • npm run build - re-build profiles, signed profiles, READMEs

  • npm run sign - re-sign all profiles (updates signature field) using an ECC SSL certificate.

    • Signing is done using key-producer
    • Let's Encrypt free certificates are OK, but expire in 45 days.
    • Expects following files to be present in certs subdirectory:
    `privkey.pem`  : the private key for your certificate.
    `fullchain.pem`: the certificate file used in most server software.
    `chain.pem`    : used for OCSP stapling in Nginx >=1.3.7.
    `cert.pem`
    
  • npm run new - interactively creates new profile from CLI options. Can also be ran with flags.

    • scripts/new.test.ts includes CLI snapshot tests and a PTY interactive flow test.
    • PTY test runs by default; set NEW_TEST_PTY=0 to opt out.
  • src/scripts/sign-single.ts --ca cert.pem --priv_key key.pem [--chain chain.pem] path.mobileconfig - sings single mobileconfig

  • src/scripts/sign-single-openssl.ts --ca cert.pem --priv_key key.pem [--chain chain.pem] path.mobileconfig Sign one .mobileconfig using OpenSSL.

    • Uses -nosmimecap to match local CMS signing policy.
  • src/scripts/detach.ts signed.mobileconfig - detach CMS signature from signed profile and print PEM to stdout.

  • npm run test - Parity check for sign-single.ts vs sign-single-openssl.sh.

    • Generates temporary test root/signer certificates and keys via OpenSSL.
    • Signs the same profile with scripts/sign.ts and scripts/sign_openssl.sh.
    • Verifies detached content and embedded certificate set parity.
cloudflare
configuration-profile
dns
encrypted-dns
google
https
ios
macos
mobileconfig
opendns
over
quad9
rfc7858
rfc8484
tls

paulmillr/encrypted-dns

DNS over HTTPS config profiles for iOS & macOS

JavaScript

4,854

168 commits

updated Jul 25, 2026

See the code

README

English | 简体中文 | 繁體中文

encrypted-dns-configs

Configuration profiles for DNS over HTTPS and DNS over TLS. Check out the article for more info: paulmillr.com/posts/encrypted-dns/. To add a new provider, or edit an existing one: see #contributing.

Usage

Install / download profile (.mobileconfig file) from a table below. After that:

iPhones, iPads:

  1. Open the file by using Safari (other browsers will just download the file and won't ask for installation)
  2. Tap on "Allow" button. The profile should download.
  3. Go to System Settings => General => VPN, DNS & Device Management, select downloaded profile and tap the "Install" button.

Mac:

  1. Ensure the downloaded file has proper extension: NAME.mobileconfig, not NAME.mobileconfig.txt.
  2. Choose Apple menu > System Settings, click Privacy and Security in the sidebar, then click Profiles on the right. You may need to scroll down. You may be asked to supply your password or other information during installation.
  3. In the Downloaded section, double-click the profile. Review the profile contents then click Continue, Install or Enroll to install the profile. If an earlier version of a profile is already installed on your Mac, the settings in the updated version replace the previous ones.

Providers

Censorship (also known as "filtering") means the profile will not send true information about hostname=IP relation for some hosts.

NameRegionCensorshipNotesInstallInstall (unsigned)
360 Security DNS🇨🇳YesOperated by 360 Digital Security GroupHTTPSHTTPS
AdGuard DNS Default🇷🇺YesOperated by AdGuard Software Ltd. Blocks ads, tracking & phishingHTTPS, TLSHTTPS, TLS
AdGuard DNS Family Protection🇷🇺YesOperated by AdGuard Software Ltd. Blocks Default + malware & adult contentHTTPS, TLSHTTPS, TLS
AdGuard DNS Non-filtering🇷🇺NoOperated by AdGuard Software Ltd. Non-filteringHTTPS, TLSHTTPS, TLS
Alekberg Encrypted DNS🇳🇱NoIndependentHTTPSHTTPS
Aliyun Public DNS🇨🇳NoOperated by Alibaba Cloud Ltd.HTTPS, TLSHTTPS, TLS
BlahDNS CDN Filtered🇺🇸YesIndependent. Blocks ads, tracking & malwareHTTPSHTTPS
BlahDNS CDN Unfiltered🇺🇸NoIndependent. Non-filteringHTTPSHTTPS
BlahDNS Germany🇩🇪YesIndependent. Blocks ads, tracking & malwareHTTPSHTTPS
BlahDNS Singapore🇸🇬YesIndependent. Blocks ads, tracking & malwareHTTPSHTTPS
Canadian Shield Private🇨🇦NoOperated by the Canadian Internet Registration Authority (CIRA)HTTPS, TLSHTTPS, TLS
Canadian Shield Protected🇨🇦YesOperated by the Canadian Internet Registration Authority (CIRA). Blocks malware & phishingHTTPS, TLSHTTPS, TLS
Canadian Shield Family🇨🇦YesOperated by the Canadian Internet Registration Authority (CIRA). Blocks malware, phishing & adult contentHTTPS, TLSHTTPS, TLS
Cleanbrowsing Family Filter🇺🇸YesFilters malware & adult, mixed contentHTTPS, TLSHTTPS, TLS
Cleanbrowsing Adult Filter🇺🇸YesFilters malware & adult contentHTTPS, TLSHTTPS, TLS
Cleanbrowsing Security Filter🇺🇸YesFilters malwareHTTPS, TLSHTTPS, TLS
Cloudflare 1.1.1.1🇺🇸NoOperated by Cloudflare Inc.HTTPS, TLSHTTPS, TLS
Cloudflare 1.1.1.1 Security🇺🇸YesOperated by Cloudflare Inc. Blocks malware & phishingHTTPSHTTPS
Cloudflare 1.1.1.1 Family🇺🇸YesOperated by Cloudflare Inc. Blocks malware, phishing & adult contentHTTPSHTTPS
DNS4EU🇨🇿NoOperated by a consortium lead by Whalebone.HTTPS, TLSHTTPS, TLS
DNS4EU Protective🇨🇿YesOperated by a consortium lead by Whalebone. Blocks Malware.HTTPS, TLSHTTPS, TLS
DNS4EU Protective ad-blocking🇨🇿YesOperated by a consortium lead by Whalebone. Blocks Malware and AdsHTTPS, TLSHTTPS, TLS
DNS4EU Protective with child protection🇨🇿YesOperated by a consortium lead by Whalebone. Blocks malware and explicit content.HTTPS, TLSHTTPS, TLS
DNS4EU Protective with child protection & ad-blocking🇨🇿YesOperated by a consortium lead by Whalebone. Blocks Malware, Ads and explicit contentHTTPS, TLSHTTPS, TLS
DNSPod Public DNS🇨🇳NoOperated by DNSPod Inc., a Tencent Cloud CompanyHTTPS, TLSHTTPS, TLS
FDN🇫🇷NoOperated by French Data NetworkHTTPS, TLSHTTPS, TLS
FFMUC-DNS🇩🇪NoFFMUC free DNS servers provided by Freifunk München.HTTPS, TLSHTTPS, TLS
Google Public DNS🇺🇸NoOperated by Google LLCHTTPS, TLSHTTPS, TLS
keweonDNS🇩🇪NoOperated by Aviontex. Blocks ads & trackingHTTPS, TLSHTTPS, TLS
Mullvad DNS🇸🇪YesOperated by Mullvad VPN ABHTTPSHTTPS
Mullvad DNS Adblock🇸🇪YesOperated by Mullvad VPN AB. Blocks ads & trackingHTTPSHTTPS
OpenDNS Standard🇺🇸NoOperated by Cisco OpenDNS LLCHTTPSHTTPS
OpenDNS FamilyShield🇺🇸YesOperated by Cisco OpenDNS LLC. Blocks malware & adult contentHTTPSHTTPS
Quad9🇨🇭YesOperated by Quad9 Foundation. Blocks malwareHTTPS, TLSHTTPS, TLS
Quad9 w/ ECS🇨🇭YesOperated by Quad9 Foundation. Supports ECS. Blocks malwareHTTPS, TLSHTTPS, TLS
Quad9 Unfiltered🇨🇭NoOperated by Quad9 Foundation.HTTPS, TLSHTTPS, TLS
Tiarap🇸🇬 🇺🇸YesOperated by Tiarap Inc. Blocks ads, tracking, phising & malwareHTTPS, TLSHTTPS, TLS
ADNull DNS🇺🇦YesPublic DNS operated by ADNull. Blocks ads & tracking. Paid plans offer personalized DNS with advanced ad and phishing blocking.HTTPSHTTPS

Known issues

  1. Some apps and protocols will ignore encrypted-dns:
    • Firefox in specific regions, App Store in all regions. More info
    • iCloud Private Relay, VPN clients
    • Little Snitch, LuLu
    • DNS-related CLI tools: host, dig, nslookup etc.
  2. Wi-Fi captive portals in cafes, hotels, airports are exempted by Apple from eDNS rules; to simplify authentication - this is ok
  3. TLS DNS is easier for providers to block, because it uses non-standard port 853. More info
  4. e-dns over TOR could be better privacy-wise, but we don't have this for now.

Contributing

  • To add / edit a profile: edit json files in src directory.
  • To verify resolver IPs / hostnames: compare mobileconfig files to their original websites (open files in a text editor).
  • Check out developer.apple.com for more docs.
  • On demand activation: You can optionally exclude some trusted Wi-Fi networks where you don't want to use encrypted DNS. To do so, add your SSIDs in the OnDemandRules section inside the PayloadContent dictionary of a profile.

Scripts

  • npm run build - re-build profiles, signed profiles, READMEs

  • npm run sign - re-sign all profiles (updates signature field) using an ECC SSL certificate.

    • Signing is done using key-producer
    • Let's Encrypt free certificates are OK, but expire in 45 days.
    • Expects following files to be present in certs subdirectory:
    `privkey.pem`  : the private key for your certificate.
    `fullchain.pem`: the certificate file used in most server software.
    `chain.pem`    : used for OCSP stapling in Nginx >=1.3.7.
    `cert.pem`
    
  • npm run new - interactively creates new profile from CLI options. Can also be ran with flags.

    • scripts/new.test.ts includes CLI snapshot tests and a PTY interactive flow test.
    • PTY test runs by default; set NEW_TEST_PTY=0 to opt out.
  • src/scripts/sign-single.ts --ca cert.pem --priv_key key.pem [--chain chain.pem] path.mobileconfig - sings single mobileconfig

  • src/scripts/sign-single-openssl.ts --ca cert.pem --priv_key key.pem [--chain chain.pem] path.mobileconfig Sign one .mobileconfig using OpenSSL.

    • Uses -nosmimecap to match local CMS signing policy.
  • src/scripts/detach.ts signed.mobileconfig - detach CMS signature from signed profile and print PEM to stdout.

  • npm run test - Parity check for sign-single.ts vs sign-single-openssl.sh.

    • Generates temporary test root/signer certificates and keys via OpenSSL.
    • Signs the same profile with scripts/sign.ts and scripts/sign_openssl.sh.
    • Verifies detached content and embedded certificate set parity.
cloudflare
configuration-profile
dns
encrypted-dns
google
https
ios
macos
mobileconfig
opendns
over
quad9
rfc7858
rfc8484
tls

Significant stargazers

(top 24 of 51)

Peter Dave Hello

1,871 followers · starred Dec 2021

William Entriken

1,130 followers · starred Apr 2023

Marc Klingen

495 followers · starred May 2024

YeonGyu-Kim

3,854 followers · starred Mar 2024