Translation(s): English - Français


Etablir des ponts entre les connexions réseaux

Introduction

Ponter (Bridging) votre connexion réseau est une méthode pratique pour partager votre connexion Internet entre deux (ou plus) ordinateurs. Cela est très pratique si vous ne pouvez pas acheter un routeur avec plus qu'un seul port Ethernet, ou si vous êtes un étudiant dans un dortoir avec des prises Ethernet limités et pas de routeur.

Basiquement, établir un pont consiste à connecter un ordinateur dans un autre qui a déjà une connexion à un réseau plus large (comme Internet) et laisser l'ordinateur ponté utiliser le réseau de l'ordinateur connecté. Pour faire cela, l'ordinateur connecté a besoin d'avoir deux ports Ethernet, un pour le gros réseau, et l'autre pour l'ordinateur à ponter. Assurez vous avant de commencer que l'ordinateur par lequel le pont va passer a bien deux ports Ethernet, et que le matériel est capable d'établir des pont des Ethernet entre eux (Cela devrait être probablement le cas).

Un autre scénario pour utiliser le pontage est de fournir des capacités de redondance réseau. Par exemple en utilisant deux interfaces réseaux pour se connecter à deux switchs ayant le spanning tree d'activé et ainsi fournir une redondance en cas de défaut sur un câble, une interface ou un switch Cela demande d'avoir le spanning tree d'activé sur les deux interfaces pontés et sur les switchs.

Installer le logiciel

Le programme dont vous allez avoir besoin s'appelle brctl et fait parti de bridge-utils. Trouvez le dans Synaptic, ou installez le en utilisant cette commande :

 # aptitude install bridge-utils 

Ce programme nous permet de configurer et d'utiliser l'interface pont(bridge). L'interface pour le pont apparaît comme une nouvelle interface dans ip link, un peu comme eth0 ou eth1. Elle n'existe pas physiquement sur votre ordinateur, mais c'est une interface virtuelle qui prends juste les paquets depuis une interface physique et de manière transparente les route vers l'autre.

Configurer le pont(Bridge)

Configuration manuelle

Note: Toutes ces commandes doivent être émises sur l'ordinateur avec la connexion réseau existante. Pour configurer l'ordinateur qui va être ponté, faites le normalement, comme si vous le feriez pour n'importe quel autre ordinateur. Vous POUVEZ utiliser le DHCP, ou bien une adresse statique. Cela n'a pas d'importance.

Note: Si, après avoir essayé d'utiliser le pont, vous trouvez votre lien mort et qui refuse de fonctionner à nouveau, cela peut être le routeur/switch en amont qui bloque les "switchs non autorisés" dans le réseau (par exemple, en détectant les paquets BPDU). Il faudra changer sa configuration pour déclarer explicitement la machine/port hôte comme un "switch".

La première étape pour créer un réseau bridge est de le créer. Tapez cette commande pour créer la nouvelle interface.

 # brctl addbr br0

Le nom br0 est totalement à votre convenance, c'est juste un exemple que j'avais choisis pour l'article du wiki. Maintenant que vous avez votre pont, vous devrez ajouter les interfaces qui vont être pontées. Vous pouvez vérifier la numération de vos cartes Ethernet avec (eth0, eth1, etc.) :

 # ip addr show

Ajoutez les deux interfaces, celle du second ordinateur, et celle qui mène au réseau existant. Faites le avec cette commande :

 # brctl addif br0 eth0 eth1

Cela ajoutera les deux interfaces eth0 et eth1 au pont(bridge) br0, tout simplement. Il n'y a pas de différence sur la manière d'ajouter les ponts, ni dans l'ordre pour le faire, ni de commandes spéciales à ajouter pour pouvoir les distinguer. Ne vous souciez pas de cela.

Bien, maintenant nous avons nos ponts, activez les interfaces, et tout sera configuré!

Configurer le pontage dans /etc/network/interfaces

Pour avoir un pont un peu plus permanent, vous aurez besoin d'éditer /etc/network/interfaces. En utilisant notre exemple de noms, faites le ressembler à ça, et ce sera configuré (si vous souhaitez utiliser le DHCP) :

 # This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
  
 # The loopback network interface
 auto lo br0
 iface lo inet loopback

 # Configurez les interfaces manuellement en évitant les conflits avec le manager réseau.
 iface eth0 inet manual

 iface eth1 inet manual

 # Configuration du pont(bridge)
 iface br0 inet dhcp
        bridge_ports eth0 eth1

Pour activer votre pont, vous avez juste à lancer  # ifup br0 et il montera les autres interfaces nécessaire, même s'il n'y a aucune mention dans le fichier interfaces à propos des interfaces pontées.

Si vous préférez des adresses IP statiques, vous pouvez juste ajouter les options pour IP statiques sous le réglages de l'interface br0, un peu comme ceci :

 # This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
  
 # The loopback network interface
 auto lo br0
 iface lo inet loopback
 
 # Configurez les interfaces manuellement en évitant les conflits avec le manager réseau.
 iface eth0 inet manual

 iface eth1 inet manual

 # Configuration du pont(bridge)
 iface br0 inet static
        bridge_ports eth0 eth1
        address 192.168.1.2
        broadcast 192.168.1.255
        netmask 255.255.255.0
        gateway 192.168.1.1

Options utiles pour les environnements virtualisés

Les autres options pratiques à utiliser dans le cadre d'un environnement virtualisés sont :

        bridge_stp off       # désactiver le protocole Spanning Tree
        bridge_waitport 0    # pas de délais avant qu'un port soit disponible
        bridge_fd 0          # pas de délais de transfert
        bridge_ports none    # si vous ne voulez ponter aucun port
        bridge_ports regex eth* # utiliser une expression régulière pour définir les ports

Configurer les variables "bridge" du noyau

Il y a plusieurs variables qui affecte le pontage. Dans certains cas vous aurez besoin de modifier ces variables. Il y a deux options répandues :

Dans ce dernier cas, le script init procps devra s'occuper de les charger durant le démarrage. Cependant, sur Squeeze il ne le fait pas, et vous avez besoin de le relancer depuis /etc/rc.local (ou similaire) :

# /etc/rc.local

# Load kernel variables from /etc/sysctl.d
/etc/init.d/procps restart

exit 0

Libvirt et le pontage(bridging)

Libvirt est une API de virtualisation qui support KVM ainsi que d'autres techniques de virtualisation. Dans beaucoup de cas, il est souhaitable de partager une interface réseau physique avec les invités, c'est à dire, configurer un pont qu'ils peuvent utiliser. Cette opération se composent de deux parties :

Vous pouvez regarder si le pontage fonctionne correctement en regardant la sortie de brctl :

root@server:/etc/libvirt/qemu# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.001ec952d26b       yes             eth0
                                                        vnet0
                                                        vnet1
                                                        vnet2
virbr0          8000.000000000000       yes

Comme on peut le voir, les interfaces des invités vnet0, vnet1 et vnet2 sont liées avec l'interface physique eth0 dans le pont br0. L'interface virbr0 est utilisé seulement pour un connexion en NAT avec libvirt.

Etablir un pont avec une carte réseau sans fil

De la même manière que vous pontez des interfaces réseaux câbles, vous pouvez ponter une interface Ethernet et une interface sans fil. Cependant, la plupart des points d'accès vont rejeter les trames qui ont une adresse source non identifié par le point d'accès. Depuis que Linux fait du pontage Ethernet de manière transparente (sans modifer les trames entrantes ou sortantes), nous avons besoin de configurer quelques règles pour faire cela avec un programme nommé ebtables.

Présentation d'ebtables

ebtables est quasiment comme iptables, à l'exception qu'il opére sur la couche liaison (MAC) du modèle OSI, au lieu de la couche réseau. Dans notre cas, cela permet de changer l'adresse MAC source pour toutes nos trames. C'est pratique parce que l'on trompe notre point d'accés, en lui faisant croire que toutes les trames viennent de la machine authentifiée.

Modifications avec bridge-utils

Avant que cela ne fonctionne, vous aurez besoin de modifier votre fichier /etc/network/interfaces et d'ajouter cela au paragraphe bridge :

 pre-up iwconfig wlan0 essid $YOUR_ESSID
 bridge_hw $MAC_ADDRESS_OF_YOUR_WIRELESS_CARD

Évidemment en remplacent $MAC_ADDRESS_OF_YOUR_WIRELESS_CARD avec l'adresse MAC de votre carte sans fil, et $YOUR_ESSID par le ESSID de votre réseau sans fil. Si vous ne connaissez pas votre adresse MAC, vous pouvez la trouver en tapant

 # ip link show wlan0

wlan0 est votre interface sans fil. Votre adresse MAC est listé comme l'HWaddr.

Configurer les règles

Premièrement, installez ebtables :

 # aptitude install ebtables

Maintenant vous pouvez commencer à configurer les règles. La syntaxe pour ebtables est presque la même que pour iptables, donc si vous avez une expérience avec iptables, cela devrait vous être familier.

La première règle que vous allez configurer va changer l'adresse MAC source de toutes les trames en provenance du point d'accés pour l'adresse MAC de votre pont.

 # ebtables -t nat -A POSTROUTING -o wlan0 -j snat --to-src $MAC_OF_BRIDGE --snat-arp --snat-target ACCEPT

La règle suivante demande de savoir la MAC et l'IP de chaque machine en amont de votre pont. Remplacez $MAC et $IP avec celles-ci.

 # ebtables -t nat -A PREROUTING -p IPv4 -i wlan0 --ip-dst $IP -j dnat --to-dst $MAC --dnat-target ACCEPT
 # ebtables -t nat -A PREROUTING -p ARP -i wlan0 --arp-ip-dst $IP -j dnat --to-dst $MAC --dnat-target ACCEPT

Cela peut être fastidieux à taper à chaque fois que vous ajoutez un nouvel ordinateur à un switch derrière le pont, donc j'ai écris pour vous un script pour faire cela.

   1  #!/bin/bash
   2  # addcomputer
   3  # Will Orr - 2009
   4 
   5  INIF="wlan0"
   6 
   7  function add_ebtables () {
   8    COMPIP=$1
   9    COMPMAC=$2
  10 
  11    ebtables -t nat -A PREROUTING -i $INIF -p IPv4 --ip-dst $COMPIP -j \
  12    dnat --to-dst $COMPMAC --dnat-target ACCEPT
  13    ebtables -t nat -A PREROUTING -i $INIF -p ARP --arp-ip-dst $COMPIP \
  14    -j dnat --to-dst $COMPMAC --dnat-target ACCEPT
  15 
  16  }
  17 
  18  if [[ $# -ne 2 ]]; then
  19    echo "Usage: $0 ip mac"
  20  elif [[ $(whoami) != "root" ]]; then 
  21    echo "Error: must be root"
  22  else
  23    add_ebtables $1 $2
  24  fi

Sauvegarder vos règles

Après que vous ayez écris vos règles ebtables, vous aurez besoin de les sauver dans un fichier atomic. Sinon, vos règles ne vont pas être conservées. Les sauver est cependant assez simple.

 # EBTABLES_ATOMIC_FILE=/root/ebtables-atomic ebtables -t nat --atomic-save

Et rechargez les comme ceci :

 # EBTABLES_ATOMIC_FILE=/root/ebtables-atomic ebtables -t nat --atomic-commit

Si vous voulez charger vos règles ebtables au démarrage, l'endroit pratique pour coller la commande de commit est dans /etc/rc.local. Placez le juste là avant la ligne exit 0

Aggrégation de liens (LACP) et VLAN

Voici un exemple de fichier /etc/network/interfaces pour un agrégat de deux liens avec des VLAN définis sur ce même lien.

Notes: Testé sur Debian Jessie 8.0 rc1 le 3/11/2015 (AMD64)

Des paquets sont recquis pour le vlan et l'agrégation (bonding) :

aptitude install vlan ifenslave
echo "8021q" >> /etc/modules

Le fichier /etc/network/interfaces ressembler à cela :

auto lo
iface lo inet loopback
# Il y a une autre que j'oublie ici ... voir la configuration de l'agrégat plus bas

###### Bonded 10Gig setup - LACP Aggregation ####### agrégat entre eth4 et eth5
#### (Configurer le switch comme un trunk avec LACP) puis diviser les VLAN.

## Voir l'état avec:   cat /proc/net/bonding/bond0

auto bond0
iface bond0 inet manual
        up ifconfig bond0 0.0.0.0 up
        slaves eth4 eth5
# bond-mode 4 = 802.3ad
        bond-mode 4
        bond-miimon 100
        bond-downdelay 200
        bond-updelay 200
        bond-lacp-rate 1
        bond-xmit-hash-policy layer2+3


auto vlan1023
iface vlan1023 inet static

        address 18.28.4.123
        netmask 255.255.255.0
        gateway 18.28.4.1
        vlan-raw-device bond0


auto vlan1024
iface vlan1024 inet static

        address 10.15.160.1
        netmask 255.255.255.0
        gateway 10.15.160.100
        vlan-raw-device bond0

Plus d'informations


CategoryNetwork