You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
encrypted-dns-server/README.md

117 lines
4.9 KiB
Markdown

5 years ago
# ![Encrypted DNS Server](logo.png)
5 years ago
5 years ago
An easy to install, high-performance, zero maintenance proxy to run an encrypted DNS server.
5 years ago
![Dashboard](dashboard.png)
## Protocols
5 years ago
The proxy supports the following protocols:
5 years ago
5 years ago
- [DNSCrypt v2](https://github.com/DNSCrypt/dnscrypt-protocol/blob/master/DNSCRYPT-V2-PROTOCOL.txt)
- [Anonymized DNSCrypt](https://github.com/DNSCrypt/dnscrypt-protocol/blob/master/ANONYMIZED-DNSCRYPT.txt)
5 years ago
- DNS-over-HTTP (DoH) forwarding
5 years ago
All of these can be served simultaneously, on the same port (usually port 443). The proxy automatically detects what protocol is being used by each client.
## Installation
### Option 1: precompiled binary for Linux
5 years ago
Download the Encrypted DNS Server
[precompiled application for Linux (x86_64)](https://github.com/jedisct1/encrypted-dns-server/suites/272969134/artifacts/148910).
And make the application executable:
```sh
cd encrypted-dns-linux-x86_64
chmod +x encrypted-dns
```
Nothing else has to be installed. It doesn't require any external dependencies.
5 years ago
A [Debian package](https://github.com/jedisct1/encrypted-dns-server/suites/272969134/artifacts/148911)
for Linux/x86_64 is also available.
5 years ago
In this package, the example configuration file can be found in `/usr/share/doc/encrypted-dns/`.
### Option 2: compilation from source code
The proxy uses recent features of the Rust compiler, and currently requires rust-nightly.
Rust can installed with:
```sh
curl -sSf https://sh.rustup.rs | bash -s -- -y --default-toolchain nightly
source $HOME/.cargo/env
```
5 years ago
Once rust is installed, the proxy can be compiled and installed as follows:
```sh
5 years ago
cargo install encrypted-dns
strip ~/.cargo/bin/encrypted-dns
```
The executable file will be copied to `~/.cargo/bin/encrypted-dns` by default.
### Options 3: Docker
[dnscrypt-server-docker](https://github.com/dnscrypt/dnscrypt-server-docker) is the most popular way to deploy an encrypted DNS server.
This Docker image that includes a caching DNS resolver, the encrypted DNS proxy, and scripts to automatically configure everything.
## Setup
The proxy requires a recursive DNS resolver, such as Knot, PowerDNS or Unbound.
That resolver can run locally and only respond to `127.0.0.1`. External resolvers such as Quad9 or Cloudflare DNS can also be used, but this may be less reliable due to rate limits.
In order to support DoH in addition to DNSCrypt, a DoH proxy must be running as well. [rust-doh](https://github.com/jedisct1/rust-doh) is the recommended DoH proxy server. DoH support is optional, as it is currently way more complicated to setup than DNSCrypt due to certificate management.
Make a copy of the `example-encrypted-dns.toml` configuration file named `encrypted-dns.toml`.
5 years ago
Then, review the [`encrypted-dns.toml`](https://raw.githubusercontent.com/jedisct1/encrypted-dns-server/master/example-encrypted-dns.toml) file. This is where all the parameters can be configured, including the IP addresses to listen to.
You should probably at least change the `listen_addresses` and `provider_name` settings.
Start the proxy. It will automatically create a new provider key pair if there isn't any.
5 years ago
The DNS stamps are printed. They can be used directly with [`dnscrypt-proxy`](https://github.com/dnscrypt/dnscrypt-proxy/).
There is nothing else to do. Certificates are automatically generated and rotated.
## Migrating from dnscrypt-wrapper
5 years ago
If you are currently running an encrypted DNS server using [`dnscrypt-wrapper`](https://github.com/cofyc/dnscrypt-wrapper), moving to the new proxy is simple:
- Double check that the provider name in `encrypted-dns.toml` matches the one you previously configured. If you forgot it, it can be recovered [from its DNS stamp](https://dnscrypt.info/stamps/).
5 years ago
- Run `enscrypted-dns --import-from-dnscrypt-wrapper secret.key`, with `secret.key` being the file with the `dnscrypt-wrapper` provider secret key.
Done. Your server is now running the new proxy.
5 years ago
## Built-in DNS cache
The proxy includes a key cache, as well as a DNS cache to significantly reduce the load on upstream servers.
5 years ago
In addition, if a server is slow or unresponsive, expired cached queries will be returned, ensuring that popular domain names always keep being served.
5 years ago
## State file
The proxy creates and updates a file named `encrypted-dns.state` by default. That file contains the provider secret key, as well as certificates and encryption keys.
5 years ago
Do not delete the file, unless you want to change parameters (such as the provider name), and keep it secret, or the keys will be lost.
5 years ago
5 years ago
Putting it in a directory that is only readable by the super-user is not a bad idea.
## Filtering
Domains can be filtered directly by the proxy, see the `[filtering]` section of the configuration file.
## Prometheus metrics
Prometheus metrics can optionally be enabled in order to monitor performance, cache efficiency, and more.
## Anonymized DNSCrypt
Enabling Anonymized DNSCrypt allows the server to be used as an encrypted DNS relay.