Partage
  • Partager sur Facebook
  • Partager sur Twitter

Linux router : IP_forward

Problème d'acces internet via réseau

    31 mars 2023 à 11:59:39

    Bonjour à tous :)

    Je cherche à donner un acces internet à un de mes PC en utilisant un second PC comme routeur, c'est avant tout l'exercice mais je bloque un peu.

    Les deux PC sont sous linux (ubuntu 20.4). Le premier (A) à un acces à internet via un réseaux filaire et je voudrai que le second PC (B) ai acces à internet en se connectant à A via wifi. Je voudrai donc l'architecture suivante : B <--wifi --> A <--eth--> internet

    J'ai utilisé hostapd et dhcpd pour que A joue le rôle d'AP wifi et cela fonctionne bien : les deux machines peuvent se ping sans problème. J'ai activer ip_forward sur la machine A. Puis j'ai tester de ping 8.8.8.8 (je ne veux pas m'encombrer de DNS pour le moment) depuis la machine B mais cela ne fonctionne pas et la commande ping ne me renvoit rien. J'ai donc chercher à investiguer un peu ce qui se passait grâce à tshark.

    Sur l'interface wifi de la machine B :
    Les requètes ICMP partent correctement

    Sur l'interface wifi de la machine A :
    Les requètes ICMParrivent correctement

    Sur l'interface eth de la machine A :
    Je vois passer les requètes ICMP (avec comme ip source l'interface wifi de la machine B et comme ip destination 8.8.8.8) mais je ne vois aucune réponse. Lorsque je tente de ping 8.8.8.8 depuis la machine A cela se passe correctement.

    Voici la table de routage de la machine A :
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         134.214.146.1   0.0.0.0         UG    100    0        0 enp0s31f6
    134.214.146.0   0.0.0.0         255.255.255.0   U     100    0        0 enp0s31f6
    192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 wlp2s0

    Et la table de routage de la machine B
    Table de routage IP du noyau
    Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
    0.0.0.0         192.168.2.1     0.0.0.0         UG    20600  0        0 wlo1
    192.168.2.0     0.0.0.0         255.255.255.0   U     600    0        0 wlo1

    Je pense avoir fait le tour de mon soucis, si quelqu'un pourrait m'expliquer un tout ça, je lui en serai très reconnaissant,
    Bonne journée à tous !

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      13 avril 2023 à 1:09:31

      Bonjour Titou,

      Si tu regardes la table de routage du routeur en 134.214.146.1, tu verras qu'il ne connaît pas la route vers le réseau 192.168.2.0/24 en passant par A. Ce routeur ne peut donc pas acheminer les réponses ICMP reçues vers la machine B.

      Deux solutions:

      • Modifier la table de routage du routeur en 134.214.146.1 en ajoutant une route vers 192.168.2.0/24 en passant par A.
      • Faire du SNAT (Source NAT) sur A pour les paquets venant de 192.168.2.0/24 et sortant par enp0s31f6. En bref, remplacer l'adresse source de la machine B par celle de la machine A lorsque les paquets sont routés de B vers le routeur. L'opération inverse sur l'adresse destination sera automatiquement réalisée lorsque la réponse sera reçue par A. Ainsi B finira par recevoir la réponse.

      Je recommande dans ton cas de faire un SNAT.

      Le noyau Linux incorpore nativement un pare-feu. Ce pare-feu se nomme Netfilter, il est assez puissant (ce n'est pas un pare-feu next-gen cependant).

      Pour s'interfacer avec ce pare-feu et le configurer, plusieurs application logicielle front-end existent: iptables (la plus ancienne mais toujours utilisées), nftables (le supposé successeur à iptables). Des applications un peu plus haut niveau et plus intuitives à l'utilisation sont aussi utilisées comme UncomplicatedFirewall (ufw), Firewalld et Shorewall.

      Je te laisse choisir ta solution préférée.

      J'utilise nftables, voici un exemple de configuration du fichier /etc/nftables.

      table ip nat {
          chain PREROUTING {
              type nat hook prerouting priority dstnat;
          }
      
          chain POSTROUTING {
              type nat hook postrouting priority srcnat;
              # MASQUERADE on enp0s41f6
              oifname enp0s41f6 masquerade
          }
      }
      

      La configuration ici indique de faire du SNAT (l'action se nomme MASQUERADE avec Netfilter) pour tout ce qui sort par enp0s41f6.

      Directement avec une commande, ça donne quelque chose comme ça:

      # nft add rule ip nat POSTROUTING oifname enp45s0 masquerade


      • Partager sur Facebook
      • Partager sur Twitter

      Linux router : IP_forward

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown