dohproxy/README.md

69 lines
2.2 KiB
Markdown

# DNS-over-HTTPS Proxy (`dohproxy`)
A simple DNS-over-HTTPS (DoH) proxy server written in Go. This tool acts as an intermediary between a DNS client and one or more DNS-over-HTTPS servers, forwarding DNS queries over HTTP/2 and handling responses.
## Features
- Supports both TCP and UDP for DNS queries.
- Configurable to use multiple upstream DoH servers.
- Logs all proxied requests (optional).
- HTTP/2 support for faster and more secure communication.
## Getting Started
### Prerequisites
- **Go**: Make sure you have Go installed on your machine. You can download it from [golang.org](https://golang.org/dl/).
### Installation
1. Clone this repository:
```sh
git clone https://git.olympuslab.net/afonso/dohproxy
cd dohproxy
```
2. Build the Go executable:
```sh
go build dohproxy.go
```
### Usage
Run the `dohproxy` with the following options:
```sh
./dohproxy [options]
```
#### Options
- **-l**: Listen address for the DNS server (default: `127.0.0.1`).
- **-p**: Port for the DNS server (default: `53`).
- **-tcp**: Listen on TCP.
- **-udp**: Listen on UDP.
- **-log**: Enable logging for each request proxied through an upstream.
- **-u**: Specify upstream DoH server URLs (can be specified multiple times).
#### Example
To start the proxy on `localhost` at port `5353`, listening on both TCP and UDP (uses both by default), with two upstream DoH servers and logging enabled:
```sh
./dohproxy -l 127.0.0.1 -p 5353 -tcp -udp -log -u https://dns.quad9.net/dns-query -u https://1.1.1.1/dns-query
```
### Important Note
- You need to run dohproxy as root to use lower ports (such as 53).
- At least one upstream DoH server URL is required for the proxy to function.
- If this proxy is used as your system's default DNS resolver and the upstream server URL is a domain name, at least one other DNS server must be specified as an IP address to avoid circular dependency issues.
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Acknowledgements
- Uses the [miekg/dns](https://github.com/miekg/dns) package for DNS handling.
- Supports HTTP/2 with [golang.org/x/net/http2](https://pkg.go.dev/golang.org/x/net/http2).