Forum Linux.général iptables et routage de plusieurs connexions

Posté par  .
Étiquettes :
0
28
avr.
2009
Bonsoir,

Je vous fait part d'un problème que je n'arrive pas à résoudre malgré de nombreuses recherches...

Il s'agit d'un problème de routage et de partage de connexion avec iptables.

J'ai une machine sous ubuntu server qui me sert de passerelle pour accéder à Internet.
Sur son interface eth0, elle dispose d'une connexion au net.
Elle établit une connexion à un premier VPN via une interface virtuelle tun0.
A travers tun0, elle établit une connexion à un second VPN via une interface virtuelle tun1.

Le but du jeu est de router tous les paquets sur tun1, sauf ceux de certaines plages IP qui doivent transiter sur tun0.

En local sur cette machine, en configurant mes routes, c'est nickel chrome et ça fonctionne exactement comme je veux.

Par contre, une fois que j'applique mes règles iptables, c'est toujours nickel en local sur la machine... mais pas du tout sur les autres PC qui sont censés profiter de la connexion routée par ma passerelle.

Les symptômes constatés sont :
- Pour le trafic censé passer par tun1, tout baigne !
- Pour le trafic censé passer par tun0, là par contre c'est pas bon du tout. Mes connexions SSH se coupent au bout d'un moment aléatoire (et je n'ai même pas de "connexion closed", la console "freeze", c'est tout.). L'envoi de mails fonctionne une fois sur deux, jamais pour des gros mails ou des mails avec pièces jointes. Lors de la soumission de certains formulaires, la page ne se charge jamais "en attente..." indéfiniment.

Voilà mes règles (j'ai fini par tout réinitialiser à ACCEPT par désespoir, mais évidemment ça ne change rien :))

# Réinitialisation
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

# Idem, table NAT
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE

Je débute totalement avec iptables, il y a donc peut être une erreur monstrueuse là dedans... mais en cherchant et en comparant avec les divers howto "partage de connexion internet", je n'ai pas trouvé...

Merci d'avance pour vos lumières !
  • # Davantage de détails stp

    Posté par  . Évalué à 1.

    Pourrais-je avoir davantage de détails stp.

    tun0 se connecte "à un 1er VPN": tun0 t'établit un tunnel entre toi et une machine/routeur où tourne un service VPN. A partir de là, ta machine est connecté en pseudo local pour les machines du réseau distant. OK pour moi.

    tun1 doit t'établir un 2e tunnel entre ta machine étant vue comme locale sur le réseau distant et un autre serveur VPN. Question bête: es-tu obligé de passer par le 1er tunnel ? Ne peux-tu pas établir une connexion directe vers ce 2e serveur VPN ? Ce serait peut-être plus simple non ?

    Peux-tu également donner les IPs qu'aura ta machine (change les si tu veux, mais c'est pour savoir si c'est les mêmes plages utilisées).
    • [^] # Re: Davantage de détails stp

      Posté par  . Évalué à 1.

      En effet, ça manque de détails, j'ai voulu simplifier un peu mais en fait c'était pas une bonne idée...

      eth0 me donne en réalité accès à un réseau local. Via ce réseau local j'ai accès à une passerelle VPN qui me permet de me connecter au "VPN 1" (10.31.0.0/16).

      Via ce "VPN 1", je peux accéder à un proxy qui me donne accès à l'extérieur... et donc oui, je suis obligé de passer par "VPN 1" (tun0) pour me connecter à "VPN 2" (tun1).
      Sur "VPN 2" j'ai une adresse en 10.26.0.0/16. Et c'est ma passerelle du "VPN 2" (10.26.0.1) qui me donne réellement accès à Internet !

      D'où mon routage : "tous les paquets sur tun1" (internet) SAUF certaines plages qui sont seulement accessibles via "VPN 1" (si je passe par internet pour m'adresses à ces plages d'IP les serveurs ne me répondront pas).

      J'espère avoir été plus clair :)
  • # peut etre un problème de MTU

    Posté par  . Évalué à 2.

    les freeze de ssh, blocage en plein envoi de mail me rappel des probleme de MTU

    pex tu faire un ifconfig sur ta machine et nous envoyer le resultat

    aux niveau iptables, tu ne peux pas etre plus ouvert

    a+

    je plussoie et je paie ma tournée !!!!

    • [^] # Re: peut etre un problème de MTU

      Posté par  . Évalué à 1.

      Owi, tu tiens sûrement une piste :)

      Sur la passerelle, le MTU de eth0 et de tun1 est à 1500.
      Par contre pour tun0... 1390 !

      cyberjujum@gateway:~$ ifconfig
      eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx
      inet addr:192.168.1.254 Bcast:192.168.1.255 Mask:255.255.255.0
      inet6 addr: fe80::222:15ff:fed3:8e28/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:950394 errors:0 dropped:954033481 overruns:0 frame:0
      TX packets:1169709 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:501630327 (501.6 MB) TX bytes:752817774 (752.8 MB)
      Interrupt:220

      lo Link encap:Local Loopback
      inet addr:127.0.0.1 Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING MTU:16436 Metric:1
      RX packets:1268172 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1268172 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:344919896 (344.9 MB) TX bytes:344919896 (344.9 MB)

      tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
      inet addr:10.31.xx.xx P-t-P:10.31.xx.xx Mask:255.255.248.0
      UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1390 Metric:1
      RX packets:6114 errors:0 dropped:0 overruns:0 frame:0
      TX packets:5485 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:500
      RX bytes:1787334 (1.7 MB) TX bytes:485448 (485.4 KB)

      tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
      inet addr:10.26.0.6 P-t-P:10.26.0.5 Mask:255.255.255.255
      UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
      RX packets:4298 errors:0 dropped:0 overruns:0 frame:0
      TX packets:2007 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:100
      RX bytes:2182609 (2.1 MB) TX bytes:155133 (155.1 KB

      Sur le PC sur lequel je suis, qui accède au net via la passerelle, le MTU est également de 1500.

      Pauvre iptables, je lui mettais tout sur le dos alors que si ça se trouve il n'y est pour rien...

      Donc pour résoudre le problème, il faudrait que je fasse quoi ? Que j'augmente le MTU de tun0 à 1500 ? Peut être pas une bonne idée, si automatiquement il s'est mis à cette valeur... ou alors je diminue tous les autres ?
      • [^] # Re: peut etre un problème de MTU

        Posté par  . Évalué à 2.

        En changeant juste le MTU de mon poste client à 1390, je n'ai plus le problème de pages web qui ne se chargent jamais (exemple : modification de la structure d'une table dans phpmyadmin, depuis que j'ai modifié le MTU je peux enfin soumettre le formulaire sans que la page se charge indéfiniment !).

        Par contre pour les mails avec pièce jointes, toujours le même problème. Idem pour les déco SSH (peut être un peu plus rares qu'avant cependant).

        Mais après il ne suffit peut-être pas de le faire seulement sur le poste client...

        Pour être le plus précis possible, mon réseau complet se compose :

        - D'un routeur sous OpenWRT, sur lequel sont connectés :
        - Ma passerelle sous Ubuntu server (celle dont je parle ici)
        - Mes postes clients
        - Un second réseau sur l'interface WAN du routeur (le fameux réseau local qui me donne accès à la passerelle du "VPN 1").

        Donc faut-il modifier les MTU partout ? Ou est-ce que c'est sensé suffire sur le client ?

        Et donc je rappelle que sur la passerelle sous ubuntu, tout fonctionne correctement... (je viens d'installer thunderbird et d'envoyer un mail avec pièce jointe depuis la passerelle, ça passe impec).

        Merci pour votre aide en tous cas :)
        • [^] # Re: peut etre un problème de MTU

          Posté par  . Évalué à 2.

          si je resume

          PC =x Ubuntu server (passerelle) x=x openwrt (firewall, passerelle) x= LAN =x VPN1 x== quelquepart ==x reseau2 x==x VPN2 x== ...

          non ?
          • [^] # Re: peut etre un problème de MTU

            Posté par  . Évalué à 1.

            Pour être exact :

            PC x=x OpenWRT (passerelle LAN résidence) x=x Ubuntu server (passerelle VPNs) x= OpenWRT & LAN résidence =x VPN 1 x= Proxy dispo via le VPN 1 =x VPN 2 x=x Internet

            L'OpenWRT qui a deux interfaces réseau me permet de partager le LAN de ma résidence (branché sur son port "WAN") avec mon petit LAN de chez moi (mes PC et ma passerelle Ubuntu server étant branchés sur les 4 ports de son interface "LAN"). Je ne pouvais pas le faire direct sur ma passerelle Ubuntu server qui n'a qu'une interface réseau.

            Mon PC passe donc par le WRT pour accéder à ma passerelle Ubuntu server, qui elle-même repasse par le WRT pour se connecter aux deux VPN et repasse encore par le WRT pour répondre à mon PC.

            Si je suis pas clair, n'hésite pas à me demander de reformuler.

            Merci :)

            (En voyant l'aperçu du post je comprends pourquoi tu as utilisé des x=x et non pas des <=> :))
            • [^] # Re: peut etre un problème de MTU

              Posté par  . Évalué à 2.

              du coup ton PC peut en fait passer directement sur le LAN de la residence car ta "passerelle" n'en est pas completement une ?


              x=x PC
              |
              x=x passerelle
              |
              x=x openWRT x=x LAN de la residence

              puis tu veux aller sur internet (que ne te fournit pas la residence ou de maniere brider)
              en allant d'abord

              [ (x=x VPN 1 ) x=x VPN 2 ] x=x Internet

              donc il faut en fait "simplement"
              changer les routes (ce que tu as deja fait)
              mais il faut peut-etre les "ponderer"

              en effet il ne faut pas que la machine vers laquelle tu fais ton SSH (par exemple)
              soit dispo au travers de vpn1 ET de vpn2 en meme temps

              sinon la machine ne sait plus ce qu'elle doit faire
              • [^] # Re: peut etre un problème de MTU

                Posté par  . Évalué à 1.

                Pas tout à fait, il passe quand même par ma passerelle sous Ubuntu server.

                Cette passerelle est connectée au LAN de la résidence (10.203.0.0/16) au travers du WRT. Grâce au LAN de la résidence elle se connecte au VPN 1 (10.31.0.0/16) et grâce au VPN 1 elle se connecte au VPN 2 (10.26.0.0/16).

                Sur cette passerelle j'ai en effet changé les routes pour amener les paquets soit sur le VPN 1, soit sur le VPN 2 selon leur destination.

                Si je surfe, que je me connecte en SSH ou que j'envoie des mails depuis ma passerelle, tout fonctionne parfaitement.

                C'est lorsque que j'utilise un autre PC, connecté au WRT et configuré pour utiliser ma passerelle sous Ubuntu comme passerelle que je rencontre les problèmes mentionnés plus haut (déconnexions SSH, pages qui se chargent indéfiniment, pb d'envoi de mail qui échoue dès que le mail est un peu volumineux...), et seulement pour des serveurs auxquels j'accède via le VPN 1 (pour bon nombre de ces serveurs je suis d'ailleurs obligé de passer par le VPN 1, ils ne sont pas accessibles depuis l'extérieur).

                Donc le coup du MTU me semblait pas mal, puisque l'interface tun0 qui représente la connexion au VPN 1 a un MTU de 1390, 1500 pour toutes les autres y compris mon PC.

                D'ailleurs, quand je passe le MTU de mon PC à 1390, les envois de mails merdent moins (des mails texte avec du long contenu passent alors qu'avant ils ne passaient pas, par contre avec des pièces jointes ça ne fonctionne toujours pas) et certaines pages qui posaient problème auparavant (ex : certains formulaires dans phpMyAdmin) fonctionnent bien. Mais j'ai toujours le problème de mails avec pièces jointes et de déconnexions SSH (peut être un peu moins fréquent cependant pour les décos SSH).

                Penses-tu, comme ça avait été proposé, que ça soit effectivement un problème de MTU ? Le problème est que je ne sais pas trop quels MTU modifier comme j'ai pas mal de choses entre moi et le net... (mon PC, mon WRT, ma passerelle...).

                Pour les routes, le problème que tu décris est-il compatible avec le fait que si je suis directement sur ma passerelle (si je ne passe pas par un autre PC) tout fonctionne parfaitement ?

                J'ai également essayé de ne plus passer par la passerelle et d'effectuer les connexions à mes VPN depuis mon PC directement (en connectant directement mon PC au LAN de la résidence ou en passant par le WRT). Et là tout fonctionne nickel, comme quand je suis directement sur la passerelle en fait. Donc ça doit bien être quelque chose entre mon PC et la passerelle...
                • [^] # Re: peut etre un problème de MTU

                  Posté par  . Évalué à 2.

                  si d'apres tes tests ce serait le MTU qui est en cause, il faut comprendre la logique simple du MTU...

                  il s'agit de la limite max du paquet avant fragmentation.

                  ainsi faire passer un MTU de 1500 dans un tuyau de 1390 va forcement couper le paquet en (environ) 1300 et 200 (plus ou moins les entetes de paquets)

                  donc à toi de regler les enchainements pour que ca se passe bien

                  par exemple un MTU de 1000 sur ton PC, qui envoie à la passerelle, qui envoie avec un MTU de 1100 au VPN1, qui envoie avec un MTU de 1390 au VPN2

                  que quelqu'un me corrige si je me suis trompe, car parfois je dis des betises :p

Suivre le flux des commentaires

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