Problème d'acces d'une machine virtuelle sous KVM/Qemu vers Internet

Bonjour,
J’ai Host sur Debian Stretch KVM/Qemu qui supporte un Guest sur Debian Stretch .

Je n’utilise pas les outils graphique.

J’arrive à faire communiquer les deux, j’accède du Guest au Host et inversement via Ssh.

CONF RESEAU :

  • sur le HOST : : (avec un ifconfig à l’ancienne … )
    Le Bridge :
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.10  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::5e26:aff:fe01:fa90  prefixlen 64  scopeid 0x20<link>
        ether 5c:26:0a:01:fa:90  txqueuelen 1000  (Ethernet)
        RX packets 2860  bytes 259182 (253.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2202  bytes 255693 (249.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

La connexion via Bluetooth qui me permet à partir de mon mobile d’aller sur le Net …

bnep0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.44.148  netmask 255.255.255.0  broadcast 192.168.44.255
        inet6 fe80::7463:d10d:210:8533  prefixlen 64  scopeid 0x20<link>
        ether 5c:ac:4c:f6:56:d7  txqueuelen 1000  (Ethernet)
        RX packets 20720  bytes 19319159 (18.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17282  bytes 1802735 (1.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Sur le GUEST : ma conf Reseau :

ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.15  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::5054:ff:fe12:3456  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:12:34:56  txqueuelen 1000  (Ethernet)
        RX packets 16521  bytes 3759137 (3.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 23098  bytes 4676897 (4.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Par contre, j’arrive pas à configure le réseau pour pouvoir faire sortir le Guest sur l’exterieur …
Sur le Guest, Je Créé une route statique vers l’ip du Bridge du Host, mais rien n’y fait …

Strechwww:~# route
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
default         192.168.0.10    0.0.0.0         UG    0      0        0 ens3
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens3

J’ai désactivé le firewall sur le HOST … sur le GUEST y en a pas …

Gentils forumeurs … Pouvez vous m’éclairez sur mon soucis ?

Merci d’avance …

Philippe.

Hé bien justement, en ce qui concerne Linux, ifconfig est tellement ancien qu’il en est complètement obsolète.

Le 25 janvier 1999, il y a bientôt 20 ans, est sorti le noyau Linux 2.2.0 , avec une nouvelle organisation du réseau qui remplace ifconfig et compagnie (net-tools) par iproute2.

Il y a fort longtemps : https://packages.debian.org/stretch/net-tools

Aujourd’hui : https://packages.debian.org/stretch/iproute2

Et il existe même de la documentation pour t’aider à faire enfin la transition : https://baturin.org/docs/iproute2/

Alors je ne sais pas pour les autres membres du forum mais je ne vais pas travailler sur une question qui fait appel aux commandes ifconfig et/ou route. Cela n’a plus aucun sens.


AnonymousCoward

Bon, Ok alors avec des outils à jour :
La conf Réseau de base sur le HOST et le GUEST

- Sur mon Host :

root@newnmd:~# ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 5c:26:0a:01:fa:90 brd ff:ff:ff:ff:ff:ff
3: wlp2s0b1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5c:ac:4c:15:36:64 brd ff:ff:ff:ff:ff:ff
5: pan1: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether f6:0e:c5:70:22:a9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.54/24 brd 192.168.0.255 scope global pan1
       valid_lft forever preferred_lft forever
6: bnep0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 5c:ac:4c:f6:56:d7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.44.148/24 brd 192.168.44.255 scope global dynamic bnep0
       valid_lft 3431sec preferred_lft 3431sec
    inet6 fe80::d6ba:973a:75b3:9ef3/64 scope link 
       valid_lft forever preferred_lft forever
root@newnmd:~# ip route
default via 192.168.44.1 dev bnep0 proto static metric 750 
192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.10 
192.168.44.0/24 dev bnep0 proto kernel scope link src 192.168.44.148 metric 750 
root@newnmd:~# cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	newnmd

192.168.0.15	gravcreav1 strechwww	

Sur le HOST, J’ai l’interface bnep0 qui me permet de sortir sur l’exterieur via une connexion bluetooth / smartphone.

Sur ce HOST,
Il y a aussi une interface tap0, qui est liée au bridge br0 par la commande suivante :

brctl addif br0 tap0

Ce bridge me permet d’acceder en local à un service HTTP herbergé sur le GUEST.

Cela fonctionne, je developpe avec Bluefish à partir du HOST sur le GUEST via un partage nfs,
j’accede au site developpé sur le GUEST via un navigateur à partir du HOST.

Le soucis c’est que je n’arrive pas à sortir sur le net à partir du GUEST.

- Sur mon Guest :

Strechwww:~#  ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.15/24 brd 192.168.0.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe12:3456/64 scope link 
       valid_lft forever preferred_lft forever
Strechwww:~# ip route
default via 192.168.0.254 dev ens3 proto static metric 100 
192.168.0.0/24 dev ens3 proto kernel scope link src 192.168.0.15 metric 100 

Est ce plus clair ?

Merci pour votre éventuel retour …

Bonjour,

Il doit te manquer quelque chose du genre (à adapter!) :

iptables -t nat -A POSTROUTING -o vmbr0 -s 192.168.7.0/24 ! -d 192.168.7.0/24 -j MASQUERADE

Il faut peut être aussi activer l’IP forwarding sur l’hôte.

Comment se fait-il qu’on ne voie pas br0 ni tap0 ?
A quoi correspond l’interface pan0 et pourquoi a-t-elle une adresse IP dans le préfixe du réseau virtuel ?

A adapter en effet car l’interface de sortie doit être bnep0 et le préfixe doit être 192.168.0.0/24.

C’est même sûr, si ce n’est pas déjà fait.

sysctl net.ipv4.ip_forward=1

Et configurer les DNS dans /etc/resolv.conf sur l’invité si besoin.

1 J'aime

Merci pour votre retour sk4hrr et PascalHambourg

@PascalHambourg : Au temps pour moi, j’avais désactivé le Tap pour faire des tests … dsl pour l’incohérence
il est ici .

root@newnmdoot@newnmd:~# ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state DOWN group default qlen 1000
    link/ether 5c:26:0a:01:fa:90 brd ff:ff:ff:ff:ff:ff
3: wlp2s0b1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 5c:ac:4c:15:36:64 brd ff:ff:ff:ff:ff:ff
5: pan1: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether f6:0e:c5:70:22:a9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.54/24 brd 192.168.0.255 scope global pan1
       valid_lft forever preferred_lft forever
17: tap0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether 1a:f2:ac:0a:e1:0f brd ff:ff:ff:ff:ff:ff
    inet6 fe80::18f2:acff:fe0a:e10f/64 scope link 
       valid_lft forever preferred_lft forever
19: bnep0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 5c:ac:4c:f6:56:d7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.44.148/24 brd 192.168.44.255 scope global dynamic bnep0
       valid_lft 3595sec preferred_lft 3595sec
    inet6 fe80::d6ba:973a:75b3:9ef3/64 scope link 
       valid_lft forever preferred_lft forever
20: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 1a:f2:ac:0a:e1:0f brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.10/24 brd 192.168.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::18f2:acff:fe0a:e10f/64 scope link 
       valid_lft forever preferred_lft forever
root@newnmd:~# 

Le pan0 correspond à ceci :

Personal Area Networking Profile (PAN) allows Bluetooth devices to form 
an ad-hoc network, access a remote network through a network access point.

Je n’ai pas cherché à le désactiver … je me sers du bluetooth pour sortir …
Il est peut être inutile en effet.

PascalHambourg, quand tu parles de l’interface de sortie qui doit être bnep0, c’est déjà la gateway sur le Host …
cela doit l’être aussi sur le Guest ?

Dans ce cas, si j’ai compris, le Guest s’y retrouve donc grâce au NAT que je dois implémenter (Sur le HOST … ) via iptables
je mettrai l’IP fowarding sur le Host…

Merci pour ces pistes, je reviens vers vous quoi qu’il en soit pour faire part de ces modifs …

sk4hrr et PascalHambourg ont bien répondu, je pense.

Ma supposition pour activer le source NAT (SNAT) sur iptables :

sudo iptables -t nat -A POSTROUTING --out-interface ens3 -j SNAT --to-source 192.168.0.15

Les cibles SNAT et MASQUERADE sont très proches. SNAT est un tout petit peu plus adapté à une situation où l’adresse IP “de sortie”, ici 192.168.0.15, ne change pas.


AnonymousCoward

Non, une interface n’est pas une passerelle (ou plutôt un routeur, le terme “passerelle” étant à éviter car trop vague). bnep0 est l’interface connectée au routeur par défaut. Le routeur par défaut est désigné par l’adresse de “next hop” dans la route par défaut : 192.168.0.254.

Bien sûr que non, puisque cette interface appartient à l’hôte. Quant au routeur, 192.168.0.254 n’est pas connecté directement à l’invité donc il ne peut être son routeur par défaut. Le routeur par défaut de l’invité, c’est l’hôte avec son adresse 192.168.0.10 (et non 192.168.0.254 comme on peut voir dans la route par défaut de l’invité, dont on se demande d’où elle sort).

Raté. Le masquerading doit être mis en place sur l’hôte qui joue le rôle de routeur, pas sur l’invité.

En l’occurrence, l’adresse IP de l’interface de sortie de l’hôte bnep0 est dynamique donc MASQUERADE s’impose.

1 J'aime

Bonjour,
Je prends note de ces réponses et essaie d’en faire le tri.
Je dois reprendre l’autre partie de du travail que je fais (Dev) donc je me débrouille sans KVM, directement avec les services installés sur le HOST … je sais c’est pas beau mais bon, faut gérer les priorités.
En fait, tout cela fonctionnait avant avec une BOX, ou j’avais configuré les IP du HOST du GUEST sur le même réseau privé attribué par Dhcp par la BOX (free).
Donc le Guest voyait bien le routeur … (192.168.0.254) => la freebox
Maintenanant j’ai plus de box, j’ai un smartphone, et le routeur sur le HOST est donc
192.168.44.1

root@newnmd:~# ip route
default via 192.168.44.1 dev bnep0 proto static metric 750 
192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.10 
192.168.44.0/24 dev bnep0 proto kernel scope link src 192.168.44.148 metric 750 

Par contre @ PascalHambourg, l’interface de sortie n’est peut être pas dynamique … en tout cas pour l’adresse privé, c’est toujours 192.168.44.148 avec un masque de 24 .

6: bnep0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 5c:ac:4c:f6:56:d7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.44.148/24 brd 192.168.44.255 scope global dynamic bnep0
       valid_lft 3431sec preferred_lft 3431sec
    inet6 fe80::d6ba:973a:75b3:9ef3/64 scope link 
       valid_lft forever preferred_lft forever

Merci pour vos éclairages en tout cas … je vais me pencher dès que possible sur cette problèmatique.

La sortie d’ip addr que tu postes est d’un avis différent :

Cette adresse est probablement configurée par DHCP. Il se peut que l’adresse attribuée soit toujours la même, mais ça reste de la configuration dynamique donc susceptible de varier.

@Pascal

inet 192.168.44.148/24 brd 192.168.44.255 scope global dynamic bnep0

Bien vu … effectivement les outils iproute2 sont plus précis et verbeux que les vieux nettools … il faut vraiment que je me mette à jour niveau réseaux …
En tout cas Merci, et dès que je peux je corrige tout cela et reviens vers vous.
Encore merci à ce Forum Réactif !!