321 lines
7.3 KiB
Markdown
321 lines
7.3 KiB
Markdown
---
|
|
title: GoAway
|
|
created: 2026-06-07
|
|
updated: 2026-06-07
|
|
type: app
|
|
tags: [catalogue, dns, proxy, security, golang, ad-block, auto-hebergement]
|
|
confidence: high
|
|
contested: false
|
|
sources: [https://selfh.st/apps/?tag=DNS, https://github.com/leprosus/golang-dns-proxy]
|
|
---
|
|
|
|
# GoAway
|
|
|
|
GoAway est un proxy DNS simple et flexible écrit en Go, doté de capacités de blocage de publicités et de contenu indésirable.
|
|
|
|
## Informations Générales
|
|
|
|
| Attribut | Valeur |
|
|
|----------|--------|
|
|
| **Nom** | GoAway |
|
|
| **Slug** | goaway |
|
|
| **Description** | Proxy DNS simple et flexible avec capacités de blocage de publicités |
|
|
| **Stars** | 711 |
|
|
| **Repository** | https://github.com/leprosus/golang-dns-proxy |
|
|
| **Licence** | MIT |
|
|
| **Tags** | DNS, Security |
|
|
|
|
## Présentation
|
|
|
|
GoAway est un proxy DNS minimaliste développé en Go qui permet de filtrer les requêtes DNS en bloquant les domaines associés aux publicités, trackers et autres contenus indésirables. Sa simplicité d'installation et de configuration en fait une solution légère pour sécuriser votre réseau domestique ou professionnel.
|
|
|
|
### Fonctionnalités principales
|
|
|
|
- **Proxy DNS performant** : Résolution DNS rapide avec cache intégré
|
|
- **Blocage de publicités** : Filtrage basé sur des listes de blocage personnalisables
|
|
- **Léger et rapide** : Développé en Go pour une empreinte mémoire minimale
|
|
- **Configuration simple** : Fichier de configuration YAML intuitif
|
|
- **Logs détaillés** : Monitoring des requêtes et blocages
|
|
- **Support des listes noires/blanches** : Flexibilité dans la gestion des domaines
|
|
|
|
## Installation
|
|
|
|
### Méthode 1 : Installation binaire
|
|
|
|
#### Prérequis
|
|
|
|
- Go 1.16 ou supérieur (pour la compilation)
|
|
- Accès root ou sudo (pour le port 53)
|
|
|
|
#### Compilation depuis les sources
|
|
|
|
```bash
|
|
# Cloner le repository
|
|
git clone https://github.com/leprosus/golang-dns-proxy.git
|
|
cd golang-dns-proxy
|
|
|
|
# Compiler l'application
|
|
go build -o goaway main.go
|
|
|
|
# Rendre exécutable
|
|
chmod +x goaway
|
|
```
|
|
|
|
#### Configuration
|
|
|
|
Créer un fichier `config.yaml` :
|
|
|
|
```yaml
|
|
server:
|
|
host: "0.0.0.0"
|
|
port: 53
|
|
|
|
upstream:
|
|
- "8.8.8.8:53"
|
|
- "8.8.4.4:53"
|
|
|
|
blacklist:
|
|
- "https://someonewhocares.org/hosts/zero/hosts"
|
|
- "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"
|
|
|
|
whitelist:
|
|
- "localhost"
|
|
- "localhost.localdomain"
|
|
|
|
log:
|
|
level: "info"
|
|
file: "/var/log/goaway.log"
|
|
```
|
|
|
|
#### Lancement
|
|
|
|
```bash
|
|
# Lancer avec sudo pour le port 53
|
|
sudo ./goaway -config config.yaml
|
|
|
|
# Ou utiliser un port non privilégié (ex: 5353) et rediriger
|
|
./goaway -config config.yaml
|
|
```
|
|
|
|
### Méthode 2 : Docker
|
|
|
|
#### Dockerfile simple
|
|
|
|
```dockerfile
|
|
FROM golang:alpine AS builder
|
|
|
|
RUN apk add --no-cache git
|
|
|
|
WORKDIR /app
|
|
RUN git clone https://github.com/leprosus/golang-dns-proxy.git .
|
|
RUN go build -o goaway main.go
|
|
|
|
FROM alpine:latest
|
|
|
|
RUN apk add --no-cache ca-certificates
|
|
|
|
WORKDIR /app
|
|
COPY --from=builder /app/goaway /app/
|
|
|
|
EXPOSE 53/tcp 53/udp
|
|
|
|
ENTRYPOINT ["./goaway"]
|
|
CMD ["-config", "/app/config/config.yaml"]
|
|
```
|
|
|
|
#### Docker Compose
|
|
|
|
```yaml
|
|
version: '3.8'
|
|
|
|
services:
|
|
goaway:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: goaway
|
|
restart: unless-stopped
|
|
ports:
|
|
- "53:53/tcp"
|
|
- "53:53/udp"
|
|
volumes:
|
|
- ./config:/app/config:ro
|
|
- ./logs:/var/log
|
|
environment:
|
|
- TZ=Europe/Paris
|
|
networks:
|
|
- goaway-network
|
|
|
|
networks:
|
|
goaway-network:
|
|
driver: bridge
|
|
```
|
|
|
|
#### Configuration Docker
|
|
|
|
Créer la structure de dossiers :
|
|
|
|
```bash
|
|
mkdir -p goaway/{config,logs}
|
|
cd goaway
|
|
```
|
|
|
|
Créer `config/config.yaml` :
|
|
|
|
```yaml
|
|
server:
|
|
host: "0.0.0.0"
|
|
port: 53
|
|
|
|
upstream:
|
|
- "1.1.1.1:53"
|
|
- "1.0.0.1:53"
|
|
|
|
blacklist:
|
|
- "https://someonewhocares.org/hosts/zero/hosts"
|
|
- "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"
|
|
|
|
whitelist:
|
|
- "localhost"
|
|
|
|
log:
|
|
level: "info"
|
|
file: "/var/log/goaway.log"
|
|
```
|
|
|
|
#### Lancement Docker Compose
|
|
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
## Configuration système
|
|
|
|
### Configurer GoAway comme DNS par défaut
|
|
|
|
#### Linux
|
|
|
|
```bash
|
|
# Modifier /etc/resolv.conf
|
|
sudo sed -i 's/nameserver .*/nameserver 127.0.0.1/' /etc/resolv.conf
|
|
|
|
# Ou via systemd-resolved
|
|
sudo systemctl stop systemd-resolved
|
|
sudo systemctl disable systemd-resolved
|
|
```
|
|
|
|
#### Windows
|
|
|
|
```powershell
|
|
# Définir GoAway comme DNS via PowerShell (admin)
|
|
Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses ("127.0.0.1")
|
|
```
|
|
|
|
#### Router
|
|
|
|
Configurer votre routeur pour utiliser l'IP du serveur GoAway comme DNS primaire.
|
|
|
|
## Commandes utiles
|
|
|
|
### Vérifier le fonctionnement
|
|
|
|
```bash
|
|
# Tester la résolution DNS
|
|
dig @127.0.0.1 google.com
|
|
|
|
# Vérifier qu'un domaine est bloqué
|
|
dig @127.0.0.1 doubleclick.net
|
|
```
|
|
|
|
### Gestion du service (systemd)
|
|
|
|
```ini
|
|
# /etc/systemd/system/goaway.service
|
|
[Unit]
|
|
Description=GoAway DNS Proxy
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=root
|
|
WorkingDirectory=/opt/goaway
|
|
ExecStart=/opt/goaway/goaway -config /opt/goaway/config.yaml
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
```bash
|
|
# Activer et démarrer le service
|
|
sudo systemctl enable goaway
|
|
sudo systemctl start goaway
|
|
sudo systemctl status goaway
|
|
```
|
|
|
|
## Alternatives
|
|
|
|
| Application | Description | Différence principale |
|
|
|-------------|-------------|----------------------|
|
|
| **Blocky** | Proxy DNS avec blocage d'annonces | Plus de fonctionnalités avancées, interface web |
|
|
| **AdGuard Home** | Solution DNS complète | Interface web riche, statistiques détaillées |
|
|
| **Pi-hole** | Bloqueur de publicités DNS | Écosystème mature, grande communauté |
|
|
|
|
### 🔗 Pages Liées
|
|
|
|
- [[app-pihole]] — Le bloqueur DNS de référence
|
|
- [[app-blocky]] — Proxy DNS léger en Go, similaire
|
|
- [[app-adguard-home]] — Alternative avec UI web complète
|
|
- [[cat-dns]] — Toutes les apps DNS du catalogue
|
|
- [[cat-ad-block]] — Toutes les apps de blocage de pub
|
|
|
|
## Points forts et limites
|
|
|
|
### ✅ Points forts
|
|
|
|
- Très léger et rapide (Go natif)
|
|
- Configuration YAML simple
|
|
- Support des listes de blocage distantes
|
|
- Logs clairs et détaillés
|
|
- Faible consommation de ressources
|
|
|
|
### ❌ Limites
|
|
|
|
- Pas d'interface web intégrée
|
|
- Configuration manuelle des listes
|
|
- Moins de fonctionnalités que des solutions comme Pi-hole ou AdGuard
|
|
- Documentation limitée
|
|
|
|
## Sécurité
|
|
|
|
### Bonnes pratiques
|
|
|
|
- **Mises à jour régulières** : Recompiler périodiquement depuis le repo
|
|
- **Listes de blocage** : Utiliser des sources fiables et maintenues
|
|
- **Logs** : Surveiller les requêtes bloquées et les erreurs
|
|
- **Firewall** : Restreindre l'accès au port 53 aux réseaux de confiance
|
|
|
|
## Dépannage
|
|
|
|
### Problèmes courants
|
|
|
|
| Problème | Cause probable | Solution |
|
|
|----------|---------------|----------|
|
|
| "bind: permission denied" | Port 53 nécessite les privilèges root | Lancer avec `sudo` ou utiliser un port > 1024 |
|
|
| Résolution DNS lente | Upstream lent ou indisponible | Changer les serveurs upstream dans la config |
|
|
| Domaines légitimes bloqués | Faux positifs dans les listes | Ajouter à la whitelist |
|
|
| Logs absents | Chemin incorrect | Vérifier les permissions du dossier `/var/log` |
|
|
|
|
## Ressources
|
|
|
|
- **Repository GitHub** : https://github.com/leprosus/golang-dns-proxy
|
|
- **Issues** : https://github.com/leprosus/golang-dns-proxy/issues
|
|
- **Listes de blocage recommandées** :
|
|
- StevenBlack/hosts : https://github.com/StevenBlack/hosts
|
|
- someone who cares : https://someonewhocares.org/hosts/
|
|
|
|
---
|
|
|
|
*Dernière mise à jour : 2025-06-07*
|