Router les requetes DNS du reseau local

Le problème exposé dans ce sujet a été résolu.

Bonjour a tous,

J’ai un petit soucis avec la configuration de mon serveur DNS sur le reseau local. Ce que j’essaye de faire c’est de capturer toutes les requetes DNS faites sur mon reseau local pour les rediriger vers mon serveur DNS qui est egalement present sur le reseau local. Le but final pour moi c’est de faire de la re-ecriture de DNS pour que mes services locaux repondent a un DNS et pas uniquement a leur IP (beaaaaaucoup trop d’IP a retenir).

Je dispose d’un routeur edge fourni par mon FAI qui refuse de me fournir acces a l’administration1. Du coup, je n’ai pas access a la configuration du serveur DHCP ni du firewall du routeur. Je precise dans le cas ou cela serait la cause de mon probleme.

Ma topologie simplifiee au maximum consiste en:

  • Un routeur edge qui a un port WAN et un port LAN (192.168.0.0/24 avec un gateway 192.192.0.1)
  • Le port LAN est connecte a un switch Mikrotik sous RouterOS (ce modele)
  • Tous les appareils sont connectes au switch par la suite:
    1. Plusieurs ordinateurs, telephones et autres appareils qui se connectent via DHCP pour la plupart.
    2. Un serveur qui sert plusieurs services sur des adresses fixes locales

En particulier, l’un de ces services un serveur DNS (192.168.0.DNS).

Prenons un exemple d’un service quelconque 192.168.0.A qui dispose d’une regle de re-ecriture DNS vers monservice.chezmoi. Le serveur DNS en lui meme marche correctement (s’il est defini manuellement sur un appreil quelconque, il repond bien. Idem, un dig monservice.chezmoi @192.168.0.DNS resoud proprement vers 192.168.0.A).

Le soucis c’est le routage des requetes. Pour cela, je voulais passer par le switch car il tourne sous RouterOS et dispose de fonctionalites typiques d’un routeur, et evidemment, tous mes appareils passent par lui. Pour cela, dans le firewall, j’ai ajoute une regle dst-nat pour router toutes les requetes avec source et destination differente de 192.168.0.DNS vers le port 53, UDP et TCP (bref les requetes DNS) vers 192.168.0.DNS. Puis j’ai ajoute un regle masquerade pour toutes ls sources 192.168.0.0/24 -> 192.168.0.DNS.

Cela ressemble a cela:


    /ip firewall nat
    add chain=dstnat action=dst-nat to-addresses=192.168.0.120 protocol=udp src-address=!192.168.0.120 dst-address=!192.168.0.120 dst-port=53
    add chain=dstnat action=dst-nat to-addresses=192.168.0.120 protocol=tcp src-address=!192.168.0.120 dst-address=!192.168.0.120 dst-port=53
    
    add chain=srcnat action=masquerade protocol=udp src-address=192.168.0.0/24 dst-address=192.168.0.120 dst-port=53
    add chain=srcnat action=masquerade protocol=tcp src-address=192.168.0.0/24 dst-address=192.168.0.120 dst-port=53

Malheureusement cela ne fonctionne pas. Je vois quelques paquets routes mais assez marginalement (239 apres plusieurs heures). Je ne sais pas trop comment debuger ni ce que je pourrais faire pour resoudre mon probleme.

Dans le pire des cas je pensais a ajouter un vrai routeur entre le routeur edge et le switch et faire du double NAT pour completement eviter a mon FAI d’avoir acces a mon NAT (donneriez-vous la clef de chez vous a votre electricien sous pretexte qu’il devra peut-etre faire une intervention en cas de probleme technique?). Mais a priori ce n’est pas une solution super sexy. :x


  1. par contre il fait de l’injection de paquets, laisse l’access au port 80 de l’interface admin accessible depuis l’IP fixe et est en situation de monopole avec des coupures regulieres. La joie. Bref. :x

Salut,

Première option, tu pourrais configurer ton serveur DNS manuellement sur tes appareils. Un peu plus de travail que d’utiliser DHCP mais ça a l’air d’être le plus propre dans ton cas.

Ensuite, comme tes appareils et le DNS sont sur le même réseau local, a priori ton switch va switcher les paquets : il voit que c’est pas sa mac de destination, donc il switch le paquet qui ne remonte pas dans la stack jusqu’au NAT. Pour pallier à ça je pense que mettre le DNS dans un autre sous réseau avec un VLAN et adapter la config pourrait marcher (?). Ça revient un peu a ton idée de double NAT au final.

Pour debugger, je ne connais pas RouterOS mais j’imagine que tu peux écouter sur les interfaces, voire peut être même tracer certains paquets ? Pour voir comment ils sont forwardés. Idem sur le serveur DNS pour voir s’il reçoit les requêtes puis s’il y répond.

Édit: en parcourant la Doc de routerOS, c’est en fait possible de trigger la chaîne pre-routing même pour les paquets switchés: il faut utiliser l’option use-ip-firewall dans les paramètres de bridge (par contre je saurais pas dire où ça se met dans RouterOS haha)

+0 -0

Première option, tu pourrais configurer ton serveur DNS manuellement sur tes appareils. Un peu plus de travail que d’utiliser DHCP mais ça a l’air d’être le plus propre dans ton cas.

Impossible et fastidieux. Impossible parce que j’ai toujours de nouveaux appareils qui arrivent et sortent du reseau. Fastidieux parce que j’ai plusieurs centaines de services a configurer dans ce cas la.

Ensuite, comme tes appareils et le DNS sont sur le même réseau local, a priori ton switch va switcher les paquets : il voit que c’est pas sa mac de destination, donc il switch le paquet qui ne remonte pas dans la stack jusqu’au NAT. Pour pallier à ça je pense que mettre le DNS dans un autre sous réseau avec un VLAN et adapter la config pourrait marcher (?). Ça revient un peu a ton idée de double NAT au final.

Le switch gere le VLAN tagging et l’objectif a terme c’est effectivement d’avoir plusieurs sous-reseaux et des VLAN avec un configuration par (sous-reseau, VLAN). Mais pour le coup, je ne vois pas pourquoi l’ajout d’un VLAN changerait quoi que ce soit si je n’arrive pas a le faire sans VLAN. Desole de la question, je suis une brele en reseau.
D’autant plus que je n’ai pas acces au routeur qui contient le serveur DHCP et probablement ses propres tables DNS.

Pour debugger, je ne connais pas RouterOS mais j’imagine que tu peux écouter sur les interfaces, voire peut être même tracer certains paquets ? Pour voir comment ils sont forwardés. Idem sur le serveur DNS pour voir s’il reçoit les requêtes puis s’il y répond.

Le probleme c’est que je suis une vraie bille en reseau et donc j’ai un peu de mal a savoir comment faire ce genre de manip’. Si tu as une bonne reference sur le sujet, je suis preneur. Comme je l’ai dis dans le message initial, le serveur lui-meme repond correctement aux requetes, donc mon soucis semble plus le routage.

Édit: en parcourant la Doc de routerOS, c’est en fait possible de trigger la chaîne pre-routing même pour les paquets switchés: il faut utiliser l’option use-ip-firewall dans les paramètres de bridge (par contre je saurais pas dire où ça se met dans RouterOS haha)

Merci, je regarde ca! Ca pourrait effectivement juste venir d’une option a active.

Ensuite, comme tes appareils et le DNS sont sur le même réseau local, a priori ton switch va switcher les paquets : il voit que c’est pas sa mac de destination, donc il switch le paquet qui ne remonte pas dans la stack jusqu’au NAT. Pour pallier à ça je pense que mettre le DNS dans un autre sous réseau avec un VLAN et adapter la config pourrait marcher (?). Ça revient un peu a ton idée de double NAT au final.

Le switch gere le VLAN tagging et l’objectif a terme c’est effectivement d’avoir plusieurs sous-reseaux et des VLAN avec un configuration par (sous-reseau, VLAN). Mais pour le coup, je ne vois pas pourquoi l’ajout d’un VLAN changerait quoi que ce soit si je n’arrive pas a le faire sans VLAN. Desole de la question, je suis une brele en reseau.
D’autant plus que je n’ai pas acces au routeur qui contient le serveur DHCP et probablement ses propres tables DNS.

Concrètement si un appareil est sur le même sous-réseau que ta gateway, il va envoyer ses paquets L2 à l’adresse de la gateway directement. Par défaut, un switch devrait juste voir que c’est pas pour lui et le forwarder, vu que le NAT arrive au L3/L4. Mais visiblement ils proposent l’option use-ip-firewall pour que le switch regarde quand même les paquets. Concrètement, ton cas est décrit ici: lien. Tu cherches à atteindre le 3D de leur schéma.

D’ailleurs, contrairement à ce que je disais pour le faire au niveau IP, c’est pas le serveur DNS mais bien les autres hôtes qu’il faut mettre dans un autre sous-réseau, comme ça le switch deviendrait routeur (et gateway) dans ce cas les paquets remonteraient dans la stack IP et le NAT serait appliqué).

Pour debugger, je ne connais pas RouterOS mais j’imagine que tu peux écouter sur les interfaces, voire peut être même tracer certains paquets ? Pour voir comment ils sont forwardés. Idem sur le serveur DNS pour voir s’il reçoit les requêtes puis s’il y répond.

Le probleme c’est que je suis une vraie bille en reseau et donc j’ai un peu de mal a savoir comment faire ce genre de manip’. Si tu as une bonne reference sur le sujet, je suis preneur. Comme je l’ai dis dans le message initial, le serveur lui-meme repond correctement aux requetes, donc mon soucis semble plus le routage.

Je pense que tu peux commencer par le Packet Sniffer pour regarder le traffic, et ensuite activer les logs du NAT pour voir les hits plus clairement.

J’ai bien trouve dans le menu Bridge > Settings une option "Use IP Firewall" qui n’etait pas cochee.

Par contre, cela n’a rien change: rien n’est route proprement. Les regles que j’ai ajoute au Firewall > NAT correspondent au schema (interception de dst-nat).

J’ai vu un onglet "NAT" sous le menu Bridge mais celui-ci semble operer au niveau des addresses MAC uniquement. Je ne peux pas faire de routage IP ce qui me semble etrange. Toujours est-il que l’option Use IP Firewall devrait rendre mes regles operantes.

Je vais creuser un peu avec Packet Sniffer et essayer d’acceder aux logs du NAT. J’ai ajoute des prefix pour les log pour chaque regle mais je ne vois rien dans les logs. Il y a peut-etre un mode debug avec plus de verbosite, ou alors mes regles sont peut-etre juste fausses.

Je continue de creuser des que j’ai un moment.

Merci de ton aide.

Voici mes regles de firewall. Le DNS est 192.168.0.120.

Firewall rules

Dans les logs, je ne peux voir que des requetes depuis 192.168.0.111 qui est une machine que je n’ai pas evoque jusque la (un Raspberry Pi avec Home Assistant et connecte au switch directement sur un SFP).

C’est tres etrange que seul cet appareil apparaisse dans les logs (il n’a aucune configuration particuliere au niveau du DNS). Ensuite, la premiere ligne des logs semble indique que la requete etait a destination de 192.168.0.114 qui est… l’interface web du switch. Donc je suppose que la requete 192.168.0.114:53 est une requete DNS directement au serveur DNS du switch (qui comme il est en mode bridge ne devrait pas etre pris en compte je suppose).

Firewall Log
Firewall Log
+0 -0

J’ai trouve pourquoi activer l’option "Use IP Firewall" n’est pas suffisant: https://forum.mikrotik.com/viewtopic.php?t=144890#p712998

Il faut que je desactive le hardware offloading sur le port qui va au routeur sinon, cela ne passe pas par le CPU et les regles ne sont pas appliquees de la meme maniere en mode "bridge".

Maintenant je vois bien des milliers de lignes dans les logs mais le DNS ne repond pas. La petite avancee c’est que je vois maintenant le switch comme client du serveur DNS. Du coup, cela me fait dire que ce sont mes regles NAT qui sont mauvaises.

Je vais continuer a chercher, je touche au but. x)

Sauf si j’ai manque un truc, je n’ai qu’un seul bridge avec tous les ports dedans. J’ai un ethernet sur le LAN, 5 SFP et 4 SFP+. Tous dans le meme bridge.

Par contre, j’ai deux interfaces: ethernet dans une interface WAN et les autres dans une interface LAN.

C’est la configuration par defaut.

Je pense que je suis bon dans ce cas. Il faut juste que je revise mes regles NAT.

J’ai reecrit mes regles de zero. J’arrive a avoir tous les paquets DNS envoyes au serveur DNS local. Mes clients ont bien un acces a internet via un navigateur avec une resolution DNS qui fonctionne. MAIS La reecriture ne semble pas etre prise en compte.

La reecriture apparait dans les logs: DNS

J’en viens a me demander si la reponse du DNS local n’est pas perdue ou reecrite par le DNS du routeur ou quelque chose du genre.

Mes regles: rules

(Les deux regles de masquarade ne sont pas actives, elles servent juste a ne pas voir l’IP du client mais uniquement l’IP du switch au niveau du DNS de ce que j’observe).

Grosso modo, je route toute requete DNS qui n’a pas provenance ou destination mon server DNS vers le serveur DNS. Et c’est tout. Cela devrait etre suffisant non?

Je vois l’evenement dans les logs. En fait j’ai meme decoupe cela en deux temps: une regle mangle sur les nouvelles connections qui marque le paquet "via-dns" et ensuite les regles NAT sur les paquets marques.

Avec et sans marquage, je vois les evenements dans les logs mais mon navigateur (sur le reseau local donc) ne repond pas.

Je pensais que le routage NAT sur bridge etait courant, non?

+0 -0

Ok. Dans ce cas il faut regarder les paquets qui arrivent sur ton PC avec wireshark, et que la réécriture du paquet retour a été correcte. Édit: et vérifier que le DNS retourne bien la bonne IP

Perso je trouve ça pas propre du tout de faire du NAT sur un bridge, c’est faire du processing L3 alors que le paquet L2 était pas pour le bridge. Je saurais pas dire si c’est courant pour autant. Le fait qu’il faille désactiver l’accéleration matérielle et activer une option dédiée me laisse penser que c’est pas le cas.

+0 -0

L’IP reecrite est correcte (sur l’image ci-dessus on voit la reecriture de kdm.kinga -> 192.168.0.113).

Je vais checker Wireshark pour voir. Je peux aussi eventuellement mettre une regle NAT pour sniffer les paquets DNS.

Pour ce qui est de la proprete, je dirais que je n’ai pas le choix. Je n’ai pas acces au serveur DCHP, ni a la configuration du edge routeur en general. Il me reste deux solutions:

  1. Utiliser mon switch pour faire du L3/NAT sur le reseau configure par le edge router
  2. Utiliser un autre routeur juste derriere le edge routeur et ensuite travailler directement dans un nouveau reseau. Le probleme c’est celui du double NAT puisque le edge routeur ne peut pas etre mis en mode bridge.

J’ai fais un test hier car ce switch a un mode routeur, mais je dois etre trop mauvais pour proprement configurer la chose, entre relay DHCP, Client DHCP, je me suis un peu perdu et bien que j’ai reussi a configurer un autre reseau 192.168.1.0, je n’arrive pas a avoir acces a internet dessus.

Mon idee dorenavant c’est que si j’arrive a faire cela avec ce switch en mode routeur, j’acheterais un router supplementaire dedie a mettre entre le edge et le switch et je laisserais le switch en mode unmanaged/bridge.

Cela me fait penser qu’au dela de ces petits PoC il me faudrait surtout designer proprement ce que j’essaye d’obtenir au final.

Grosso-modo j’ai plusieurs fonctions:

  • un homelab qui sert beaucoup de services pour toutes les autres fonctions
  • une zone domotique
  • des clients reguliers fixes (PC, telephones, etc.)
  • des clients invites
  • une zone pro pour mon activite professionelle

Physiquement cela passe par:

  • un cluster Proxmox (pour le moment deux noeuds dans le cluster - un dedie NAS et l’autre pour tout le reste)
  • un serveur domotique et des petits appareils IP (WLED, proxy bluetooth, WLAN router dedie, etc.)
  • le edge routeur
  • le switch

Comme je l’ai dis, les fonctions se servent souvent des memes appareils. Par exemple, le homelab pour les experimentations sert aussi pour les services pour mon activite pro (j’ai une zone dev et prod). Le NAS sert aussi bien au homelab, qu’a l’activite pro qu’aux sauvegardes perso des clients reguliers. Certains services sont partages un peu par tout le monde e.g. serveur DNS.

Mon idee originale c’etait d’avoir 4 sous-reseaux:

  • domestique: pas de restriction internet
  • pro: access internet, separation complete des autres reseaux
  • invites: uniquement acces a internet
  • domotique: pas d’acces a internet mais peut acceder au reseau domestique et eventuellement internet via le reseau domestique sur exception (via NAT ou VLAN?)

Avec des VLANs pour chaque sous-reseau, un part sous-reseau sauf pour domestique qui aurait un VLAN de base et un VLAN homelab.

Si tu as des commentaires ou suggestions sur cette organisation, fait toi plaisir!

Oui la réécriture a l’air bien, je pense que ça vaut le coup de vérifier que c’est bien aussi le cas dans le sens retour :)

Je disais que c’était pas trop propre en général, mais je suis d’accord que dans ton cas c’est légitime d’essayer.

Pour le design de ton réseau, je pense que le double NAT est la solution la moins sale. En gros il faut que ton routeur demande un IP au router de ton ISP, qui servira pour le NAT (qu’il faut configurer lui aussi). Malheureusement tu ne pourras pas juste faire relai du DHCP de ta box car il faudrait configurer le serveur DHCP dessus aussi.

Ensuite un sous-réseau par VLAN, avec un DHCP par sous-réseau (probable que RouterOS puisse le gérer) — bonus: tu peux configurer ton DNS ;) Ensuite tu configures bien ton firewall pour implémenter ta segmentation (par exemple, src:pro dst:autres sous-réseaux -> drop) et ça devrait être pas mal !

(remarque: tu peux aussi utiliser des VRF pour isoler des sous-réseaux si c’est supporté par ton routeur, mais c’est sûrement overkill dans ton as)

Ok, donc je resume:

  1. Ma topologie devra ressembler a: Internet <-> [ISP router] <-> [MK/RB router] <-> Tout le reste

  2. Pas de relay DHCP car cela voudrait dire le configurer sur le router de mon FAI auquel je n’ai pas acces.

  3. Il faut que je retire le port eth1 (connecte au router ISP) de mon bridge puis ajouter un client DHCP sur ce meme port pour acquerir une adresse DHCP du serveur DHCP du routeur ISP. Enfin, j’ajoute un ou plusieurs serveur DHCP a mon routeur Mikrotik.

Ca m’a l’air logique et simple mais en fait le diable et dans les details.

VRF est effectivement overkill mais mon but c’est aussi d’apprendre et de m’amuser un peu. Bon, par contre, d’habitude j’evite de le faire sur le reseau justement parce que si je casse des trucs, les autres residents ne sont pas content. x)

EDIT: En fait j’ai reussi de maniere plutot simple! Je pense que mon probleme avant venait d’une sorte de conflit avec les plages d’adresses fournis par mon ISP et ce que j’essayais de configurer. J’ai du mettre un mauvais mask tres certainement. J’essayais de configurer 192.168.1.0 mais un rapide scan sur 192.168.0.0/16 me montre que je peux acceder a beaucoup beaucoup de choses qui semble etre lie a de l’infra reseau.

D’ailleurs est-ce normal que je puisse acceder a cela? o_o A titre d’exemple je peux acceder sur 192.168.1.50:5000 a une interface admin d’un Synology DiskStation alors que je n’ai pas de tel appareil sur mon reseau local…

Ce matin j’ai decide de configure un reseau sur 10.0.0.0/16 et mon access a internet est bien present au sein de ce reseau.

+0 -0

C’est ça, et 4ème étape configurer les NAT et pare-feu sur tes sous réseaux.

Parfait si tu as réussi !

Ça ressemble à un problème de config côté opérateur ça… Du type il y a un routeur avec ton subnet et celui de ton voisin, mais ils vous ont pas mis sur deux VRF différents (justement)…

Cela fonctionne parfaitement!

En fait, j’ai meme un doute sur le fait que cela ne fonctionnait pas auparavant. Sous Windows, tout fonctionnait parfaitement et en particulier les routes reecrites en .local. Par contre, sous Ubuntu, impossible de resoudre .local.

J’ai decouvert que le probleme ne venait pas de mes regles NAT ni d’un probleme avec mon FAI mais de la maniere dont Unbuntu configure resolv.conf par default:

https://askubuntu.com/a/1114887

Je marque le sujet en resolu.

Encore merci de ton aide et de ton temps!

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte