Forum Linux.général Xen + bridge + nat --> ca marche pas

Posté par  .
Étiquettes : aucune
0
12
avr.
2008
Bonjour cher forum et forumeux,

je suis en train de me monter un petit serveur, et comme je ne suis pas avare de défi, je me suis dit "pourquoi ne pas faire un peu de xen, pour voir a quoi cela ressemble ?".

Sauf que comme je suis maso, je choisi une config un peu particuliere, et je n'arrive pas à m'en sortir.
Mon but : avoir plein de petit domU dans un sous réseau (mettons en 10.0.0.0/24), qu'ils puissent accéder au grand Ternet, et que je puisse les atteindre avec des machines située dans un autre sous réseau privée (10.0.1.0/24) facilement.
Mes contraintes : je n'ai qu'une seule interface physique (et un vpn de tps en tps)

Voici comment je pensais faire :
- eth0 --> mon IP publique
- dummy0 --> mon IP privée (10.0.0.254)
- xenbr0 un bridge entre mes domU et dummy0

jusque la, pas de soucis. Je lance un domU, je lui attribue une IP (10.0.0.1), avec en passerelle 10.0.0.254.
Il arrive bien a pinger le sous réseau local, c'est impécable. Par contre, impossible d'aller sur le grand Ternet.
J'active le nat, et bam.. ca marche toujours pas :(
Qu'ais je donc pu oublier ?

Mon xend-config.sxp

(logfile /var/log/xen/xend.log)
(loglevel DEBUG)

(xend-http-server no)
(xend-unix-server no)
(xend-tcp-xmlrpc-server no)
(xend-relocation-server no)

#(xend-unix-path /var/lib/xend/xend-socket)

(console-limit 1024)

(network-script network-dummy)
(vif-script vif-bridge)

(dom0-min-mem 196)
(dom0-cpus 0)
(enable-dump no)


Mon script network-dummy (un peu crade je sais)

#!/bin/sh

case $1 in
start)
/etc/xen/scripts/network-bridge start vifnum=0 bridge=xenbr0 netdev=dummy0
;;
stop)
/etc/xen/scripts/network-bridge stop vifnum=0 bridge=xenbr0 netdev=dummy0
;;
restart)
/etc/xen/scripts/network-bridge start vifnum=0 bridge=xenbr0 netdev=dummy0
/etc/xen/scripts/network-bridge stop vifnum=0 bridge=xenbr0 netdev=dummy0
;;
esac
exit 0


Mon nat :

#!/bin/bash

iptables=/sbin/iptables

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

$iptables -t nat -F
$iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  • # Histoire de routes

    Posté par  . Évalué à 3.

    Il faut que tu configure ton hote en routeur (option à activer dans le noyau), et peut être sur tes serveurs hotes, ajouter une route statique ....
    • [^] # Re: Histoire de routes

      Posté par  . Évalué à 1.

      Merci de ta réponse.
      Normalement, la configuration en routeur est déjà faite par le echo 1 > /proc/sys/net/ipv4/ip_forward non ?

      sinon, voici mes ifconfigs et route :

      sur l'hote:

      # ifconfig
      dummy0 Link encap:Ethernet HWaddr CA:C9:8C:46:D9:B0
      inet addr:10.0.0.254 Bcast:10.0.0.255 Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:0 (0.0 b) TX bytes:258 (258.0 b)

      eth0 Link encap:Ethernet HWaddr AA:BB:CC:DD:EE:FF
      inet addr:11.11.11.11 Bcast:11.11.11.255 Mask:255.255.255.0
      UP BROADCAST RUNNING MTU:1500 Metric:1
      RX packets:3057 errors:0 dropped:0 overruns:0 frame:0
      TX packets:1662 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:318320 (310.8 KiB) TX bytes:271341 (264.9 KiB)
      Interrupt:20 Base address:0x2000

      lo Link encap:Local Loopback
      inet addr:127.0.0.1 Mask:255.0.0.0
      UP LOOPBACK RUNNING MTU:16436 Metric:1
      RX packets:44 errors:0 dropped:0 overruns:0 frame:0
      TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:4130 (4.0 KiB) TX bytes:4130 (4.0 KiB)

      pdummy0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
      UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:25 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:0 (0.0 b) TX bytes:1822 (1.7 KiB)

      vif0.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
      UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
      RX packets:3 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:258 (258.0 b) TX bytes:0 (0.0 b)

      vif1.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
      UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

      xenbr0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
      UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
      RX packets:3 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:216 (216.0 b) TX bytes:0 (0.0 b)


      # route -n
      Kernel IP routing table
      Destination Gateway Genmask Flags Metric Ref Use Iface
      10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 dummy0
      11.11.11.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
      0.0.0.0 11.11.11.254 0.0.0.0 UG 0 0 0 eth0


      et sur mon domU

      # ifconfig
      eth0 Link encap:Ethernet HWaddr 00:16:3E:19:EC:3F
      inet addr:10.0.0.1 Bcast:10.99.100.255 Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:1 errors:0 dropped:0 overruns:0 frame:0
      TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:42 (42.0 b) TX bytes:356 (356.0 b)

      lo Link encap:Local Loopback
      inet addr:127.0.0.1 Mask:255.0.0.0
      UP LOOPBACK RUNNING MTU:16436 Metric:1
      RX packets:4 errors:0 dropped:0 overruns:0 frame:0
      TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:272 (272.0 b) TX bytes:272 (272.0 b)


      # route -n
      Kernel IP routing table
      Destination Gateway Genmask Flags Metric Ref Use Iface
      10.0.00.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
      0.0.0.0 10.0.0.254 0.0.0.0 UG 0 0 0 eth0
  • # tap ?

    Posté par  . Évalué à 3.

    A la place de dummy0, ne devrais-tu pas utiliser une interface tap ?

    Ca fait plus de 6 mois que je n'ai pas touché à Xen, mais de tête c'était avec tap.

    Et là, pas besoin de faire du NAT: chaque machine virtuelle est vue comme si elle était sur le réseau indépendament des autres. Tu peux tout de même utiliser ebtables et iptables sur ton br0 pour mettre en place des sécurités.
    • [^] # Re: tap ?

      Posté par  . Évalué à 1.

      Tous les tutos que j'avais vu mentionnaient d'utiliser dummy, donc c'est ce que j'ai fait ;).
      Je viens de tester avec tap, et j'ai la même chose : mes paquets passent de ma machine virtuelle à l'hote, mais impossible d'en sortir par eth0 (tcpdump ne me les montre meme pas :( )

      Pour iptables et ebtables j'y pense, mais je les mettrais une fois que ma config marchera, ca serait bete de tester des trucs et de m'apercevoir que ca ne marche pas car je me suis tiré une balle dan sle pied
      • [^] # Re: tap ?

        Posté par  . Évalué à 2.

        Si j'ai bien compris, tu fais ton nat sur eth0.

        Essaie aussi de faire un nat sur dummy0.
        • [^] # Re: tap ?

          Posté par  . Évalué à 1.

          J'ai essayé aussi, mais le résultat est le même.
          Et un nat sur dummy0 m'empecherais d'avoir accès à mes hotes directement à partir d'un autre sous réseau non ?

          J'aimerais que mes domU sois accessible d'internet par eth0, qui ne dispose que d'une ip publique, et par mon VPN (monté de temps en temps), qui lui sera dans le même réseau privé que mes domU.
          • [^] # Re: tap ?

            Posté par  . Évalué à 1.

            Bon apres encore plus d'essais, j'arrive maintenant à envoyer des paquets sur l'internet, mais d'apres mon tcpdump, ils sont en ip privée, ce qui est sommes toute assez moyen.
            J'ai toujours la meme regles iptables qu'auparavant, qui normalement doit me faire mon nat.

            Une petite idée ?

            Merci
            • [^] # Re: tap ?

              Posté par  . Évalué à 3.

              Alors j'ai essayé des choses chez moi (avec NetBSD et qemu, mais le principe est le ême), mais jen'y arrive pas non plus, il y a un truc qui m'échappe.
              • [^] # Re: tap ?

                Posté par  . Évalué à 1.

                Ok, donc a priori, je n'ai pas fait d'erreurs flagrante, ca me rassure un peu ;)
                Mais bon c'est vrai que c'est étrange, je ne vois pas pourquoi cela ne marcherais pas. Cela me parait quand même pas si tordu comme utilisation.

                En tout cas, merci pour tes tests
                • [^] # XEN + bridge + Nat

                  Posté par  . Évalué à 1.

                  non effectivement ca ne marche pas.... et il y a une bonne raison à cela c'est que le mode route (et le mode Nat qui n'est que du routage avec du masquerading) sont deux approches opposées de construction de ton réseau... tu ne peux pas utiliser un script de networking de type bridge (ou dummy avec une conf en bridge de base) et un modèle de vif nat ou inversement...
                  Totof2000 a raison ... tu dois paramétrer ton dom0 comme routeur... dans proc comme tu l'a dit mais aussi dans la conf den /etc/xen/xend-config.sxp (les paramètres network-script et vif-script) et surtout pas de bridging.... ca devrait marcher un pe mieux comme ca...

Suivre le flux des commentaires

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