Serveur DNS récursif ouvert

Adresses

Nous avons un serveur DNS récursif ouvert (rate-limité, supervisé) sur l’extérieur qui répond au doux nom de ns0.ldn-fai.net. Son adresse IPv6 est 2001:913::8 et son adresse IPv4 est 80.67.188.188.

Si vous êtes sur un réseau qui filtre ou censure le trafic DNS, vous pouvez tenter les approches suivantes :

  • utiliser un port alternatif (le serveur écoute aussi sur le port 9000) ;
  • forcer l’utilisation de TCP plutôt qu’UDP ;
  • passer par TLS (le serveur écoute en TLS sur le port TCP 443 ainsi que le port 853)
    • le port 443 est le port réservé pour HTTPS et n’est donc généralement pas filtré ;
    • le port 853 est le port réservé pour DNS sur TLS (RFC 7858).

Utiliser un port alternatif

Pour passer par le port 9000, plusieurs possibilités :

  • PAT (Port Address Translation) avec Netfilter (iptables Linux) ;
  • utiliser un serveur DNS local et le configurer pour utiliser notre serveur comme upstream via le port 9000 (Unbound peut faire ça) ;
  • utiliser Socat pour rediriger des requêtes DNS locales vers le port 9000 de notre récursif.

Forcer l’utilisation de TCP

Plusieurs possibilités :

  • forcer l’utilisation de TCP dans le stub resolver (ignoré par certaines applications) ;
  • unbound est capable d’utiliser un serveur upstream en utilisant uniquement TCP mais il initie une connection TCP par requête ce qui a un impact négatif sur les performances des requêtes DNS.

Quitte à faire, nous conseillons de passer directement à DNS/TLS (voir ci dessous).

Chiffrer le DNS avec TLS

L’utilisation de DNS sur TLS permet de chiffrer les données entre votre machine et le serveur LDN ce qui permet de permet d’éviter à un attaquant sur le réseau de voir le traffic DNS.

Ça n’apporte qu’une protection relative cependant. Un attaquant peut toujours voir :

  • les adresses IP des machines avec lequelles vous ommuniquez ;
  • les contenu des échanges des flux non chiffrés (et peut les modifier) ;
  • même avec un chiffrement TLS, le noms d’hôtes avec lesquelles vous communiquez (avec SNI).

Le certificat actuel est :

-----BEGIN CERTIFICATE-----
MIIFYzCCA0ugAwIBAgIJAP3sZe6dzCxGMA0GCSqGSIb3DQEBCwUAMEgxCzAJBgNV
BAYTAkZSMRMwEQYDVQQIDApTb21lLVN0YXRlMQwwCgYDVQQKDANMRE4xFjAUBgNV
BAMMDTgwLjY3LjE4OC4xODgwHhcNMTYwOTI2MjI0MzMzWhcNMTgwOTI2MjI0MzMz
WjBIMQswCQYDVQQGEwJGUjETMBEGA1UECAwKU29tZS1TdGF0ZTEMMAoGA1UECgwD
TEROMRYwFAYDVQQDDA04MC42Ny4xODguMTg4MIICIjANBgkqhkiG9w0BAQEFAAOC
Ag8AMIICCgKCAgEAuIPaKHc6zgGFgdDxJPaw7hf63ytMGw0roFMlYOklC3uiFTp8
QLHA9NKTXWXEl0OBnaNerPsQpnoCR8UOf9pWKZa2kiLXQDvShsz9pHXzfLskRxOh
Fegk3m/lO7C8Hj6QI3leTm6naVdrWySaZ1K5RAx6kRwdUSZ08x/je4Vc1ZTe1Hbr
qYexvX94EJhrmIxA9u9q7RoRYAUbNR3h8QhotO6APYlsSsaDE2hkju4vjfz8/M4T
jSClvEn6Keto/UkB0Xno1jDvxxSqSansxOymha1JM5u4G95XfYKLpnebqpShGN0Y
UhUK26q8MVKCWAV6fEN4cDfofqGF+zGC/js8GyiZWP/qxuOf9QJWbs78oa0pQRS+
yO8W+F2ue0ND5gu89/VzoejfJO0MHiyl60g/548EGffCp4gCCSasV+bDbHrgctw1
8iQvnu5Thi7IbCFp7Sgfypj57Ryq/nmcipXSxxcm7g/ZP16V5+Bcy/u3JQox2OUv
WvvikbduUjN6Zx5qs5XBBVRqiqpHtyU8rHR23344ARHE+nf3XQZS+Sy9ItskAbPV
thpX33GfUslR1P9GOwBFewC64DtErqOrzyzCqWuLdBbvBGOnc9uD1hZdFJIX685O
nMkQThaiKWNFAJGL6zGyTxHAJ3Ipn3HgbpSeBLHVtA+EOLCa/ZQZYvsyVgcCAwEA
AaNQME4wHQYDVR0OBBYEFIjES3O/vxZcx1wJ3SFlhQLRz/+fMB8GA1UdIwQYMBaA
FIjES3O/vxZcx1wJ3SFlhQLRz/+fMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL
BQADggIBAB7C5/+Ej4n4mZzvymZYqb3TgQcpTsiyqW0jQNs66e1zaI8u5Tce/tk9
X+G09CVPu7BYCgGe1t489mnUc+3AeVkw5kS7FHS/JldhV/i4pDs1b3z9FuiVvcmq
EJCOkkn2IDqvraQU3RP4356d89cz140VrR7l6dqh1bKT6C+u0Atd1HiGpyhBZvG3
9BS3qtyhLxCVUBjITvN3dK4/MLeW3oppUYvcqhusZI+XxfpML5DCLPP+MFLEFYt9
tqiwzBrbiAYH7B00h/PZRjNMdhA5jxFIKIaBM6iO6trGEC455tzMjI6OhFY5P5nE
UUjj+r8dwhpz88Lqsm6SFLqumMbSapsGdLkL4prvMz1Meph5WYetnCa9+op5xoyS
bMvae/kSOrmy43N+Zd5Uod2v9jBZsA8n87ykq+m80i2ZHG9GH654aHSTaNPptCYU
E9/YFzvwDWc9k6b0eT9rqNdgx8B4uZkNpE6kJBVCsJ38CLczqR3wawbE0cm/nkXi
Os4ifJ1NwlBMujJ7AnPXmATCTvOjiDgVkxgdnjWFjcdtv8J/iozrj6TOVvHRPGRo
RG8TjLQZWf0KtBF+dmaoujWoSt3kknWc6MSRTxMqygWL0mKsXz1xDqaIFhGY/Oau
LpOaxq75VIywhC0XSEAAnaxPBjajnU6Sixsr2EYtl9/4kQkdz+yd
-----END CERTIFICATE-----

SPKI Pin : WaG0kHUS5N/ny0labz85HZg+v+f0b/UQ73IZjFep0nM= (SHA-256).

Désormais, de nombreux logiciels gèrent nativement DNS/TLS :

  1. Stubby (ne fait de pas cache tout seul)
  2. Unbound (ne vérifie par le certificat avant la version 1.7.1, peut vérifier le certificat avec PKIX depuis 1.7.1)
  3. Knot Resolver

Voir le wiki de DNS privacy pour plus de détails sur la configuration.

Stubby

Stubby gère nativement DNS/TLS. Il y a déjà des lignes (commentées) dans le fichier de configuration par défaut pour utiliser le serveur LDN.

Par contre, il ne gère par le cache et la vérification DNSSEC. Pour profiter de ses fonctionnalités, il faut mettre un autre resolver (Unbound, Knot Resolver) avant lui.

Tunnel TLS

Une autre solution consiste à utiliser des logiciels qui ne gèrent du DNS/TCP (Unbound, Bind) avec un tunnel TLS (stunnel, socat). Cette approche était justifiée avant que le support de DNS/TLS ne soit répandu mais de nos jours c’est un peu du bricolage.

Et DNSSEC dans tout ça ?

La vérification DNSSEC permet de vérifier que la réponse n’a pas été modifiée/falsifiée mais ne permet pas d’empêcher la surveillance des requêtes DNS effectuées.