Forum Linux.débutant Problème DHCP - NAT

Posté par  . Licence CC By‑SA.
Étiquettes :
1
12
mai
2014

Bonjour à tous

Je suis un noob en Linux :D. En fait, je découvre Linux depuis une semaine à tout casser. Chez moi, j'avais un Windows Server 2008R2 qui faisait tout un tas de trucs (DHCP, serveur web et FTP, etc). J'en ai pas forcément une grande utilité, mais c'est plutôt pour apprendre, me faire la main etc. Au fur et à mesure je lui rajoute des trucs. Il avait aussi une Active Directory.

Histoire de me lancer dans Linux, j'ai remplacé le 2008 R2 par un Debian, pour qu'il fasse la même chose. Sauf que j'ai un problème que je n'arrive pas à résoudre, j'ai presque tout essayé.

D'abord voici mon architecture :

Titre de l'image

En fait les postes se connectent en wifi à un routeur Netgear Wifi. La fonction DHCP est coupée, et il redirige tout vers le serveur via un système de route. Pourquoi ne pas avoir mis une carte Wifi directement sur le serveur ? Parce que j'en ai pas en rab :D . Ensuite le serveur fait DHCP, et donne internet à tout le monde. Il a 2 carte réseau : 1 connectée au routeur Netgear pour la partie DHCP, 1 connectée à la Freebox pour la partie NAT.

Cela fonctionnait très bien avec le 2008R2.

Actuellement, la partie DHCP fonctionne à peu près (je dis à peu près car les postes clients sous Windows doivent faire un ipconfig /release et un ipconfig /renew pour se connecter, sinon, ils tentent de se connecter avec l'IP fournie par la Freebox (car j'ai réactivé le Wifi de la Free en attendant de finir le serveur).

Nous y voilà enfin, mon problème : il ne veut pas donner internet aux PC. Lui il l'a, mais ne veut pas la partager.

Voici mes différentes configuration :

Fichier interfaces

# Loopback
auto lo
iface lo inet loopback

# Internet -  Netgear
auto eth0
iface eth0 inet dhcp

# Reseau -  N'force
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0

Fichier de conf du dhcp (la 192.168.0.254 est l'adresse de la Freebox)

log-facility local7;


subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.10 192.168.1.20;
  option domain-name-servers 212.27.40.240, 212.27.40.241;
  option domain-name "domaine.bipbip.fr";
  option routers 192.168.0.254;
  option broadcast-address 192.168.1.255;
  default-lease-time 600;
  max-lease-time 7200;
}

Mes cartes sont bien reconnues

root@Serveur-Debian:~# ifconfig | grep Ethernet
eth0      Link encap:Ethernet  HWaddr 00:09:5b:05:c0:32
eth1      Link encap:Ethernet  HWaddr 00:19:66:84:f1:0b
root@Serveur-Debian:~# lspci | grep Ethernet
00:07.0 Bridge: nVidia Corporation MCP61 Ethernet (rev a2)
01:0a.0 Ethernet controller: National Semiconductor Corporation DP83815 (MacPhyter) Ethernet Controller

Pour finir, dans le fichier /etc/default/isc-dhcp-server j'ai bien

INTERFACES="eth1"

J'ai tout essayé, rien à faire. D'après certains le simple fait de renseigner ceci dans le dhcp devrait fonctionner : option routers 192.168.0.254. Ce n'est pas le cas. J'ai essayé de faire un pont entre les 2 carte réseau, pas mieux. J'ai essayé l'IP Masquerade, toujours pas.

Bref, je sèche ! Surtout que j'ai déjà pas mal galéré car une des cartes réseau n'était pas reconnue .

Si vous avez une idée je suis preneur ! Merci !

  • # routes

    Posté par  . Évalué à 1.

    Comment as-tu défini les routes au niveau de la machine debian?

    As-tu fais la jonction entre eth0 et eth1?

    bref, … reste a voir

    tant va la cruche à l'eau qu'à la fin elle t'explose en pleine tête

    • [^] # Re: routes

      Posté par  . Évalué à 1. Dernière modification le 12 mai 2014 à 03:33.

      Voici ce que j'ai comme règles iptables :

      Chain INPUT (policy ACCEPT)
      target     prot opt source               destination
      ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
      ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
      ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:8443
      ACCEPT     all  --  anywhere             anywhere
      ACCEPT     icmp --  anywhere             anywhere
      ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
      ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain
      ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain
      
      Chain FORWARD (policy ACCEPT)
      target     prot opt source               destination
      
      Chain OUTPUT (policy ACCEPT)
      target     prot opt source               destination
      ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
      ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:https
      ACCEPT     all  --  anywhere             anywhere
      ACCEPT     icmp --  anywhere             anywhere
      ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
      ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain
      ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain

      J'ai activé le routage via sysctl -w net.ipv4.ip_forward=1 et le l'IP Masquerade via iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

      Par contre, qu'entends-tu par jonction entre eth0 et eth1 ? Un pont ? Car clairement je pense oublier quelque chose, mais j'ai beau écumer le net, je ne vois pas quoi…

      • [^] # Re: routes

        Posté par  . Évalué à 1.

        Ok c'est du bon tout ça :p

        Par contre, qu'entends-tu par jonction entre eth0 et eth1 ?

        Je suppose qu'il entend l'ip forwarding. Dans le cas bridge, on peut dire grosso-modo que tu n'as plus qu'un réseau (plus besoin de NAT ni de routage).

        Ton problème c'est que la gateway que tu envoie au PC est la freebox alors que tu devrais envoyer l'IP LAN1 de ton serveur DHCP (cf. mon commentaire plus bàs, cas 1) NAT).
        option routers 192.168.0.254; # mauvais

        • [^] # Re: routes

          Posté par  . Évalué à 1. Dernière modification le 12 mai 2014 à 04:32.

          J'oublais, si ça marche toujours pas, donne un coup de iptables -t nat -F; iptables -F pour virer le firewall (tes policy sont en accept donc bon ça ne devrait pas poser de problème… pas très utile non plus :p)

        • [^] # Re: routes

          Posté par  . Évalué à 3.

          je confirme cette reponse,

          il faut changer

          option routers 192.168.0.254;

          par

          option routers 192.168.1.1;

          pour que tes PCs prennent ton linux comme passerelle,
          qui ensuite passera les infos à la freebox.

          le reste est correcte (IP forward et NAT)
          mais les regles de parefeu sont inutiles puisque par defaut, tout est accepté.

  • # .

    Posté par  . Évalué à 1.

    Comme tu le sais probablement, DHCP donne généralement une IP, l'IP de serveurs DNS, une route par défaut et un nom d'hôte. Mais il est possible d'envoyer un peu nimporte quoi comme info, cela va des trucs +/- standardisés (les options citées précedemment, un serveur NFS pour du netboot, NTP, NIS, etc) en passant par des truc complètement custom dont seul toi et le client dhcp connaissent la signification (cf. man dhcp-options, pour info il est possible de scripter le client dhcp ISC pour une flexibilité maximale).

    Résumons: PC ------ DHCP ------ FREEBOX -WAN. De deux choses l'une: NAT ou pas-NAT.

    1) NAT
    Le PC doit recevoir la config suivante:
    IP: dans le LAN1
    Route par défaut: l'addresse du serveur DHCP, dans LAN1.
    Au niveau du serveur DHCP: activer le routage et le masquerading sur l'interface LAN2.

    2) sans NAT
    Le PC reçoit la config suivante:
    IP: dans LAN1
    Route par défaut: IP FREEBOX dans LAN2
    Route pour accéder au LAN2 (ce qui manque dans ta config, sans cela PC ne sait pas comment joindre FREEBOX): IP DHCP LAN1.
    Au niveau de la box DHCP: activer le routage uniquement.

    (Bon de trois chose l'une)
    3) Tu pourrais aussi NATer dans l'autre sens: la freebox sur le LAN2 pour faire "comme si" la freebox est dans le LAN1 vis-à-vis des PC… mais bon là c'est un peu de couper les cheveux en 4 (quoique un bon exercice :p)

    (Et de 4)
    4) BRIDGE. Ben là tout le monde se retrouve dans LAN2, ton DHCP donne des IP dans LAN2 avec comme gateway la freebox. Faire attention à bien couper (ou bloquer au niveau du part-feu) le DHCP de la freebox pour éviter les interférences.

    Pour activer le routage de façon non permanente : echo 1 > /proc/sys/net/ipv4/ip_forwarding (éventuellement faire de même pour ipv6). De façon permanente: éditer le fichier /etc/sysctl.conf et/ou se reporter à la documentation de la distribution.

    Pour le NAT (2): iptable -t nat -A POSTROUTING -o eth0 --source 192.168.1.0/24 -j MASQUERADE

    Pour envoyer la route manquante: google "dhcpd.conf static route" . Faire attention que si tu utilises les "classless static routes", il te faudra aussi ajouter la route par défaut à cette liste. (BTW, tu remarqueras que MS a décidé de faire autrement que tout le monde, tu devrais définir toi même le type et le numéro de l'option dhcp utilisée par MS).

    Ensuite sur le PC, les commandes ping et route (ou leurs équivalents dans le monde MS) devraient te permettre d'avancer le diagnostique. Grosso-merdo il faut vérifier que chaque hote est joignable par les autres.

    ping DHCP/LAN1
    ping DHCP/LAN2
    ping FREEBOX/LAN2
    route show (vérifie que tu aie une route pour LAN2 et une route par défaut).

    Je te conseille aussi d'essayer sans DHCP, en renseignant les IP et les routes manuellement sur le client. Dans ton cas, je suppose que tu n'as juste pas simplement activé le routage au niveau du serveur dhcp (pour router entre le LAN1 et le LAN2) et qu'il te manque une route au niveau des clients pour joindre LAN2 via l'adresse de ton serveur dans LAN1…

    (Note: je fais comme si la borne wifi n'existe pas, il se peut que le problème vienne de là… au pire des cas, tester avec un cable réseau pour l'utiliser comme simple "switch")

  • # Vite fait

    Posté par  . Évalué à 1. Dernière modification le 12 mai 2014 à 04:47.

    C'est à la vas vite ta conf la, et elle respecte pas ton schéma!
    La route donné par dhcp n'est pas la bonne, tu donne celle de la free alors que tu devrais donner l'ip de ta débian, et ensuite configurer debian pour faire du nat via iptable.
    Tu a deux rezo, 192.168.1/24 et 192.168.0/24.

    Je remarque aussi que le domaine.bipbip.fr existe, pour éviter les problèmes fait plutot un domaine.bipbip.lan.

    Allez tous vous faire spéculer.

  • # Merci

    Posté par  . Évalué à 1.

    Alors j'ai suivi vos conseils, et cela fonctionne impec (y compris le fait que les clients Windows devaient faire un ipconfig /release puis un /renew pour se connecter). Bref tout est niquel, et ça fonctionne au poil.

    Alors je ne l'ai pas fait à la va vite, disons que j'ai testé avec plein de config différentes et qu'au final, le fichier donnait cela au moment où je l'ai posté. Je découvre Linux hein, y a une semaine on m'aurait demandé la différence entre un cd et un cd .. j'aurai pas pu répondre :D

    Bon, bah maintenant je vais attaquer les serveurs web, ftp, mail, etc !

    Merci milles fois pour votre aide précieuse ;)

    • [^] # Re: Merci

      Posté par  . Évalué à 1.

      "cd" et "cd.." c'est pas Linux, c'est Posix si je ne dis pas de connerie. Et ça fonctionne également sous Windows :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.