Forum Linux.général NAT vers conteneur LXC

Posté par  . Licence CC By‑SA.
Étiquettes :
0
3
déc.
2015

Je loue une machine chez un hébergeur (du côté de Roubaix) qui me propose des adresses IP fixes.
Je voudrais atteindre depuis l'extérieur un de mes conteneurs via une IP fixe.

C'est une configuration classique que j'avais déjà mise en place par le passé que je peine à faire retomber en marche.

J'ai mis en place LXC sur une Debian Jessie.
J'ai configuré un réseau interne avec libvirt pour joindre les conteneurs en interne et cela fonctionne.
Avec la seconde adresse IP (sans autre configuration) j'arrive à atteindre la machine (ça pingue, ça SSH).

Mais lorsque je mets en place les règles de NAT suivantes :

    CAL_PUBLIC=XXX.XXX.XXX.XXX # IP publique
    CAL_INTERNAL=192.168.122.101 # IP interne que je pingue bien une fois sur la machine
    /sbin/iptables -t nat -A PREROUTING -d $CAL_PUBLIC -j DNAT --to-destination $CAL_INTERNAL
    /sbin/iptables -t nat -A POSTROUTING -s $CAL_INTERNAL -o eth0 -j SNAT --to-source $CAL_PUBLIC

Ça coince :

    ping XXX.XXX.XXX.XXX
    PING XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX) 56(84) bytes of data.
    From XXX.XXX.XXX.XXX icmp_seq=1 Destination Port Unreachable
    ssh root @ XXX.XXX.XXX.XXX
    ssh: connect to host XXX.XXX.XXX.XXX port 22: Connection refused # oui j'ai bien activé dans un premier temps le login avec root

Est-ce que l'un de vous a un embryon de piste ?
(je ne suis pas un pro du réseau et ne sais même pas vraiment où chercher)

Par avance merci !

  • # passerelle ?

    Posté par  . Évalué à 3.

    tu appliques ces regles sur le serveur ou dans le conteneur ?

    le conteneur a comme IP 192.168.122.101,
    quel est sa passerelle (tu peux la connaitre avec la commande ip r)

    de plus, as-tu definis l'adresse IP publique sur ton serveur ?
    avant d'appliquer les regles, le flux arrive-t-il sur le serveur (ping/ssh…)

    • [^] # Re: passerelle ?

      Posté par  . Évalué à 1.

      tu appliques ces regles sur le serveur ou dans le conteneur ?

      Sur le serveur.

      le conteneur a comme IP 192.168.122.101,
      quel est sa passerelle (tu peux la connaitre avec la commande ip r)

      En terme de passerelle.
      Sur le serveur (avec YYY.YYY.YYY.YYY l'ip principale) :

      $ ip r
      default via YYY.YYY.YYY.254 dev eth0
      YYY.YYY.YYY.0/24 dev eth0 proto kernel scope link src 178.32.219.174
      192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1

      Sur le conteneur :

      $ ip r
      default via 192.168.122.1 dev eth0
      192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.101

      de plus, as-tu definis l'adresse IP publique sur ton serveur ?

      Oui (extrait de /etc/network/interfaces)

          auto eth0
          iface eth0 inet static
              address YYY.YYY.YYY.YYY # IP publique 1
              netmask 255.255.255.0
              network YYY.YYY.YYY.0
              broadcast YYY.YYY.YYY.255
              gateway YYY.YYY.YYY.254
              post-up /sbin/ifconfig eth0:0 XXX.XXX.XXX.XXX netmask 255.255.255.255 broadcast XXX.XXX.XXX.XXX
              post-down /sbin/ifconfig eth0:0 down
      

      avant d'appliquer les regles, le flux arrive-t-il sur le serveur (ping/ssh…)

      Oui.

      • [^] # Re: passerelle ?

        Posté par  . Évalué à 4.

        ok.
        et par defaut, ton conteneur, il accede à internet ?

        probablement que non, car l'IP forwarding ne doit pas etre activé.

        il faut faire un

        echo 1> /proc/sys/net/ipv4/ip_forward

        evidemment avec un SNAT pour les flux qui sortent du conteneur vers internet (avec l'IP du serveur, ou l'IP failover)

        si ca marche, il faut placer cela pour que cela s'active au demarrage.
        cela peut se regler dans /etc/sysctl.conf

        • [^] # Re: passerelle ?

          Posté par  . Évalué à 2. Dernière modification le 03 décembre 2015 à 23:20.

          ton conteneur, il accede à internet ?
          probablement que non, car l'IP forwarding ne doit pas etre activé.

          Eh ben à vrai dire, oui. Je pingue sans souci (et peux mettre à jour le conteneur).

          cat /proc/sys/net/ipv4/ip_forward
          1

          Cela ne semble pas être ça le problème.

  • # Et la non-solution est

    Posté par  . Évalué à 1.

    Je n'ai pas réussi à identifier mon problème mais je l'ai résolu.

    J'ai enlevé la configuration via libvirt. C'est censé faciliter la vie mais ça semble faire des choses pas claire dans le dos.

    À la place, je me suis rabattu sur une configuration de pont réseau à la main : https://wiki.debian.org/LXC/SimpleBridge

Suivre le flux des commentaires

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