DNS Proxy
A simple DNS proxy server that supports all existing DNS protocols including DNS-over-TLS
, DNS-over-HTTPS
, and DNSCrypt
.
Usage
$ ./dnsproxy -h
Usage:
dnsproxy [OPTIONS]
Application Options:
-v, --verbose Verbose output (optional)
-o, --output= Path to the log file. If not set, write to stdout.
-l, --listen= Listen address (default: 0.0.0.0)
-p, --port= Listen port (default: 53)
-t, --tls-port= Listen port for DNS-over-TLS (default: 853)
-c, --tls-crt= Path to a file with the certificate chain
-k, --tls-key= Path to a file with the private key
-b, --bootstrap= Bootstrap DNS for DoH and DoT (default: 8.8.8.8:53)
-u, --upstream= An upstream to be used (can be specified multiple times)
Help Options:
-h, --help Show this help message
Examples
Runs a DNS proxy on 0.0.0.0:53
with a single upstream - Google DNS.
./dnsproxy -u 8.8.8.8:53
Runs a DNS proxy on 127.0.0.1:5353
with multiple upstreams.
./dnsproxy -l 127.0.0.1 -p 5353 -u 8.8.8.8:53 -u 1.1.1.1:53
Runs a DNS-over-TLS proxy on 127.0.0.1:853
.
./dnsproxy -l 127.0.0.1 --tls-port=853 --tls-crt=example.crt --tls-key=example.key -u 8.8.8.8:53
The same proxy with verbose logging enabled writing it to the file log.txt
.
./dnsproxy -u 8.8.8.8:53 -v -out log.txt
DNS-over-TLS upstream:
./dnsproxy -u tls://dns.adguard.com
DNS-over-HTTPS upstream:
./dnsproxy -u https://dns.adguard.com/dns-query
DNSCrypt upstream (DNS Stamp of AdGuard DNS):
./dnsproxy -u sdns://AQIAAAAAAAAAFDE3Ni4xMDMuMTMwLjEzMDo1NDQzINErR_JS3PLCu_iZEIbq95zkSV2LFsigxDIuUso_OQhzIjIuZG5zY3J5cHQuZGVmYXVsdC5uczEuYWRndWFyZC5jb20
DNS-over-HTTPS upstream (DNS Stamp of Cloudflare DNS):
./dnsproxy -u sdns://AgcAAAAAAAAABzEuMC4wLjGgENk8mGSlIfMGXMOlIlCcKvq7AVgcrZxtjon911-ep0cg63Ul-I8NlFj4GplQGb_TTLiczclX57DvMV8Q-JdjgRgSZG5zLmNsb3VkZmxhcmUuY29tCi9kbnMtcXVlcnk
TODO:
- Configure fallback resolver
- Listen on TCP as well
- Mobile builds
- Gobind interfaces