DNS sinkhole written in go
10K+
A lightweight DNS sinkhole for blocking unwanted domains at the network level. Block ads, trackers, and malicious domains before they reach your devices.

Quick Start:
docker run -d \
--name goaway \
-p 53:53/udp \
-p 53:53/tcp \
-p 8080:8080 \
pommee/goaway:latest
Using Docker Compose (Recommended for production):
# Download the compose file
curl -O https://raw.githubusercontent.com/pommee/goaway/main/docker-compose.yml
# Start the service
docker compose up -d
Quick Install Script:
# Install latest version
curl https://raw.githubusercontent.com/pommee/goaway/main/installer.sh | sh
# Install specific version
curl https://raw.githubusercontent.com/pommee/goaway/main/installer.sh | sh /dev/stdin 0.40.4
The installer will:
~/.local/binManual Installation: Download binaries directly from the releases page.
# Clone the repository
git clone https://github.com/pommee/goaway.git
cd goaway
# Build the frontend
make build
# Build GoAway binary
go build -o goaway
# Start the service
./goaway
Start GoAway with default settings:
goaway
You'll see a startup message confirming the services are running:

Important
**First-time Setup:** GoAway runs in authenticated mode by default and generates a random password on first startup. This password is shown only once - make sure to save it!
http://your-server-ip:portadminTo use GoAway as your DNS server, update your device or router settings:
Router Configuration (Recommended):
Individual Device:
<goaway-server-ip>1.1.1.1 or 8.8.8.8 - Used as a fallbackgoaway --help
GoAway is a DNS sinkhole with a web interface
Usage:
goaway [flags]
Flags:
-h, --help help for goaway
--ansi Toggle colorized logs. Only available in non-json formatted logs (default true)
--auth Toggle authentication for admin dashboard (default true)
--dns-port int Port for the DNS server (default 53)
--json Toggle JSON formatted logs
--log-level int 0 = DEBUG | 1 = INFO | 2 = WARNING | 3 = ERROR (default 1)
--logging Toggle logging (default true)
--statistics-retention int Days to keep statistics (default 7)
--webserver-port int Port for the web server (default 8080)
Settings are stored in settings.yaml. You can customize blocking rules, upstream DNS servers, and other options through the web dashboard or by editing this file directly.
Run on custom ports:
goaway --dns-port 6121 --webserver-port 3000
Disable authentication (not recommended for production):
goaway --auth=false
Enable debug logging:
goaway --log-level 0
The dashboard and server can be started separately for development with hot reloading:
# Start the web interface (with hot reload)
make dev-website
# Start the server (in another shell)
make dev-server
Contributions are welcomed! Here's how you can help:
| Platform | Architecture | Support Level |
|---|---|---|
| Linux | amd64 | Full |
| Linux | arm64 | Full |
| Linux | 386 | Full |
| macOS | amd64 | Beta |
| macOS | arm64 | Beta |
| Windows | amd64 | Beta |
| Windows | 386 | Beta |
Note: Primary testing is conducted on Linux (amd64). While the aim is to support all listed platforms, functionality on macOS and Windows may vary.
Permission Denied (Port 53)
Can't Access Dashboard
http://localhost:8080 on the same machineDNS Not Working
nslookup google.com <goaway-ip> or dig @<goaway-ip> google.com.GoAway is designed to be lightweight and efficient:
This project is licensed under the MIT License - see the LICENSE file for details.
This project is heavily inspired by Pi-hole. Thanks to all people involved for their work.
Content type
Image
Digest
sha256:971efe3ac…
Size
19.2 MB
Last updated
about 2 months ago
docker pull pommee/goaway