Qu'est-ce que MasterDnsVPN ?

MasterDnsVPN est un VPN open source basé sur les tunnels DNS, conçu spécifiquement pour maintenir la connectivité dans des environnements réseau extrêmes. Son approche est plutôt maligne : il encapsule le trafic TCP dans des requêtes et réponses DNS, ce qui lui permet de contourner les blocages réseau traditionnels.

Vous avez peut-être déjà entendu parler d'outils de tunnel DNS comme DNSTT ou SlipStream. Mais MasterDnsVPN apporte pas mal d'optimisations architecturales :

  • En-tête de protocole de seulement 5-7 octets, soit environ 88 % de moins que DNSTT (~59B) et 71 % de moins que SlipStream (~24B)
  • Des vitesses de transfert nettement améliorées : lors de tests locaux, le téléchargement de 10 Mo de données ne prend que 0,27 seconde, soit environ 9 fois plus rapide que DNSTT et 3,6 fois plus rapide que SlipStream
  • Équilibrage de charge entre plusieurs résolveurs : il peut utiliser simultanément plusieurs résolveurs DNS, avec vérification automatique de l'état de santé et basculement en cas de panne
  • Mécanisme de duplication des paquets : améliore le taux de livraison dans les réseaux instables grâce à une duplication sélective
  • 8 modes d'équilibrage de charge intégrés : routage intelligent basé sur la latence et le taux de perte de paquets

Pourquoi MasterDnsVPN mérite votre attention ?

L'exemple le plus frappant s'est produit pendant les 88 jours de coupure internet en Iran. À l'époque, les autorités ont non seulement bloqué les VPN et les sites web, mais ont aussi directement coupé 99 % de la bande passante internationale, laissant les utilisateurs piégés dans un intranet fermé. Dans cette situation extrême de « déconnexion physique », la plupart des outils de contournement ont complètement échoué. Mais MasterDnsVPN est devenu l'une des rares bouées de sauvetage capables de maintenir une connexion à l'internet mondial.

Sa capacité à survivre dans ces conditions désespérées tient au fait qu'il ne dépend pas des sorties VPN internationales traditionnelles. Au lieu de ça, il utilise une technologie de tunnel DNS intelligente qui « perce » le blocage en exploitant le protocole DNS, qui reste ouvert.

MasterDnsVPN comparé aux autres outils de tunnel DNS

Fonctionnalité SlipStream DNSTT MasterDnsVPN
Type de protocole Tunnel DNS avancé Tunnel DNS classique Tunnel DNS avancé / VPN
Protocole de transport QUIC KCP + Noise Protocole personnalisé + ARQ
En-tête de transport ~24B ~59B ~5-7B
Chiffrement TLS 1.3 Noise (Curve25519) AES / ChaCha20 / XOR
Support multi-résolveurs ✅ ❌ ✅ (multiplexage avancé)
Stabilité face aux pertes Bonne Moyenne Très élevée
Support SOCKS5 ✅ ✅ ✅ (version optimisée)
Support Shadowsocks ✅ ❌ Support indirect (mode forwarding TCP)
Équilibrage de charge intégré ❌ ❌ ✅ (8 modes)
Duplication des paquets ❌ ❌ ✅ (configurable)
Cache DNS local ❌ ❌ ✅
Système de basculement ❌ ❌ ✅
Langage d'implémentation Rust Go Go (avec une version legacy en Python)

Ce tableau montre que MasterDnsVPN a un objectif de conception très clair : survivre dans les environnements réseau les plus hostiles, tout en maintenant vitesse et efficacité.


Installation de MasterDnsVPN

MasterDnsVPN propose une version principale écrite en Go et une version legacy écrite en Python. La version Go est recommandée pour des performances optimales.

Prérequis

  • Serveur : un VPS avec accès à l'internet mondial (Ubuntu 20.04+ ou CentOS 7+ recommandé)
  • Client : Windows / macOS / Linux, ou Android (via Termux)
  • Environnement Go (si compilation depuis les sources) : Go 1.21+

Méthode 1 : Télécharger les binaires précompilés

Rendez-vous sur la page des releases GitHub pour télécharger la dernière version correspondant à votre plateforme :

BASH
# Linux x86_64
wget https://github.com/masterking32/MasterDnsVPN/releases/latest/download/masterdnsvpn-linux-amd64
chmod +x masterdnsvpn-linux-amd64
sudo mv masterdnsvpn-linux-amd64 /usr/local/bin/masterdnsvpn

# macOS (Apple Silicon)
wget https://github.com/masterking32/MasterDnsVPN/releases/latest/download/masterdnsvpn-darwin-arm64
chmod +x masterdnsvpn-darwin-arm64
sudo mv masterdnsvpn-darwin-arm64 /usr/local/bin/masterdnsvpn

Méthode 2 : Compiler depuis les sources

BASH
# Cloner le dépôt
git clone https://github.com/masterking32/MasterDnsVPN.git
cd MasterDnsVPN

# Compiler le serveur
go build -o masterdnsvpn-server ./cmd/server

# Compiler le client
go build -o masterdnsvpn-client ./cmd/client

Méthode 3 : Utiliser Docker (recommandé pour un déploiement rapide)

BASH
# Récupérer l'image
docker pull masterking32/masterdnsvpn

# Lancer le serveur
docker run -d \
  --name masterdnsvpn-server \
  -p 53:53/udp \
  -v $(pwd)/config:/etc/masterdnsvpn \
  masterking32/masterdnsvpn server --config /etc/masterdnsvpn/config.yaml

Démarrage rapide : mettre en place MasterDnsVPN en 5 minutes

Étape 1 : Configurer le serveur

Sur votre VPS, créez un fichier de configuration config.yaml :

YAML
# Exemple de configuration serveur
server:
  listen_addr: "0.0.0.0:53"    # Écoute sur le port UDP 53 (port DNS standard)
  protocol: "udp"               # Utilise le protocole UDP

  # Configuration du chiffrement
  encryption:
    method: "aes-256-gcm"       # Algorithme de chiffrement : aes-256-gcm / chacha20-poly1305 / xor
    password: "your-strong-password-here"  # ⚠️ Remplacez par un mot de passe robuste

  # Résolveurs DNS amont (pour relayer les requêtes DNS normales)
  upstream_dns:
    - "8.8.8.8:53"
    - "1.1.1.1:53"

  # Configuration des logs
  log_level: "info"             # debug / info / warn / error
  log_file: "/var/log/masterdnsvpn.log"

Démarrez le serveur :

BASH
sudo masterdnsvpn server --config config.yaml

Ou utilisez un service systemd (recommandé en production) :

BASH
# Créer le fichier de service systemd
sudo tee /etc/systemd/system/masterdnsvpn.service << EOF
[Unit]
Description=MasterDnsVPN Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/masterdnsvpn server --config /etc/masterdnsvpn/config.yaml
Restart=always
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target
EOF

# Démarrer le service
sudo systemctl daemon-reload
sudo systemctl enable masterdnsvpn
sudo systemctl start masterdnsvpn

# Vérifier l'état
sudo systemctl status masterdnsvpn

Étape 2 : Configurer le client

Créez un fichier client_config.yaml sur le client :

YAML
# Exemple de configuration client
client:
  # Adresse d'écoute du proxy SOCKS5 local
  socks5_listen: "127.0.0.1:1080"

  # Adresse du serveur de tunnel DNS (IP ou domaine de votre VPS)
  server_addr: "your-vps-ip:53"

  # Configuration du chiffrement (doit correspondre au serveur)
  encryption:
    method: "aes-256-gcm"
    password: "your-strong-password-here"

  # Liste des résolveurs DNS (pour envoyer le trafic tunnel)
  resolvers:
    - "8.8.8.8:53"
    - "8.8.4.4:53"
    - "1.1.1.1:53"
    - "1.0.0.1:53"

  # Configuration avancée
  advanced:
    # Paramètre MTU (réduisez cette valeur pour les réseaux à petit MTU)
    mtu: 1400

    # Facteur de duplication des paquets (1 = pas de duplication, 2 = chaque paquet envoyé deux fois, améliore la fiabilité mais augmente le trafic)
    duplication_factor: 1

    # Intervalle de vérification de l'état de santé (en secondes)
    health_check_interval: 30

    # Mode d'équilibrage de charge : latency / loss / round_robin / weighted
    load_balance_mode: "latency"

  # Cache DNS local (optionnel, réduit les risques de hijacking DNS)
  local_dns:
    enabled: true
    listen_addr: "127.0.0.1:5353"
    cache_ttl: 300  # TTL du cache (en secondes)

Démarrez le client :

BASH
masterdnsvpn client --config client_config.yaml

Étape 3 : Configurer vos applications pour utiliser le proxy

Le client MasterDnsVPN écoute maintenant le proxy SOCKS5 sur 127.0.0.1:1080. Vous pouvez configurer votre navigateur ou votre système pour utiliser ce proxy :

Exemple avec Firefox : 1. Ouvrez about:preferences → Paramètres réseau 2. Sélectionnez « Configuration manuelle du proxy » 3. Hôte SOCKS : 127.0.0.1, Port : 1080 4. Cochez « SOCKS v5 » 5. Cochez « DNS distant » (important ! Cela fait aussi passer les requêtes DNS par le tunnel)

Test en ligne de commande :

BASH
# Utiliser curl via le proxy SOCKS5
curl --socks5 127.0.0.1:1080 https://www.google.com

# Utiliser proxychains (Linux)
proxychains curl https://www.google.com

Fonctionnalités avancées en pratique

Stratégies d'équilibrage de charge multi-résolveurs

L'un des atouts majeurs de MasterDnsVPN est sa capacité à utiliser plusieurs résolveurs DNS et à choisir intelligemment en fonction de l'état du réseau. Voici les différents modes d'équilibrage de charge et leurs cas d'utilisation :

YAML
# Exemples de configuration pour différents modes d'équilibrage de charge
advanced:
  # Mode 1 : Basé sur la latence (par défaut, adapté à la plupart des scénarios)
  load_balance_mode: "latency"

  # Mode 2 : Basé sur le taux de perte (adapté aux réseaux avec beaucoup de pertes)
  # load_balance_mode: "loss"

  # Mode 3 : Round-robin (distribution uniforme simple)
  # load_balance_mode: "round_robin"

  # Mode 4 : Pondéré (poids spécifiés manuellement)
  # load_balance_mode: "weighted"
  # resolver_weights:
  #   "8.8.8.8:53": 10
  #   "1.1.1.1:53": 5
  #   "9.9.9.9:53": 8

Comparaison des performances réelles :

Supposons que vous ayez configuré 4 résolveurs. Voici comment ils se comportent dans différentes conditions réseau :

Condition réseau Mode recommandé Raison
Haut débit stable / fibre optique latency Latence la plus faible, vitesse maximale
Réseau mobile (4G/5G) loss Privilégie les chemins avec peu de pertes
Environnement fortement censuré latency + plusieurs résolveurs Évite automatiquement les résolveurs perturbés
Test / débogage round_robin Distribution uniforme, facilite le dépannage

Mécanisme de duplication des paquets

Dans des réseaux extrêmement instables, vous pouvez activer la duplication des paquets pour améliorer le taux de livraison :

YAML
advanced:
  # Facteur de duplication : 1 = pas de duplication, 2 = chaque paquet envoyé deux fois, 3 = chaque paquet envoyé trois fois
  duplication_factor: 2

  # Duplication sélective : ne duplique que les paquets de contrôle critiques (économise la bande passante)
  selective_duplication: true

Estimation de la surcharge de trafic :

  • duplication_factor: 1 (par défaut) : aucune surcharge supplémentaire
  • duplication_factor: 2 : trafic doublé, mais taux de livraison nettement amélioré
  • duplication_factor: 3 : trafic triplé, adapté aux réseaux extrêmement instables

Il est conseillé d'utiliser 1 sur un réseau normal et de passer temporairement à 2 en cas de déconnexions fréquentes.

Cache DNS local et protection contre le hijacking

MasterDnsVPN peut exécuter un service DNS local, ce qui réduit la latence des requêtes DNS et prévient le hijacking DNS :

YAML
local_dns:
  enabled: true
  listen_addr: "127.0.0.1:5353"
  cache_ttl: 300          # Cache pendant 5 minutes
  max_cache_size: 10000   # Maximum de 10 000 entrées en cache

  # Résoudre les DNS via SOCKS5 (prévient encore plus le hijacking)
  resolve_via_socks5: true

Une fois configuré, définissez le serveur DNS de votre système sur 127.0.0.1:5353 :

BASH
# Linux (systemd-resolved)
sudo tee /etc/systemd/resolved.conf.d/masterdnsvpn.conf << EOF
[Resolve]
DNS=127.0.0.1:5353
FallbackDNS=8.8.8.8
EOF
sudo systemctl restart systemd-resolved

# macOS
sudo networksetup -setdnsservers Wi-Fi 127.0.0.1

Mode forwarding TCP (pour héberger Shadowsocks et autres protocoles)

Bien que MasterDnsVPN ne prenne pas directement en charge Shadowsocks, il peut héberger indirectement tout protocole basé sur TCP via le mode forwarding TCP :

YAML
# Configuration serveur : activer le forwarding TCP
server:
  tcp_forwarding:
    enabled: true
    rules:
      - listen_addr: "127.0.0.1:8388"    # Port d'écoute local
        target_addr: "shadowsocks-server:8388"  # Cible de forwarding

Ensuite, après la connexion du client, vous pouvez accéder au service Shadowsocks via 127.0.0.1:8388, et tout le trafic passera par le tunnel DNS.


Dépannage des problèmes courants

Problème 1 : Le client ne parvient pas à se connecter au serveur

Symptômes : Au démarrage, le client affiche « connection timeout » ou « no healthy resolver »

Étapes de diagnostic :

BASH
# 1. Vérifier que le serveur fonctionne correctement
sudo systemctl status masterdnsvpn
sudo tail -f /var/log/masterdnsvpn.log

# 2. Confirmer que le port UDP 53 est ouvert
sudo ss -ulnp | grep 53

# 3. Vérifier les règles du pare-feu
sudo iptables -L INPUT -n | grep 53
# Si vous utilisez firewalld
sudo firewall-cmd --list-ports | grep 53/udp

# 4. Tester la connectivité DNS depuis le client
dig @your-vps-ip google.com
nslookup google.com your-vps-ip

# 5. Vérifier que les mots de passe de chiffrement correspondent
# Assurez-vous que le champ password dans le config.yaml du client et du serveur est exactement identique

Solutions :

BASH
# Ouvrir le port UDP 53 (Ubuntu/Debian)
sudo ufw allow 53/udp

# Ouvrir le port UDP 53 (CentOS/RHEL avec firewalld)
sudo firewall-cmd --permanent --add-port=53/udp
sudo firewall-cmd --reload

# Si vous utilisez un cloud provider, ouvrez aussi le port UDP 53 dans le groupe de sécurité

Problème 2 : Lentitude ou déconnexions fréquentes

Causes possibles et solutions :

YAML
# Solution 1 : Ajouter plus de résolveurs DNS
resolvers:
  - "8.8.8.8:53"
  - "8.8.4.4:53"
  - "1.1.1.1:53"
  - "1.0.0.1:53"
  - "9.9.9.9:53"       # Quad9
  - "208.67.222.222:53" # OpenDNS

# Solution 2 : Ajuster le MTU (pour les réseaux à petit MTU)
advanced:
  mtu: 1200  # Réduit de 1400 par défaut

# Solution 3 : Activer la duplication des paquets
advanced:
  duplication_factor: 2

# Solution 4 : Changer le mode d'équilibrage de charge
advanced:
  load_balance_mode: "loss"  # Si les pertes sont importantes

Problème 3 : Échec de résolution dû à la pollution DNS

Symptômes : La connexion fonctionne, mais certains domaines résolvent vers de mauvaises adresses IP

Solution :

YAML
# Activer le DNS local et résoudre via SOCKS5
local_dns:
  enabled: true
  listen_addr: "127.0.0.1:5353"
  resolve_via_socks5: true  # Crucial ! Les requêtes DNS passent aussi par le tunnel
  cache_ttl: 600

# Puis définissez le DNS du système sur 127.0.0.1:5353

Problème 4 : Comment utiliser sur Android

Méthode 1 : Termux (recommandé)

BASH
# Installer dans Termux
pkg install golang git
git clone https://github.com/masterking32/MasterDnsVPN.git
cd MasterDnsVPN
go build -o masterdnsvpn ./cmd/client

# Créer le fichier de configuration et lancer
./masterdnsvpn client --config client_config.yaml

# Ensuite, configurez le proxy SOCKS5 dans les paramètres WiFi d'Android
# Hôte proxy : 127.0.0.1, Port : 1080

Méthode 2 : Utiliser un client SOCKS5 tiers

Certaines applications VPN Android supportent l'import de configurations SOCKS5. Vous pouvez直接使用 le proxy 127.0.0.1:1080 fourni par le client MasterDnsVPN.


Sécurité et mentions légales

⚠️ Avertissement important :

MasterDnsVPN est un projet open source à vocation éducative et de recherche. Veuillez noter les points suivants lors de son utilisation :

  1. Responsabilité légale : Dans certains pays et régions, l'utilisation de ce type d'outil pour contourner le contrôle réseau peut violer les lois locales. Informez-vous et respectez la législation en vigueur dans votre région avant toute utilisation.

  2. Clause de non-garantie : Ce logiciel est fourni « tel quel ». Les développeurs ne sauraient être tenus responsables de tout dommage direct ou indirect résultant de l'utilisation de ce logiciel.

  3. Risques de sécurité : Bien que les tunnels DNS permettent de contourner la censure, ils n'offrent pas une anonymité totale. Ne les utilisez pas pour des activités illégales.

  4. Compromis de performance : La vitesse des tunnels DNS est naturellement inférieure à celle d'un VPN en connexion directe. Ils conviennent mieux aux scénarios où la disponibilité est prioritaire sur la vitesse.


Conclusion

MasterDnsVPN représente l'état de l'art en matière de technologie de tunnel DNS. Ce n'est pas seulement une preuve de concept théorique, mais un outil dont l'efficacité a été démontrée dans des situations réelles de censure réseau extrême. Pour les développeurs, les chercheurs ou les professionnels travaillant dans des environnements réseau restreints, c'est une solution de secours qui vaut la peine d'être maîtrisée.

Récapitulatif des avantages clés :

  • ✅ En-tête de protocole ultra-faible (5-7 octets), maximise l'utilisation de la charge utile DNS
  • ✅ Équilibrage de charge intelligent entre plusieurs résolveurs, avec basculement automatique
  • ✅ Mécanisme de duplication des paquets, maintient la connexion dans les réseaux hostiles
  • ✅ Cache DNS local, réduit la latence et prévient le hijacking
  • ✅ Open source et gratuit, implémentation en Go, support multiplateforme
  • ✅ Validé en conditions réelles : a maintenu la connectivité pendant les 88 jours de coupure en Iran

Cas d'utilisation :

  • Recherche académique : tester l'efficacité des techniques de blocage réseau
  • Solution de secours d'urgence : dernier recours lorsque les VPN traditionnels échouent
  • Outil pour développeurs : accéder à GitHub, npm et autres ressources dans des réseaux restreints
  • Protection de la vie privée : prévenir le hijacking DNS et les attaques de type homme du milieu

Si vous cherchez un outil capable de « survivre » dans les environnements réseau les plus difficiles, MasterDnsVPN mérite absolument sa place dans votre boîte à outils.


Liens utiles :