3
septembre
2026
Démarrage de DOH sous Linux - résolution de noms vers des adresses IP DNS via HTTPS
11:11

Démarrage de DOH sous Linux - résolution de noms vers des adresses IP DNS via HTTPS

3 septembre 2026 11:11

Cet article est un complément à configuration d'un serveur DNS de mise en cache résolu par le système.

Présentation

Cet article ne décrit pas méthodes pour contourner le blocage, et est consacré à la méthode de résolution des noms DNS via HTTPS avec mise en cache, pour augmenter la sécurité des ordinateurs exécutant le système d'exploitation Linux.

Le fait est qu'avant d'accéder à un site Web requêtes vers n'importe quel serveur DNS, peu importe [libre, indépendant ou gouvernemental] sont transmis en texte clair. Ce qui crée des opportunités :
1) interception de telles demandes par l'un des ordinateurs du segment du réseau local.
2) analyse des requêtes au DNS au niveau du fournisseur ou du fournisseur amont (avec DNS récursif).
3) la possibilité d'interférer dans le processus de transmission de tels messages (émission de réponses fausses ou vides par des attaquants, substitution d'adresses IP dans les réponses DNS).
4) de nombreux serveurs DNS n'ont pas de filtrage des sites frauduleux, malveillants ou publicitaires, alors que de nombreux serveurs DNS spécialisés ont cette capacité (appelée « DNS familial » ou « DNS sécurisé »).

Comparaison des technologies :

  • L'utilisation de DNSSEC résout uniquement le problème de l'impossibilité d'usurper une réponse du serveur DNS à l'aide d'une signature de message. La requête émanant d'un client DNSSEC est « transparente », clairement visible en clair comme avec un DNS classique.
  • Utilisation de DNS sur TLS (POINT) : ne fonctionne pas pour une raison inconnue (je n'ai pas réussi à le démarrer). De plus, le protocole DOT utilise le port 853/TCP sur le serveur distant, qui, comme 53/UDP (DNS), est facilement déterminé lors de l'étude du trafic.
  • Utilisation de DNS sur HTTPS (DOH) :fonctionne(le but de cet article est de parler de l'expérience d'utilisation). Le port DOH standard et le port HTTPS sont les mêmes : 443.

Description de la solution : exécuter DOH sous Linux

Cette solution définira DOH sur tout système d'exploitation Linux. La solution nécessite un travail résolu par systemd. Ce qui limite la liste des systèmes d'exploitation auxquels cette instruction s'applique aux seuls systèmes d'exploitation qui utilisent le système d'initialisation du service système.

Vérifier que le système d'initialisation systemd est utilisé :

ps -p 1 -o comm=

La réponse devrait être :
systemd

Pour exécuter DOH sur le client, vous aurez besoin de :
1) exécuter instructions pour l'installation et la configuration de systemd-résolu,
2) installer le paquet dnscrypt-proxy
3) personnaliser le package dnscrypt-proxy en utilisant un fichier de configuration avec une extension .toml.
4) démarrer le service dnscrypt-proxy
5) rediriger les requêtes vers le serveur DNS de mise en cache systemd-resolved на dnscrypt-proxy.
6) configurez votre navigateur Web (désactivez votre DNS sur HTTPS pour fonctionner via un serveur DNS local de mise en cache local).

Des actions étape par étape

1) Faisons-le installation, configuration du serveur DNS de mise en cache résolu par systemd.

2) Installez le package dnscrypt-proxy

sudo apt mise à jour
sudo apt install dnscrypt-proxy

3) Créez un fichier de configuration /etc/dnscrypt-proxy/dnscrypt-proxy.toml

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

et ajouter à dnscrypt-proxy.toml texte :

# Empty listen_addresses to use systemd socket activation
listen_addresses = ['127.0.0.1:5053']
server_names = ['google'] # or 'yandex'. See https://dnscrypt.info/public-servers/ .

# Use reachable
ipv4_servers=true
ipv6_servers=false

# Enable DoH specifically:
doh_servers = true
dnscrypt_servers = false  # Only DoH, no DNScrypt
require_dnssec=false
require_nolog=true
require_nofilter=true
timeout=5000
keepalive=30 # Keep alive connection, seconds
cert_refresh_delay=240
ignore_system_dns=true
netprobe_timeout=60
netprobe_address='9.9.9.9:53'
block_ipv6=true
block_unqualified=true
reject_ttl=10
cache=true
cache_size=4096
cache_min_ttl=2400
cache_max_ttl=86400
cache_neg_min_ttl=60
cache_neg_max_ttl=600

[nx_log]
  file = '/var/log/dnscrypt-proxy/nx.log' # Log file is off by "require_nolog=true" 

[sources]
  [sources.'public-resolvers']
  url = 'https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md'
  cache_file = '/var/cache/dnscrypt-proxy/public-resolvers.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 73
  prefix = ''
[sources.relays]
  url = 'https://download.dnscrypt.info/resolvers-list/v3/relays.md'
  cache_file = '/var/cache/dnscrypt-proxy/relays.md'
  minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
  refresh_delay = 73
  prefix = ''

Enregistrer et quitter : Ctrl+S, Ctrl+X

Redémarrage du service dnscrypt-proxy:

sudo systemctl restart dnscrypt-proxy

Commentaire :

  • Serveur DNS de mise en cache résolu par systemd s'exécutant sur localhost sur le port 53 et 127.0.0.53:53
  • le nouveau service dnscrypt-proxy écoutera sur le port 5053.
  • résolution de nom ici via [google], service DNS sur HTTPS (conforme à https://dns.google/dns-query - RFC 8484 (GET et POST))
  • IPv4 utilisé, IPv6 désactivé
  • Serveurs DOH - utilisés
  • Les serveurs DNSCRYPT sont désactivés
  • Option DNSSEC désactivée
  • journal des requêtes désactivé
  • option de filtres de domaine désactivée
    ...
  • Adresse IP du serveur DNS pour résoudre la première requête netprobe_address='9.9.9.9:53'.
  • les sections "sources", "sources.'public-resolvers'" et "sources.relays" sont nécessaires au fonctionnement du service dnscrypt-proxy.

La résolution de noms via DOH affecte l'ensemble du système d'exploitation Linux, tous les programmes et utilitaires qu'il contient (dig, ping, traceroute).

4) Démarrez le service dnscrypt-proxy et autoriser le démarrage automatique au démarrage du système d'exploitation :

sudo systemctl activer dnscrypt-proxy
sudo systemctl start dnscrypt-proxy

5) Redirection de requête DNS.

Si vous avez créé un lien symbolique,

ls -l /etc/resolv.conf

Seulement s'il y a un lien, supprimez-le :

sudo rm /etc/resolv.conf

Ouvrez le fichier /etc/resolv.conf pour l'édition

sudo nano /etc/resolv.conf

Et ajoutez-y le texte :

nameserver 127.0.0.53

Enregistrer et quitter : Ctrl+S, Ctrl+X.

Qu'est-ce qui redirigera selon /etc/resolv.conf запросы приложений "ping", "dig" на systemd-resolved à l'adresse locale 127.0.0.53.

Service systemd-resolved будет передавать запросы DNS на dnscrypt-proxy à 127.0.0.1:5053, pour lequel nous éditons le fichier :

sudo nano /etc/systemd/resolved.conf

Le contenu du fichier devrait ressembler à ceci :

<pré>[Résoudre]
DNS=127.0.0.1:5053
DNS de repli =
Domaines=~.

Ici 127.0.0.1:5053 est l'adresse IP et le port dnscrypt-proxy.

Enregistrer et quitter : Ctrl+S, Ctrl+X.

Redémarrez le service :

sudo systemctl restart systemd-resolved

Redirection des requêtes du service "SystemD-ResolveD" vers dnscrypt-proxy(127.0.0.1:5053) terminé !

À son tour,dnscrypt-proxy перенаправит запросы через DNS over HTTPS в Интернет на DOH-сервер, который указан в конфигурации TOML в разделе server_names = [].

Vérifier

Tout d'abord, vérifiez l'état du proxy dnscrypt et du serveur DNS de mise en cache.

sudo systemctl status dnscrypt-proxy
sudo systemctl status systemd-resolved

Il ne devrait y avoir aucune erreur, mais l'état "Actif : actif (en cours d'exécution)" et "Maintenant, j'écoute 127.0.0.1:5053 [TCP]" pour le premier et le même état "Actif : actif (en cours d'exécution)" au deuxième.

Délai d'exécution de la demande :

time resolvectl query lenta.com
lenta.com: 178.248.232.88

-- Information acquired via protocol DNS in 53.8ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

real    0m0,065s
user    0m0,000s
sys 0m0,010s
time resolvectl query lenta.com
lenta.com: 178.248.232.88

-- Information acquired via protocol DNS in 2.4ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

real    0m0,009s
user    0m0,003s
sys 0m0,004s

Exécutez également deux commandes à la suite :

dig ya.ru
dig ya.ru

La résolution de noms et la mise en cache des réponses aux requêtes fonctionnent.

Remarque : équipe resolvectl statistics produit des valeurs incorrectes de « Cache Misses » et peut être ignoré. L'essentiel est que le temps de réponse à une requête soit nul.

Arrêtons maintenant le service et voyons si la résolution de noms DNS peut fonctionner à l'arrêt dnscrypt-proxy?
Ceux. Y a-t-il une fuite DNS ?

sudo pkill -STOP dnscrypt-proxy

Maintenant, la commande suivante se bloque :

resolvectl query lenta.com

Ctrl+C

Lançons-le à nouveau et vérifions le travail :

sudo pkill -CONT dnscrypt-proxy
resolvectl query lenta.com

La résolution de noms fonctionne à nouveau ! La méthodologie de test est basée sur documents.

6) Configuration des navigateurs Web

Dans les navigateurs Web, vous devez désactiver leur DNS sur HTTPS s'ils sont activés. Puisque toutes les requêtes passent désormais par le DNS de mise en cache locale, qui les redirige via le système dnscrypt-proxy.

Mozilla Firefox:

  • Modifier - Paramètres - Confidentialité et sécurité - DNS sur HTTPS -Désactivé(Utilisez votre résolveur DNS par défaut).
    Google Chrome, Chrome-Gost:
  • Paramètres - Confidentialité et sécurité - Utiliser un serveur DNS sécurisé -Désactivé.

Vérifiez :Test de fuite DNS de browserleaks.com-https://browserleaks.com/dns[/marque]

7) Spécification d'un serveur DNS de mise en cache dans les paramètres réseau de Network Manager.

Le paramètre Network Manager est disponible dans la barre d’état système (barre près de l’horloge).
Dans les paramètres de connexion à un réseau local ou Wi-Fi, comme indiqué dans l'article précédent, vous devez préciser DNS : 127.0.0.53, qui correspond au service résolu par systemd.

Valeurs possibles pour l'option "server_names = [...]"

sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml

_Quelques variantes de noms de serveur DOH pour la section servernames = [...] du fichier TOML
controld-unfiltered- Control D est un serveur DNS gratuit sans filtrage. Ne bloque ni ne réécrit les domaines. Ne tient pas de journal des demandes. Réseau mondial Anycast. https://controld.com/free-dns Géré par Control D. Page de service : https://controld.com/free-dns
dnsforfamily-doh- DNS for Family est un service de recherche sécurisé. Bloque les domaines liés au contenu pour adultes, aux jeux d'argent, aux drogues, aux logiciels malveillants, à la fraude/hameçonnage, aux proxys/anonymiseurs et à la publicité ; La liste noire est mise à jour quotidiennement. Fournit une recherche sécurisée sur Google, YouTube, Brave, Ecosia, Bing, DuckDuckGo et Yandex. Les réseaux sociaux comme Facebook et Instagram ne sont pas bloqués. Les requêtes DNS ne sont pas enregistrées. Prestation gratuite. Fourni par : https://dnsforfamily.com
google- Serveur DNS public Google. Service Anycast mondial exploité par Google. Le service est géré par Google Public DNS. Page de service : https://developers.google.com/speed/public-dns
yandex- Résolveur Yandex Public DNS Safe. Le service est géré par Yandex. Page de service : https://dns.yandex.com/ Peut enregistrer des demandes.
*yandex-safe- Résolveur Yandex Public DNS Safe. Service Anycast de Yandex avec filtrage des logiciels malveillants. Le service est géré par Yandex. Page de service : https://dns.yandex.com/ Peut enregistrer des demandes.

  • quad9-doh-ip4-port443-filter-pri - Serveur DNS sur HTTPS de Quad9. Dans l'image ci-dessus.

Après avoir changé de serveur, redémarrez le service :

sudo systemctl restart dnscrypt-proxy

Pour la correspondance des noms, voir la page d'accueil -https://dnscrypt.info/public-servers/.

Résultat

Nous avons configuré DNS pour fonctionner via un serveur de mise en cache avec transmission via dnscrypt-proxy.
En plus du niveau de sécurité accru, la vitesse d'ouverture des pages Web s'est considérablement améliorée grâce à double mise en cache réponses du serveur DNS (dans dnscrypt-proxy et systemd-resolved).

Suppression du proxy DNScrypt

Si nécessaire, le package dnscrypt-proxy peut être supprimé :

sudo apt remove dnscrypt-proxy

Après la suppression, n'oubliez pas de réparer le fichier

sudo nano /etc/systemd/resolved.conf

Le contenu du fichier devrait ressembler à ceci :

<pré>[Résoudre]
DNS=192.168.1.1:53
DNS de secours = 77.88.8.1
Domaines=~.

où au lieu de 192.168.1.1 indiquez l'adresse IP de votre routeur de réseau local.

Redémarrez le service :

sudo systemctl restart systemd-resolved

Origine

Cet article est très différent des instructions officielles, où l'installation dnscrypt-proxy sur le port 53 et le service résolu par systemd n'est pas utilisé.

*https://github.com/DNSCrypt/dnscrypt-proxy/wiki/Installation-linux

La source principale est l'exemple de fichier de configuration "example-dnscrypt-proxy.toml"  :

*https://github.com/DNSCrypt/dnscrypt-proxy/blob/master/dnscrypt-proxy/example-dnscrypt-proxy.toml



Publications connexes