La Fibre

Télécom => Réseau => reseau TCP/IP / Fonctionnement des réseaux => Discussion démarrée par: Leon le 10 novembre 2012 à 11:03:27

Titre: DNS personnalisé pour réseau privé
Posté par: Leon le 10 novembre 2012 à 11:03:27
Bonjour à tous,

C'est le sujet d'à côté sur les DNS qui m'a fait penser à ça.

J'aimerai bien mettre en place sur mon PC ou sur mon réseau un système qui renvoie l'intégralité des requetes DNS d'un domaine vers une partie du réseau privé, avec un DNS privé. Mais je ne voudrais pas que le PC ait systématiquement à interroger ce DNS privé. Pourquoi? Parce que c'est un truc de test, qu'il est souvent éteint, et rarement fiable. Je ne voudrais pas non plus que ça ralentisse la navigation sur des sites standards.

Autre contrainte, et non des moindres: le "domaine DNS" en question sera présent sur des DNS publics, mais je souhaite "leurer" mon PC pour qu'il interroge le DNS privé, local, pour ce domaine, et uniquement pour ce domaine. Donc déclarer en DNS secondaire mon DNS privé ne suffira pas.

Je tourne sous Windows, mais j'ai aussi une petite carte de développement sous Linux (FoxBoard) qui aurait besoin, à terme, de ce genre de bidouille.

J'avais pensé au fichier "Hosts", mais malheureusement, j'ai l'impression que le fichier Hosts ne prends que les adresses IP. Il est impossible de déclarer des renvoi de type "CNAME", au moins sous Windows.

J'ai pensé aussi à déclarer un DNS spécifique pour une connexion (Ethernet) spécifique. Mais là, je ne comprends pas comment Windows fonctionne quand c'est comme ça. Comment il priorise les différentes entrées DNS de différentes connexions.

Donc est-ce que quelqu'un aurait une idée pour résoudre ce problème qui semble pourtant pas si compliqué?
Merci d'avance à tous!

Leon.
Titre: DNS personnalisé pour réseau privé
Posté par: corrector le 10 novembre 2012 à 18:22:09
Je ne vois pas trop où tu souhaites aller (par opposition à comment tu souhaites y arriver).
Titre: DNS personnalisé pour réseau privé
Posté par: Leon le 10 novembre 2012 à 20:26:23
Ma question n'est pas claire? Je vais essayer de remonter au niveau du "besoin", et pas de la solution.

Je veux par exemple que toutes les requetes vers "lafibre.info" (c'est un exemple) depuis mon PC  arrivent vers un serveur DNS privé, qui répondra des adresses privées, sur une plage 10.x.x.x. Alors que Lafibre.info existe bel et bien sur les DNS publics. Je veux ainsi pouvoir "détourner" les requêtes DNS qui appellent "lafibre.info". Que ça soit "www.lafibre.info" ou "mail.lafibre.info", qui doivent aller vers 2 machines différentes.

En fait, il faut imaginer un réseau privé de bonne taille, avec plusieurs sous réseaux, chacun ayant son propre accès à Internet avec sa Box-NAT. Je veux que chaque machine puisse avoir accès facilement à d'autres machines, sur d'autres sous-réseaux privés, tout en conservant un accès normal à Internet.

Alors, faisable, ou pas?

De même, j'aimerai vraiment comprendre comment ça fonctionne un PC connecté à 2 réseaux différents, dont chaque connexion possède ses propres DNS, qui sont différents. En effet, on peut déclarer autant de serveur DNS que de connexion Ethernet (par carte réseau). Et même 2 par connexion Ethernet (primaire/secondaire). Quelqu'un sait répondre à cette question?

Leon.
Titre: DNS personnalisé pour réseau privé
Posté par: seb le 10 novembre 2012 à 21:29:39
Ce que tu cherches à faire me semble assez trivial à implèmenter avec BIND, et le mécanisme des "vues" (dont il a d'ailleurs été question dans un fil à côté).
Je l'utilise par exemple chez moi pour que le domaine le-seb.net, que j'auto-héberge, soit résolu avec des adresses privées depuis mon réseau local :
view "lan" {
        match-clients { 127.0.0.1; 192.168.1.0/24; };  // Adresses IP du LAN
        recursion yes;  // La vue privée résout tous les domaines

        include "/etc/bind/named.conf.default-zones";

        zone "le-seb.net" {
                type master;
                file "/etc/bind/db.lan.le-seb.net";
        };

        zone "1.168.192.in-addr.arpa" {
                type master;
                file "/etc/bind/db.lan.le-seb.net.rev";
        };
};


view "wan" {
        match-clients { any; };  // Autres adresses IP = Internet
        recursion no;  // La vue publique ne résout que le domaine le-seb.net

        zone "le-seb.net" {
                type master;
                file "/etc/bind/db.wan.le-seb.net";
                allow-transfer { 217.70.177.40; };  // Serveur DNS secondaire hébergé par Gandi
        };
};


Pour te donner une idée de ce que ça peut donner dans les faits :
db.lan.le-seb.net:  www    CNAME    master.le-seb.net.  // Adresse IP privée du nœud maître du cluster hébergeant le serveur web
db.wan.le-seb.net:  www    CNAME    9box.le-seb.net.    // Adresse IP publique de ma neufbox, qui redirige le trafic web vers le nœud maître du cluster


Mais bon, si tu ne veux/peux pas faire tourner un serveur DNS en permanence chez toi, je ne vois pas bien comment tu pourrais t'en sortir, à moins de bricoler un truc à base de fichier hosts.
Titre: DNS personnalisé pour réseau privé
Posté par: thenico le 11 novembre 2012 à 00:12:55

J'ai pensé aussi à déclarer un DNS spécifique pour une connexion (Ethernet) spécifique. Mais là, je ne comprends pas comment Windows fonctionne quand c'est comme ça. Comment il priorise les différentes entrées DNS de différentes connexions.


Windows prends les DNS associé à l'interface ayant une route par défaut.

Si tu as une édition serveur, installe le serveur DNS de Microsoft, met 127.0.0.1 comme serveur DNS, configure qui sont les resolveurs DNS upstream (parce que résoudre à partir des root servers, c'est lent !) et crée la zone locale qui t'interresse.

C'est aussi facilement faisable avec unbound, un peu plus chiant avec bind9, doit être faisable avec dnsmasq ...
Titre: DNS personnalisé pour réseau privé
Posté par: seb le 11 novembre 2012 à 02:57:52
(parce que résoudre à partir des root servers, c'est lent !)
C'est forcèment moins efficace, puisqu'il n'y a pas des centaines de milliers d'abonnés derrière pour maintenir les caches à jour.
Mais franchement, à l'usage, c'est loin d'être évident.

Quelques exemples de durées de téléchargement de pages web complètes (wget -p via DNS SFR / via DNS perso) :
www.kawasaki.fr (http://www.kawasaki.fr) : 0m1.553s / 0m1.623s
www.lasvegas.com (http://www.lasvegas.com) : 0m2.363s / 0m2.589s
www.lapresse.ca (http://www.lapresse.ca) : 0m3.477s / 0m3.947s
www.portugal.gov.pt (http://www.portugal.gov.pt) : 0m14.037s / 0m11.492s  (ce n'est pas une erreur : ça a été plus long via SFR)
www.muskogeephoenix.com (http://www.muskogeephoenix.com) : 0m1.234s / 0m1.405s
www.saopaulofc.net (http://www.saopaulofc.net) : 0m2.132s / 0m2.685s

J'ai volontairement choisi des sites sur lesquels j'étais certain de ne jamais avoir mis les pieds, histoire que mon serveur DNS soit forcé de résoudre les noms présents sur les pages.

Le plus gros écart mesuré ici en défaveur de la résolution via les serveurs racine est de l'ordre d'une demie seconde.
Je ne sais pas pour vous, mais moi je supporte ça sans aucun problème, dans la mesure où je vais en passer au moins trente à lire la page ...   ;)

Après, c'est vrai que si tout le monde se met à faire comme moi, ça va être un beau bordel.  ???
Titre: DNS personnalisé pour réseau privé
Posté par: Leon le 11 novembre 2012 à 08:12:12
Merci à tous les 2 pour vos réponses.
Donc si je comprends bien, la seule solution est d'installer un petit serveur DNS sur mon PC (de préférence), ou sur une machine du réseau tout le temps allumée (ce qui n'existe pas chez moi). Tous les logiciels de serveurs DNS que vous citez (unbound, bind9, dnsmasq) permettent de faire ça? Du détournement d'un domaine complet? Sans trop se prendre la tête?


Citer
Ce que tu cherches à faire me semble assez trivial à implèmenter avec BIND
Seb, quand tu nous dit que "c'est trivial", en mettant un tas de code de config incompréhensible pour le commun des mortels, c'est de la provoc? J'arrive pas à comprendre... Question bête et innoncente, pour lever toute ambiguité... Parce que ça surprend, dans ton post.


Par rapport à ça:
Citer
(parce que résoudre à partir des root servers, c'est lent !)
Après, c'est vrai que si tout le monde se met à faire comme moi, ça va être un beau bordel.  ???
J'avais même pas compris que dans la config de Seb, tu faisais appel aux serveurs racine. Où est-ce qu'on voit ça dans le fichier de config de Seb?

Où est-ce que tu déclares les adresses des serveurs DNS, dans ton fichier de config? DNS racine? DNS fournisseur d'accès?

Pour te donner une idée de ce que ça peut donner dans les faits :
db.lan.le-seb.net:  www    CNAME    master.le-seb.net.  // Adresse IP privée du nœud maître du cluster hébergeant le serveur web
db.wan.le-seb.net:  www    CNAME    9box.le-seb.net.    // Adresse IP publique de ma neufbox, qui redirige le trafic web vers le nœud maître du cluster
Là, j'ai rien compris, mais alors rien du tout.  ??? Si tu pouvais t'adapter à mon niveau dans tes explications, stp? C'est quoi ta citation en bleu? Une requête? De qui? Pourquoi ça répond ça? A quoi correspond db.lan et db.wan, que je n'ai jamais vu auparavant?

Leon.
Titre: DNS personnalisé pour réseau privé
Posté par: Nico le 11 novembre 2012 à 08:16:25
Donc si je comprends bien, la seule solution est d'installer un petit serveur DNS sur mon PC (de préférence), ou sur une machine du réseau tout le temps allumée (ce qui n'existe pas chez moi).
Si tu es prêt à mettre ~40€ dans cette histoire, tu peux acheter un Raspberry Pi. Ça fait tourner ce genre de chose (et plein d'autres) sans aucun soucis.
Titre: DNS personnalisé pour réseau privé
Posté par: Leon le 11 novembre 2012 à 08:23:27
Windows prends les DNS associé à l'interface ayant une route par défaut.
Ca veut dire que pour les interfaces Ethernet qui n'ont pas de "passerelle par défaut", le DNS renseigné ne sert à RIEN? Dans ce cas, pourquoi permettre de la déclarer?

Tiens, une autre question, sur cette piste. Si j'accepte que l'utilisateur doive rentrer une adresse différente pour accéder aux serveurs internes (par exemple lafibre.info.toto au lieu de lafibre.info), est-ce qu'il suffit de déclarer un serveur DNS local en DNS secondaire (tertiaire)? Les 2 premiers serveurs ne sachant pas résoudre, j'ai pensé que la requête serait dirigée "naturellement" vers le 3ieme. Est-ce que ça fonctionne aussi si le serveur DNS est sur une interface Ethernet "privée" différente de l'interface ethernet "publique" qui voit la "passerelle par défaut"?

Merci d'avance pour votre aide. C'est pas facile de bien comprendre comment tout ça fonctionne.

Leon.
Titre: DNS personnalisé pour réseau privé
Posté par: Leon le 11 novembre 2012 à 08:26:40
Si tu es prêt à mettre ~40€ dans cette histoire, tu peux acheter un Raspberry Pi. Ça fait tourner ce genre de chose (et plein d'autres) sans aucun soucis.
En fait, je suis plus électronicien-bidouilleur que développeur soft. Mes prochaines bidouilles embarqueront un truc encore plus simple que la carte Raspberry-Pi. C'est la carte "ARIA" d'Acmesystems, voir le lien ci dessous.
http://www.acmesystems.it/aria (http://www.acmesystems.it/aria)

Leon.
Titre: DNS personnalisé pour réseau privé
Posté par: vivien le 11 novembre 2012 à 09:18:27
Windows et Linux envoient les requêtes vers le même serveur DNS quel que soit l'interface utilisé.

Si plusieurs interface ont plusieurs serveurs DNS, alors ils se rajoutent en DNS supplèmentaire.

Pas de souci pour joindre le serveur DNS si la table de routage est bien définie.
Titre: DNS personnalisé pour réseau privé
Posté par: Leon le 11 novembre 2012 à 09:25:33
Donc si je comprends bien: tous les serveurs DNS de toutes les interfaces sont potentiellement utilisables. Et le système d'exploitation les interroge les uns à la suite des autres, et s'arrête au premier qui répond. Et dans l'ordre, le système d'exploitation interroge d'abord les DNS déclarés dans l'interface qui a la "route par défaut", puis les DNS des autres interfaces.
Et un serveur DNS localisé sur une partie du réseau (privée) peut très bien répondre une adresse IP localisée sur une autre partie du réseau (public), accessible via une autre interface Ethernet.
C'est bien ça? Ou je me trompe quelque part?

Si c'est ça, ça peut certainement me simplifier la vie, si j'accepte de taper une adresse non déclarée en DNS publics pour accéder aux services du réseau privé.

Leon.
Titre: DNS personnalisé pour réseau privé
Posté par: vivien le 11 novembre 2012 à 10:38:19
C'est bien ça : Windows va toujours vers le DNS de l'interface par défaut en premier, quel que soit l'interface (en fait il ne sait pas avant la réponse du DNS que le flux va passer sur une autre interface)

Si c'est ça, ça peut certainement me simplifier la vie, si j'accepte de taper une adresse non déclarée en DNS publics pour accéder aux services du réseau privé.
Non car le premier DNS va répondre que le site n'exite pas et donc il n'ira pas voire le second serveur DNS.

Il va voir le second serveur DNS si le premier est en panne (absence de réponse avant expiration du time-out)
Titre: DNS personnalisé pour réseau privé
Posté par: thenico le 11 novembre 2012 à 10:49:16
Tous les logiciels de serveurs DNS que vous citez (unbound, bind9, dnsmasq) permettent de faire ça? Du détournement d'un domaine complet? Sans trop se prendre la tête?

Cela va d'un argument (dnsmasq) à une dizaine de ligne (bind9).

Pour unbound, c'est assez simple:
Citer
server:
        # a number of locally served zones can be configured.
        #       local-zone: <zone> <type>
        #       local-data: "<resource record string>"
        # o deny serves local data (if any), else, drops queries.
        # o refuse serves local data (if any), else, replies with error.
        # o static serves local data, else, nxdomain or nodata answer.
        # o transparent gives local data, but resolves normally for other names
        # o redirect serves the zone data for any subdomain in the zone.
        # o nodefault can be used to normally resolve AS112 zones.
        # o typetransparent resolves normally for other types and other names
        #
        # defaults are localhost address, reverse for 127.0.0.1 and ::1
        # and nxdomain for AS112 zones. If you configure one of these zones
        # the default content is omitted, or you can omit it with 'nodefault'.
        #
        # If you configure local-data without specifying local-zone, by
        # default a transparent local-zone is created for the data.
        #
        # You can add locally served data with
        # local-zone: "local." static
        # local-data: "mycomputer.local. IN A 192.0.2.51"
        # local-data: 'mytext.local TXT "content of text record"'
        #
        # You can override certain queries with
        # local-data: "adserver.example.com A 127.0.0.1"
        #
        # You can redirect a domain to a fixed address with
        # (this makes example.com, www.example.com (http://www.example.com), etc, all go to 192.0.2.3)
        # local-zone: "example.com" redirect
        # local-data: "example.com A 192.0.2.3"
 

2 lignes pour rediriger un domaine entier vers une IP locale
Titre: DNS personnalisé pour réseau privé
Posté par: seb le 11 novembre 2012 à 14:02:27
Seb, quand tu nous dit que "c'est trivial", en mettant un tas de code de config incompréhensible pour le commun des mortels, c'est de la provoc?
Non, désolé, c'est sans doute une simple déformation professionnelle.
C'est trivial dans le sens où si tu sais déjà comment gérer des zones DNS avec BIND, c'est une simple formalité de les lui faire gérer sous forme de vues.

Je vais détailler ça, histoire d'étancher la soif de curiosité des ceusses que ça intéresse, mais thenico semble avoir une solution (unbound) qui a l'air bien plus simple d'emploi.
 
Dans mon exemple de configuration de BIND, il y a deux vues (voyons ça comme des directives de configuration particulières) :

Le serveur va décider quelle vue utiliser en fonction de l'adresse IP du client qui frappe à la porte (directive match-clients { ... }; dans chaque vue) :

Dans le second cas, le plus simple, qui est celui de la résolution publique :

Dans le premier cas, un brin plus compliqué, qui est celui de la résolution privée :
Si j'avais voulu faire suivre les requêtes non gérées localement par mon serveur DNS aux serveurs de mon FAI, plutôt que d'interroger moi-même les serveurs racine, j'aurais intégré une directive forwarders { ... }; dans la vue "lan".


Au final, cette configuration fait que si tu réclames l'adresse de www.le-seb.net (http://www.le-seb.net), mon serveur DNS va te répondre 93.31.136.109, alors que si c'est moi qui la réclame, depuis mon PC connecté au LAN, il va me répondre 192.168.1.2.
Ça me permet de passer outre certaines limitations de la neufbox, qui ne gère pas le loopback depuis le LAN (je ne peux pas accéder à 93.31.136.109 depuis mon LAN), et aussi de gérer localement tout un tas d'enregistrements DNS qui ne sont pas visibles (et de toute façon non routables) depuis Internet, sans avoir à utiliser un autre domaine DNS.

Bref, ça ressemble pas mal à ce que tu cherches à faire.
Titre: DNS personnalisé pour réseau privé
Posté par: Leon le 11 novembre 2012 à 19:35:47
Merci à tous pour vos explications, c'est très intéressant. On apprends vraiment des choses sur ce forum.  :)

Bon, à priori, je n'ai besoin que de leurer des entrées DNS depuis l'intérieur de mon réseau, pas de répondre à des requêtes DNS en provenance de l'extérieur. Donc ma conf sera certainement plus simple que la tienne, Seb.

Une question pour Seb : pourquoi ne mets-tu pas directement les adresses IP internes et externes en entrée "A" dans ton fichier de configuration (pour www par exemple)? Pourquoi utilises-tu des entrées "CNAME", quel est l'intérêt?

Et une autre question, sans doute idiote : Est-ce qu'il est possible, pour un serveur DNS public d'un domaine particulier (serveur et domaine sur lesquels j'aurais la main) de répondre pour certaines entrées de ce domaine, des adresses privées 10.x.x.x? Je sais, c'est délirant; mais par curiosité, est-ce que ça peut fonctionner? Est-ce que le serveur DNS récursif du FAI (public) qui recevrai, en réponse de mon serveur DNS public de mon domaine, une adresse privée 10.x.x.x, est-ce qu'il la renvoie au PC de l'utilisateur final? Ou est-ce qu'il y a une "protection" pour éviter de diffuser des adresses privées?

Leon.
Titre: DNS personnalisé pour réseau privé
Posté par: corrector le 11 novembre 2012 à 19:56:32
Bonsoir,

Est-ce que les serveurs DNS récursifs de
- Orange
- SFR
- Free
- Bouygues Telecom
- Numericable
- Adeli
- K-Net

permettent les enregistrements spécifiant des IP privées (RFC 1918) ?

Pour le savoir, allez sur http://corrector.lafibre.info/ (http://corrector.lafibre.info/)
Bon, personne ne m'écoute, c'est un scandaaaaale...
Titre: DNS personnalisé pour réseau privé
Posté par: Leon le 11 novembre 2012 à 20:03:25
Bon, personne ne m'écoute, c'est un scandaaaaale...
D'un autre côté, s'il fallait lire TOUS les posts de ce forum qui devient de plus en plus célèbre et fréquenté...  ;)

OK, ça répond bien à la question : certains DNS récursif (Free) bloquent ce genre d'entrée, mais pas tous. Merci.

Leon.
Titre: DNS personnalisé pour réseau privé
Posté par: seb le 11 novembre 2012 à 20:25:19
Une question pour Seb : pourquoi ne mets-tu pas directement les adresses IP internes et externes en entrée "A" dans ton fichier de configuration (pour www par exemple)? Pourquoi utilises-tu des entrées "CNAME", quel est l'intérêt?
Pourquoi ?
Parce que je le peux ! ;)

Désolé, mais je n'ai pas de réponse plus sensée à te faire dans mon cas particulier.
Ça m'évitera juste de changer une adresse IP de plus dans ma configuration le jour où je devrai migrer vers un autre FAI ou vers un hébergeur.
Titre: DNS personnalisé pour réseau privé
Posté par: thenico le 11 novembre 2012 à 20:54:27
Bon, personne ne m'écoute, c'est un scandaaaaale...

Le paramétrage par défaut d'Unbound filtre les enregistrements pointant vers des IP privé.
 
Titre: DNS personnalisé pour réseau privé
Posté par: corrector le 11 novembre 2012 à 20:56:46
En vertu de quoi?
Titre: DNS personnalisé pour réseau privé
Posté par: thenico le 11 novembre 2012 à 22:00:55
Est-ce que tu connais une raison valable pour qu'un nom externe puisse pointer vers une adresse interne (sans configuration explicite de l'administrateur) ?
A l'inverse, rendre impossible le DNS rebinding permet de sécuriser pas mal d'application par forcement à jour.


Avoir un something.priv.example.com qui pointe vers de l'interne est possible mais il faut indiquer que priv.example.com est "de confiance".
Titre: DNS personnalisé pour réseau privé
Posté par: butler_fr le 19 novembre 2012 à 10:57:30
Salut!

je remonte le sujet car je suis actuellement entrain de monter mon propre DNS:
donc le contexte:
j'ai un pc qui tourne sous windows server 2012:
role Active Directory et DNS d'installés, tout marche très bien sauf que je n'arrive pas à mettre la main sur le paramètre désignant les DNS sources des réponses que me fourni mon serveur, il répond bien mais je ne sais pas d'ou ça vient et ça m’embête....

donc si vous avez une idée ^^

merci a+
Titre: DNS personnalisé pour réseau privé
Posté par: thenico le 19 novembre 2012 à 13:21:23
Si tu n'as pas configuré les redirecteurs, le serveur DNS fournis par Windows fait la résolution d'appartir les root servers.
Titre: DNS personnalisé pour réseau privé
Posté par: butler_fr le 19 novembre 2012 à 14:25:42
justement c'est ça que je cherche à modifier mais je ne trouve pas ou on peut le faire... (ça doit ètre un truc tout con mais je vois pas....)
Titre: DNS personnalisé pour réseau privé
Posté par: thenico le 19 novembre 2012 à 16:47:17
L'onglet gérant les glue root-server:
(https://lafibre.info/testdebit/windowsVista/201211_serveur_dns_microsoft_windows_serveur.png)
Titre: DNS personnalisé pour réseau privé
Posté par: butler_fr le 19 novembre 2012 à 17:39:29
okay niquel merci beaucoup!