[KVM] Probleme réseau sur VM

Bonjour,

J’ai créé une machine virtuel sous ubuntu sur ma debian squeeze, mais je n’arrive pas à fair emarche le réseau dessus, je pige pas pourquoi.
Depuis l’hyperviseur je ping bien la machine virtuel en 192.168.1.147, mais depuis la VM je ne ping pas l’hyperviseur ni la gateway.

Voici ma conf:

/etc/network/interfaces de l’hyperviseur:

auto lo
iface lo inet loopback


iface wlan0 inet static
wpa-conf managed
wpa-ap-scan 1
wpa-scan-ssid 1
wpa-ssid XXXXXXXXXXXXXXXXXX
wpa-key-mgmt WPA-PSK
wpa-psk XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXx
#wpa-bridge br0
address 192.168.1.145
netmask 255.255.255.0
gateway 192.168.1.1
broadcast 192.168.1.255
auto wlan0

auto br0
iface br0 inet static
address 192.168.1.145
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports wlan0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

#auto tap10
##iface tap10 inet manual
## pre-up tunctl -b -u futex -t tap10
## pre-up ifconfig tap10 up
## post-down tunctl -d tap10

Je démarre la VM comme ca:
kvm -m 512 -net nic,vlan=0 -net tap,vlan=0,ifname=sudo tunctl -b -u root Ubuntu_10.4.img

/etc/network/interface de la VM:

Et la conf sur la VM (c'est la denière Ubuntu)
iface eth0 inet static
address 192.168.1.147
gateway 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
auto eth0 

Merci de votre aide.

J’ai progresser, en faite c’est du à des parametre que je passais au kernel qui bloquait les ping sur l’hyperviseur :smiley:


#Desactivation de l'ip forwarding
net.ipv4.ip_forward=0
#Ignorer les pings
net.ipv4.icmp_echo_ignore_all=1
#Ignorer les pings broadcasts
net.ipv4.icmp_echo_ignore_broadcasts=1
#Désactivation du routage d'origine interne
net.ipv4.conf.all.accept_source_route=0
#Désactivation de l'autorisation des redirections ICMP
net.ipv4.conf.all.accept_redirects=0

L’hyperviseur répond bien, mais toujours pas la gateway, j’ai donc toujours pas accès au net depuis la VM.

Le partage de connexion avec bridge, ça n’a jamais été mon fort, mais je vais tout de même tenter de te répondre.

  • Le bridge ne me semble pas bon :

Seule l’interface wlan0 est connectée à ton bridge, il faudrait avoir

  • Pour que la gateway réponde au ping, il faut qu’elle connaisse la route à prendre pour envoyer la réponse, i.e. qu’elle sache que pour envoyer un paquet à la VM, il faut qu’elle l’envoie à la machine physique.Il me semble donc qu’il ne faut pas donner d’IP à wlan0 ni à tap0, mais au bridge (br0) seulement, pour que les deux machines utilisent la même IP à l’extérieur.

Personnellement, je trouve ça plus simple de le faire sans bridge :

# On active le forwarding IP
# (ça peut aussi se régler dans /etc/sysctl.conf)
echo 1 > /proc/sys/net/ipv4/ip_forward

# Netfilter doit laisser passer les paquets
# (si par défaut la cible FORWARD fait DROP)
iptables -A FORWARD -o wlan0 -i tap0 -s 10.0.0.0/24 -m state ! --state INVALID -j ACCEPT
iptables -A FORWARD -o tap0 -i wlan0 -d 10.0.0.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT

# On fait du NAT pour que la VM soit vue comme la machine physique de l'extérieur
# (si la machine physique a une IP dynamique, on peut utiliser MASQUERADE)
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source <IP_de_la_machine_physique>

Il suffit alors de donner comme IP par exemple 10.0.0.1 à tap0 et 10.0.0.2 à la VM. La VM doit utiliser l’IP de tap0 comme gateway…

Salut, merci pour ta réponse

J’ai modifier le ficher /etc/network/interfaces comme tu m’a dis:

auto tap0
iface tap0 inet manual
 pre-up tunctl -b -u futex -t tap0
 pre-up ifconfig tap0 up
 post-down tunctl -d tap0

auto br0
iface br0 inet static
address 192.168.1.145
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports wlan0 tap0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

Ca ne marche pas mieux et quand je lance la VM, j’ai un message d’erreur:

kvm -hda Ubuntu_10.4.img -net nic -net tap,ifname=tap0 -m 1024
device tap0 is already a member of a bridge; can't enslave it to bridge br0.

La conf de mon bridge doit pas bonne.

Sinon j’ai essayer aussi avec les règles iptable que tu as mis et en ajoutant une IP sur tap0.

iptables -A FORWARD -o wlan0 -i tap0 -s 192.168.1.0/24 -m state ! --state INVALID -j ACCEPT
iptables -A FORWARD -o tap0 -i wlan0 -d 192.168.1.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.1.145

Idem le ping de 192.168.1.1 ne passe pas.

Ben c’est normal derrière un NAT (firewallé en plus). En revanche de ta machine virtuelle tu devrais pouvoir pinguer ta passerelle…
Si tu veux mettre un serveur, il faut que tu fasses une redirection de port (DNAT) et que tu autorises le FORWARD vers ce serveur (ACCEPT).

192.168.1.1 est la gateway (bobox)

Arf, j’aurais dû m’en douter en voyant l’IP de la machine physique

Ben dans ce cas, il faudrait utiliser un autre sous-réseau que 192.168.1.0/24 pour ta VM, sinon elle va chercher à pinguer directement au lieu d’envoyer le paquet à ta machine physique pour qu’elle la route…

C’est pourquoi dans mon exemple, j’utilisais un réseau en 10.0.x.x mais tu peux utiliser un réseau en 192.168.x.x si tu veux. Mais pas celui que tu utilises entre ta machine physique et ta machinbox !
Il parait qu’un schéma vaut mieux qu’un long discours :

     +----------+
     |    vm    |
     +----------+ 192.168.2.2
          |
          |
          |                                         192.168.2.0/24
     +----------+ 192.168.2.1 (tap0)
     | physique |                             -------------------------------- NAT
     +----------+ 192.168.1.145 (eth0)
          |                                         192.168.1.0/24
          |
          |
          |
     +----------+ 192.168.1.1
     |  gateway |                             --------------------------------- NAT
     +----------+ (IP publique)
          |                                            ( FAI )
          |
          |
        /\/\/\
       ( WAN  )
        \/\/\/