Bridge Tap virtualiser

Pour les besoins de la formation et satisfaire à ma feignantise voici un petit script permettant de créer des interfaces réseaux virtuelles

Voila mon problème: Travaillant régulièrement à virtualiser des réseaux à des fins pédagogiques, j'ai eu besoin d'un outil me permettant de gérer facilement des interfaces virtuelles.

Présentation du script :

Le script permet de créer 2 types d'interfaces :

  • bridge : caractérisée par une adresse de réseau et un masque. Cette interface constitue un Bridge Ethernet
  • tap : interface Ethernet à proprement parler. C'est sur cette interface que seront connectées les stations d'un même réseau

Visuellement voila ce à quoi ça peux ressembler Bridge Tap Link On peut envisager l'interaction de plusieurs logiciels (VirtualBox, GNS3) pour mettre en place des configurations beaucoup plus evoluées. VI complex

Installation du script :

pour installer le script rien de plus facile :

deux méthodes s'offrent à vous :

  1. installer le script dans un $PATH déjà existant
  2. creer un dossier contenant vos utilitaires favoris et ajouter ce chemin aux variables $PATH dans ~/.bashrc

1ere méthode :

# wget "http://blog.tools-fm.com/public/img/VI_GUI/VI_GUI_function" && chmod +x VI_GUI_function && chown root:root VI_GUI_function && mv VI_GUI_function /usr/bin/

(vous pouvez également le déplacer dans /usr/local/bin) Il suffit ensuite d'executer un clic droit sur la barre gnome-panel >> ajouter au tableau de bord >> lanceur d'application personnel et de renseigner les champs comme indiqué dans la capture ci-dessous Propriétés du lanceur Note : le script sera ainsi accessible par tous les utilisateurs

2eme méthode :

Si vous préférez créer votre propre répertoire de scripts persos procédez ainsi

$ wget "http://blog.tools-fm.com/public/img/VI_GUI/VI_GUI_function" && chmod +x VI_GUI_function && mkdir /scripts/

il ne vous reste plus qu'à éditer votre fichier ~/.bashrc et d'y ajouter la ligne suivant : PATH=$PATH:$HOME/scripts pour qu'il prenne en compte le nouveau chemin (la prise en charge du nouveau chemin s'effectue a l'ouverture d'une nouvelle connexion)

Et maintenant le script en question :

Note importante : encore en développement le script ci-dessous est extrêmement buggé ( presque aucune vérification des valeurs saisies et quelques problèmes d'interruptions de boucles.) Cependant si vous saisissez les informations correctes ce dernier fonctionne vraiment très bien.

pour utiliser ce script les paquets bridge-utils et uml-utilities ainsi que zenity sont nécessaires

Update :

Version :1.2

  • fixed : exit when cancel button clicked
#!/bin/bash

APPLI_VERS="Virtual Interface Launcher 1.2"

###############################################################
### Tap Section
###############################################################


# Create a Tap interface for a $user and a $TAP_IF name
function Tap_Create() {
        tunctl -t $TAP_IF -u $user
        ip link set up dev $TAP_IF
}

# Erase a Tap interface for a $user and a specified $TAP_IF and remove it from it associated Bridge
function Tap_Erase ()   {
        ip link set down dev $TAP_IF
        tunctl -d $TAP_IF -u $user
}

# Add a specific $TAP_IF to $BR
function Add_Tap_To()   {
        brctl addif $BR $TAP_IF
}

# Remove a specific $TAP_IF from $BR
function Del_Tap_From() {
        brctl delif $BR $TAP_IF
}

# Select an Active interface
function Select_Tap()   {
         arg=`grep "-" /proc/net/if_inet6 |cut -d" " -f6 |  zenity  --list  --title  "$APPLI_VERS" --text "Select the interface you want to remove" --column "Choice"`
        TAP_IF=$arg
}

function Get_Link_Tap_To()      {
         arg=`ifconfig | grep "VBr" |cut -d" " -f1|  zenity  --list  --title  "$APPLI_VERS" --text "Select the bridge you want virtual interface to link to" --column "Choice"`
        BR=$arg
}
###############################################################
### Br functions
###############################################################
# Create a $BR
function Br_Create()    {
        brctl addbr $BR
        ip link set up dev $BR
        ip addr add $BR_IP dev $BR
}
# Erase a $BR
function Br_Erase()     {
        ip addr del $BR_ROUTE dev $BR
        ip link set down dev $BR
        brctl delbr $BR
}
# Check that a bridge is already set
function Is_Bridge_Exist()      {
IS_BR_SET=`ifconfig | grep VBr_br`
                if [ -z "$IS_BR_SET" ]
                        then
                                TYPE="warning"
                                TEXT="You have to set up a virtual bridge first"
                                ZENITY
                                WhatToDo
                fi
}

# Get route address from the given $BR_IP
function Route_Calc()   {
        BR_ROUTE=`echo $BR_IP | sed -e "s/.[0-255]$/0/"`
}

# Check if the bridge is actually linked to an interface
function Is_Linked()    {
tap=`echo $BR | cut -d'_' -f2`
value=`ifconfig |grep ^$tap`
if [ -n "$value" ]
        then
                TYPE="warning"
                TEXT="$tap is still linked to some active interfaces
Please remove those interfaces before removing the bridge they're linked to"

                ZENITY
                exit 0
fi
}

# Select an Active bridge
function Select_Bridge()        {
         arg=`ifconfig | grep VBr |cut -d" " -f1|  zenity  --list  --title  "$APPLI_VERS" --text "Select the bridge you want to remove" --column "Choice"`
        BR=$arg
}

###############################################################
### Zenity Section
###############################################################
## Manage zenity calls easier
function ZENITY()       {
        if [ $TYPE = 'entry' ]
        then
        arg=`zenity --$TYPE --title="$APPLI_VERS" --text="${TEXT}" --entry-text=""`
        Check_Return
        elif [ $TYPE = 'warning' ]
        then
        arg=`zenity --$TYPE --title="$APPLI_VERS" --text="${TEXT}"`
        Check_Return
        elif [ $TYPE = 'question' ]
        then
                arg=`zenity --$TYPE --title="$APPLI_VERS" --text="${TEXT}"`
                Check_Return
        fi     
}



###############################################################
### Var section
###############################################################



function WhatToDo()     {
        ACTION=`zenity --list --text="Welcome to VI Launcher \n please select an action to do \n\n Don't forget that you have to create \n a bridge first to link tap on it before" --column "Action" "Start a Virtual Bridge" "Start a Virtual Tap" "Stop a Virtual Bridge" "Stop a Virtual Tap"`
        case $ACTION in
                'Start a Virtual Bridge')
                action=1
                ;;
                'Start a Virtual Tap')
                Is_Bridge_Exist
                action=2
                ;;
                'Stop a Virtual Bridge')
                action=3
                ;;
                'Stop a Virtual Tap')
                action=4
                ;;
                *)
                Check_Return `return "$?"`
                ;;
        esac

}

###############################################################
### Var collect Section
###############################################################

function Get_User()     {
        TYPE='entry'
        TEXT="User to give privilege on the virtual iface
Exemple : $USER"

        ZENITY
        user=$arg
}

function Get_Br_Name()  {
        TYPE='entry'
        TEXT="Name of the Virtual Bridge to create
Exemple : br0"

        ZENITY
        BR="VBr_"$arg
}

function Get_Tap_Name() {
        TYPGet_UserE='entry'
        TEXT="Name of the virtual interface to link to Virtual Bridge $BR
Exemple : tap0"

        ZENITY
        TAP_IF=$BR"-"$arg
        TAP_IF=`echo $TAP_IF | cut -d'_' -f2`
}

function Get_IP_Address()       {
        TYPE='entry'
        TEXT="IP Address of Virtual bridge $BR_NAME
Exemple : 192.168.3.10/28"

        ZENITY
        BR_IP=$arg
}

###############################################################
### Check var
###############################################################

function Check_Return() {
if [ "$?" = "0" ]
then
        echo "validé"
else
        TYPE="question"
        TEXT="Are you sure you want to cancel the action"
        ZENITY
        if [ "$?" = "0" ]
                then
                exit 0
        fi
fi
}

###############################################################
### Main Program function
###############################################################

WhatToDo
if [ $action = "1" ]
        then
        Get_User
        Get_Br_Name
        Get_IP_Address
        Route_Calc
        Br_Create

elif [ $action = "2" ]
        then
        Get_User
        Get_Link_Tap_To
        Get_Tap_Name
        Tap_Create
        Add_Tap_To
elif [ $action = "3" ]
        then
        Get_User
        Select_Bridge
        Is_Linked
        BR_IP=`ifconfig VBr_br0 |grep "adr:" |cut -d":" -f2 |cut -d" " -f1`
        Route_Calc
        Br_Erase
elif [ $action = "4" ]
        then
        Get_User
        Select_Tap
        BR=`cat /proc/net/if_inet6 |grep "_" |cut -d"-" -f1 |cut -d" " -f7`
        Del_Tap_From
        Tap_Erase
fi

Commentaires

1. Le mercredi, 3 février 2010, 14:24 par cherif

Salut
je suis un débutant sur Ubuntu et j'ai installe GNS3
je suis actuellement en formation reseau et je me suis inscrit au CCNA
alors j'ai fait :
sudo wget "http://fmueth.free.fr/blog/public/V..." && chmod +x VI_GUI_function && chown root:root VI_GUI_function && mv VI_GUI_function /usr/bin/

j'ai une erreur 2010-01-29 09:09:39 ERREUR 404: Not Found.

peux-tu m'aider ?

en plus je voulais savoir si je pouvais des IOS et ou les prendre ?

Merci

2. Le mercredi, 3 février 2010, 14:40 par flo|va-nu-pied

Salut cherif,
Alors pour l'erreur 404, cela viens du fais que tu utilisais l'ancienne adresse de mon blog. celle fournie dans ce post fonctionne parfaitement. N'hésites pas à me faire part de tes retours si tu tombes sur un problème avec le code fourni. Je regarderais ce que je peux faire.

Concernant les IOS il me semble l'avoir précisé dans la doc ubuntu, il s'agit de logiciels propriétaires donc non distribuables librement.
Mais je pense qu'en cherchant un peu tu devrais facilement trouver ton bonheur sur le net.

En espérant avoir pu te venir en aide.

3. Le jeudi, 20 janvier 2011, 01:52 par Detecteur Incendie

Super article, merci

4. Le vendredi, 4 février 2011, 12:29 par flo|va-nu-pied

Merci pour les encouragements.
Si tu viens à utiliser l'outil n'hésite pas à me faire remonter les problèmes que tu pourrais rencontrer je verrais ce que je pourrais faire.

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

La discussion continue ailleurs

URL de rétrolien : http://blog.tools-fm.com/index.php?trackback/20

Fil des commentaires de ce billet