<%LANGUAGES%> # encrypted-dns-configs Configuration profiles for [DNS over HTTPS](https://en.wikipedia.org/wiki/DNS_over_HTTPS) and [DNS over TLS](https://en.wikipedia.org/wiki/DNS_over_TLS). Check out the article for more info: [paulmillr.com/posts/encrypted-dns/](https://paulmillr.com/posts/encrypted-dns/). Profiles are generated from simple `.json` files. Check out `providers` directory to add or edit a new profile. ### Caveats Known issues (we can't fix them, maybe Apple can): 1. Applications (e.g. Firefox in specific regions; App Store in all regions) can choose to ignore the system-level resolver and use their own. [Check out the discussion](https://github.com/paulmillr/encrypted-dns/issues/22). 2. iCloud Private Relay, VPN clients & Little Snitch / LuLu will ignore the DNS profile. 3. Command line tools that interact with DNS (e.g. `host`, `dig`, `nslookup`) won't use DoH - will use the DNS severs set in Network, or picked up from DHCP. 4. [Wi-Fi captive portals](https://en.wikipedia.org/wiki/Captive_portal) in cafes, hotels, airports are exempted by Apple from eDNS rules; to simplify authentication - this is good 5. TLS DNS is blocked more often by ISPs than HTTPS, because TLS uses non-standard port 853, which is easy to block. See [Google's article](https://security.googleblog.com/2022/07/dns-over-http3-in-android.html) Check out [encrypted-dns over TOR](https://github.com/alecmuffett/dohot) if you need more privacy. ## Providers `Censorship=yes` (also known as "filtering") means the profile will not send true information about `hostname=IP` relation for some hosts. <%PROVIDERS_TABLE%> ## Installation To make settings work across all apps in **iOS**, **iPadOS** & **macOS**, you'll need to install configuration profile. This profile would tell operating system to use DoH / DoT. Note: it's not enough to simply set server IPs in System Preferences — you need to install a profile. iOS / iPadOS: Open the mobileconfig file in GitHub by using Safari (other browsers will just download the file and won't ask for installation), and then click/tap on "Allow" button. The profile should download. Go to **System Settings => General => VPN, DNS & Device Management**, select downloaded profile and tap the "Install" button. macOS [(official docs)](https://support.apple.com/guide/mac-help/mh35561/): 1. Download and save the profile. After save, rename it to be in format: `NAME.mobileconfig`, not NAME.txt, or so 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. 4. 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. ## Scope There seems to be an [additional option](https://github.com/paulmillr/encrypted-dns/issues/22) that allows to use system-wide profiles. To try it, add this to mobileconfig file: ```xml PayloadScope System ``` ## Signed Profiles In the `signed` folder we have signed versions of the profiles in this repository. These profiles have been signed by [@Xernium](https://github.com/Xernium) so that when you install the profiles, they will have a verified check box on the installation screen. It also ensures that these profiles have not been tampered with. However, since they were signed by a third party, they may lag behind their unsigned counterparts a little. The signature is valid until `2025-11-02` Previous signatures by: [@Xernium](https://github.com/Xernium), replaced at `2024-11-01` [@Candygoblen123](https://github.com/Candygoblen123), replaced at `2023-11-29` [comment]: <> (We recommend that you install a signed profile instead of an unsigned profile because it ensures that it was not modified while it was downloading.) To verify resolver IPs and hostnames, compare mobileconfig files to their documentation URLs. Internal workings of the profiles are described on [developer.apple.com](https://developer.apple.com/documentation/devicemanagement/dnssettings). In order to verify signed mobileconfigs, you will need to download them to your computer and open them in a text editor, because signing profiles makes GitHub think that they are binary files. ## 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](https://github.com/paulmillr/encrypted-dns/blob/master/profiles/template-on-demand.mobileconfig#L22-L38) section inside the `PayloadContent` dictionary of a profile. Note: you can't edit signed profiles. ## Contributing a new profile Profiles are generated from easily editable `.json` files. Check out `providers` directory to add or edit a new profile. Copy an existing one and change its UUID, make sure you update README with new profile's info. In addition to generating online, there are many other ways to generate a random UUID: - Press `F12` to open DevTools in the browser, run this code in the console ```javascript crypto.randomUUID(); ``` - Run these commands in the macOS / Linux terminal ```sh # Works both in macOS & Linux uuidgen # Works in Linux cat /proc/sys/kernel/random/uuid ``` - Run this cmdlet in Powershell ```powershell New-Guid ``` <%PROVIDERS_LINKS%>