Création de l’interface virtuelle
[EDIT] J’ai finalement opté pour un pont br0 qui associe dummy0 et une carte réseau physique eth1. Dans ces conditions, aucune des 2 cartes n’a d’adresse IP directement, seul br0 en possède une, et dummy0 peut rester en NOARP, cela ne genera pas la circulation des paquets.
br0 est toujours en up (contrairement à eth1 qui ne l’est pas si pas de cable branché, ce qui empeche de bridger une VM VBox dessus sans cable) et l’ARP est activé par défaut (contrairement à dummy0, ce qui empêche de bridger la VM VBox sur dummy0 sans scripter l’activation de l’ARP…)
La suite reste ici à titre informatif [/EDIT]
On ajoute ensuite une entrée dans le /etc/network/interfaces
auto dummy0
iface dummy0 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
pour une adresse statique. On redémarre le service :
sudo service networking restart
et on vérifie que la carte est bien détectée avec sudo ifconfig dummy0
, qui doit donner quelque chose comme ça :
dummy0: flags=195<UP,BROADCAST,RUNNING,NOARP> mtu 1500
inet 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255
inet6 fe80::440f:8eff:fe69:4e35 prefixlen 64 scopeid 0x20<link>
ether 46:0f:8e:69:4e:35 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 107 overruns 0 frame 0
TX packets 606 bytes 43672 (42.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
On voit qu’elle porte le flag NOARP, alors que l’arp est nécessaire pour pouvoir communiquer en ethernet. On tape donc
sudo ip l set dummy0 up arp on
On peut aussi, si on le souhaite, activer le flag multicast
sudo ip l set dummy0 up multicast on
La route vers le nouveau réseau est normalement configurée automatiquement.
Lien avec VirtualBox
Mon LAN principal est en 192.168.1.x.
Je souhaite mettre en place un réseau distinct derrière cette carte, qui aie sa propre plage IP (192.168.2.x) et serveur DHCP, pour faire des tests de serveur. Je souhaite toutefois que les VM dans ce réseau puissent avoir accès à mon LAN principal (et vice-versa), et à Internet.
Config dans VBox
Il suffit de paramétrer la carte réseau de la VM en accès ponté avec la carte dummy0.
Plusieurs VM peuvent être bridgées à cette interface, elles pourront toutes communiquer ensemble (comme autour d’un switch) ainsi qu’avec Internet via l’hôte.
Forward ipv4 et routage
Voir ce post.
Il faut activer le masquerading (NAT) sur les paquets sortant par l’interface eth0 (à adapter avec le nom de l’interface réseau principale, connectée à internet. Ainsi, les périphériques ne connaissant pas le réseau VBox auront l’impression que les requêtes viennent directement de l’hôte, connu.
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Cela suffit à donner au système invité un accès complet à routes les ressources LAN/Internet.
Sous Debian, les règles iptables sont défaut perdues au reboot. Le paquet iptables-persistent peut s’occuper de les sauvegarder et restaurer au démarrage.
Cependant, je souhaitais aussi que les machines de mon LAN principal puissent accéder à toutes les machines virtuelles de mon réseau VBox. Pour ceci, il faut utiliser une route qui va vers le réseau 192.168.2.0/24 et qui a pour passerelle l’ip de la machine hôte sur le réseau principal, par exemple en 192.168.1.x. Ainsi, n’importe quel machine du LAN physique pourra accéder à n’importe quelle machine du LAN virtuel.
Cette route doit être paramétrée en statique dans le routeur, et peut éventuellement être distribuée directement aux clients par DHCP. Tous les routeurs ne permettent hélas pas ces 2 possibilités.