#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr - ola.taltan_AT_laposte.net                                #
############################################################################################
# Script bridging_vb_tap_v1.0.sh                                                           #
# Licence : GNU / GPL                                                                      #
# Inspiré de la doc sur le wiki Ubuntu                                                     #
#  - http://doc.ubuntu-fr.org/virtualbox_reseau#alternative                                #
# et du post de kesou sur le forum Ubuntu                                                  #
#  - http://forum.ubuntu-fr.org/viewtopic.php?id=148609                                    #
############################################################################################
# Dans le cadre de l'utilisation de VirtuaBox en mode pont                                 #
#  - Création des interfaces réseaux virtuelles tapX                                       #
#  - Création du pont réseaux entre l'interface physique et les virtuelles                 #
############################################################################################
# Dépendances                                                                              #
############################################################################################
#  - Nécessite les paquets bridge-utils et uml-utilities                                   #
#    => sudo apt-get install bridge-utils uml-utilities                                    #
############################################################################################
# 24/03/08 - v1.0 - Création                                                               #
############################################################################################
## Variables
gateway=192.168.0.254		# adresse ip de la passerelle
bridge=br0			# nom du pont
if_hote=eth0			# interface physique actuelle
DHCP=NO				# DHCP pour le pont YES | NO
bridge_ip=192.168.0.1		# adresse ip du pont si DHCP=NO
bridge_mask=255.255.255.0	# masque du pont si DHCP=NO
bridge_bc=192.168.0.255		# adresse ip de broadcast si DHCP=NO
nb_tap=2			# nombre d'interfaces virtuelles tapX
vb_user=taltan			# utilisateur de VirtualBox

## Fonction de mise en place du pont
start () {
	chmod 0666 /dev/net/tun		
	brctl addbr $bridge		# création du pont
	brctl addif $bridge $if_hote	# ajout de l'interface physique dans le pont
	var0=0				# initialisation du compteur de tapX
	while [ "$var0" -lt "$nb_tap" ]
	do	
		name_tap=tap${var0} 	# initialisation du nom de l'interface virtuelle, tap0 pour la première, tap1, tap2...	
		tunctl -u $vb_user -t $name_tap	# création de l'interface virtuelle
		ifconfig $name_tap up		# activation de l'interface virtuelle 		
		brctl addif $bridge $name_tap	# ajout de l'interface virtuelle dans le pont
		ifconfig $name_tap 0.0.0.0 promisc up	# configuration ip de l'interface virtuelle		
		let "var0 += 1"			# incrémentation du compteur de tapX
	done	
	ifconfig $if_hote 0.0.0.0 promisc up	# configuration ip de l'interface physique
	if [ "$DHCP" == "YES" ]; then		# si DHCP=YES
		dhclient $bridge		# configuration dhcp pour le pont
		sleep 10
	else					# si DHCP=NO
		ifconfig $bridge $bridge_ip netmask $bridge_mask broadcast $bridge_bc # configuration manuelle pour le pont
	fi
	route add default gw $gateway		# configuration de la passerelle pour le pont
	brctl showstp $bridge			# affiche les info sur le pont
}

## Arrêt et suppression du pont puis restauration de la configuration réseau initiale
stop () {
        TESTPONT=$(/sbin/ifconfig | grep $bridge)	# si aucun pont configuré, message
        if [ -z "$TESTPONT" ]; then
                echo "Attention : pont réseau non trouvé. Vérifier la config réseau ..."
                exit 1
        fi	       
        ifconfig $bridge down		# désactivation du pont
        brctl delbr $bridge		# suppression du pont
	var0=0	
	while [ "$var0" -lt "$nb_tap" ] # pour chaque interface virtuelle tapX
	do	
		name_tap=tap${var0} 		
		tunctl -d $name_tap	# suppression	
		let "var0 += 1"
	done
        ifconfig $if_hote down		# restauration de la configuration réseau initiale
	ifconfig $if_hote up
	if [ "$DHCP" == "YES" ]; then	
	sleep 5	
	fi
	ifconfig			# affiche la configuration réseau
}

## information sur le bridge
info () {
        brctl showstp $bridge
}

## Point d’entrée du script
case $1 in
        start)
                start $2
        ;;
        stop)
                stop $2
        ;;
        info)
                info $2
        ;;
        *)
                echo $"Utilisation: bridging {start|stop|info}"
                exit 1
esac
exit 0



 

