Comment créer un pont de réseau wifi avec qemu sous OS X?

4

J'ai attrapé un petit CD live FreeBSD et QEMU , et j'essaie de créer un pont entre ma connexion Wi-Fi Mac OS X 10.8 afin que le système d'exploitation invité soit disponible sur mon réseau local. Cependant, le système d'exploitation invité ne reçoit jamais de bail DHCP.

Cela fonctionne parfaitement avec VirtualBox en mode réseau "ponté", je sais donc que cela peut être fait. Je dois le faire fonctionner avec QEMU car VirtualBox ne prend pas en charge l'architecture dont j'ai besoin pour ce projet.

Voici ce que j'ai fait jusqu'à présent, basé sur des heures passées à googler:

  1. TUNTAP installé pour OS X

  2. A demandé à OS X de transférer soi-disant tous les paquets, même ARP: ( NOTE: cela ne semble pas fonctionner.)

    $ sudo sysctl -w net.inet.ip.forwarding=1
    $ sudo sysctl -w net.link.ether.inet.proxyall=1
    $ sudo sysctl -w net.inet.ip.fw.enable=1
    
  3. Créé un pont:

    $ sudo ifconfig bridge0 create
    $ sudo ifconfig bridge0 addm en0 addm tap0
    $ sudo ifconfig bridge0 up
    $ ifconfig
    bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ether ac:de:xx:xx:xx:xx
        Configuration:
            priority 0 hellotime 0 fwddelay 0 maxage 0
            ipfilter disabled flags 0x2
        member: en0 flags=3<LEARNING,DISCOVER>
                 port 4 priority 0 path cost 0
        member: tap0 flags=3<LEARNING,DISCOVER>
                 port 8 priority 0 path cost 0
    tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        ether ca:3d:xx:xx:xx:xx
        open (pid 88244)
    
  4. Commencé tcpdumpavec -Il'espoir d' activer le mode promiscuous sur le périphérique wifi :

    $ sudo tcpdump -In -i en0
    
  5. Exécutez QEMU en utilisant les instructions réseau pontées :

    $ qemu-system-x86_64 -cdrom mfsbsd-9.2-RELEASE-amd64.iso -m 1024 \
      -boot d -net nic -net tap,ifname=tap0,script=no,downscript=no
    

Mais le système invité n’obtient jamais de bail DHCP:

freebsd

Si je tcpdump -ni tap0, je vois beaucoup de trafic du réseau sans fil. Mais si je tcpdump -ni en0, je ne vois aucun trafic DHCP du système d'exploitation invité QEMU.

Des idées?

Mise à jour 1: J'ai essayé de sudo defaults write "/Library/Preferences/SystemConfiguration/com.apple.Boot" "Kernel Flags" "net.inet.ip.scopedroute=0"redémarrer en suivant cette suggestion de la liste de diffusion , mais cela n'a pas aidé. En fait, le mode ponté de VirtualBox a cessé de fonctionner.

Mise à jour 2: il est intéressant de noter que l’interface virtuelle de l’invité QEMU n’obtient que des paquets de diffusion. Peut-être que je dois ajouter un itinéraire en quelque sorte? Hmm ...

paquets de diffusion

un nerd payé
la source
tcpdump -ni tap0montre DHCP d'invité? Avez-vous essayé de jouer avec le filtre de paquets?
semaine
Si vous démarrez la machine virtuelle dans NAT, pouvez-vous accéder à votre réseau local et à Internet?
MariusMatutiae
@week pf est définitivement désactivé sur l'hôte Mac.
Un nerd payé
@MariusMatutiae Oui, le NAT fonctionne bien.
Un nerd payé
Pouvez-vous nous dire pourquoi vous utilisez en0 pour le pont? Je pensais que vous essayiez de partager votre connexion wifi avec FreebSD. De plus, vous n’avez jamais rien dit sur la configuration du fichier dans FreeBSD. Avez-vous apporté l'interface? Votre routeur a-t-il demandé un numéro IP? Enfin, avez-vous configuré la table de routage?
MariusMatutiae

Réponses:

1

Comme vous l'avez souligné, les logiciels de machine virtuelle tels que VirtualBox ont des moyens de passer à une interface Wi-Fi. Cependant, c'est apparemment difficile à faire et ce n'est pas la même chose que ifconfig. Autant que je sache, ifconfig effectue un pont Ethernet , c'est-à-dire qu'il ne peut ponter que des combinaisons d'interfaces Ethernet réelles ou d'interfaces Ethernet "TAP" virtuelles. Cela inclut donc la transition entre deux interfaces TAP. Je ne sais pas sur les interfaces TUN.

Le problème que vous rencontrez avec QEMU est un problème que j'ai résolu récemment avec les émulateurs Macintosh SheepShaver et Basilisk II, qui peuvent également charger leur propre interface TAP fournie par TunTapOSX. Ce que j'ai fait était de configurer un serveur OpenVPN en mode pont dans une machine virtuelle Linux sur un ordinateur séparé, ce qui prend un certain travail, mais constitue un outil extrêmement utile. Ensuite, si vous êtes sur le même réseau local que le serveur VPN, vous pouvez vous y connecter via l'adresse IP privée du serveur. Je le note dans mon guide, lié ci-dessous. Suivez le premier guide pour configurer le serveur OpenVPN et le deuxième guide pour connecter l’émulateur.

http://www.emaculation.com/doku.php/bridged_openvpn_server_setup http://www.emaculation.com/doku.php/wireless_appletalk_ss_bii_osx

Le problème est que l'ordinateur exécutant le serveur OpenVPN doit être connecté au routeur via Ethernet. Notez également que cet ordinateur ne peut pas exécuter un émulateur utilisant un pont Ethernet, car cela pourrait interférer avec le pontage requis dans la machine virtuelle Linux pour OpenVPN, ou inversement.

NucAr
la source
1

Essayez ceci lorsque vous créez un pont:

sudo ifconfig en0 down ####Shut Down the interface #####
sudo ifconfig en0 inet delete ####To clean out the old sys hooks. Don't worry you did uninstall the driver ##### Then:

sudo ifconfig bridge0 create
$ sudo ifconfig bridge0 addm en0 addm tap0
$ sudo ifconfig bridge0 up

Je suis passé par là avec GNS3 et un laboratoire Riverbed Steelhead. Je l’ai donc expérimenté moi-même.

Cela amènera votre pont.

Nasir Otis
la source
Bien que vous ayez peut-être raison, mais un problème de formatage le rend peu attrayant. Vous devriez vous référer à la manière d’écrire une bonne réponse et pourquoi certaines réponses sont supprimées
jeu de mots