Outils pour utilisateurs

Outils du site


reseaux_bridge

Bridge...

Liens:

http://people.via.ecp.fr/~alexis/formation-linux/bridge.htmlhttp://www.cgsecurity.org/Articles/netfilter.html

Un bridge est un pont :o) C'est un pont entre 2 liens Ethernet (par exemple) qui est totalement invisible vis a vis de l'exterieur: ce bridge est une sorte de cable ethernet virtuel.

Creer un bridge

D'abord, il faut installer les outils necessaire:

 # apt-get install bridge-utils

On va creer un bridge entre l'interface eth1 et eth2

La methode simple:

Modifier /etc/network/interfaces pour avoir un truc comme ça:

 auto br0
 iface br0 inet manual
        bridge_ports eth1 eth2
        bridge_stp off
 #       bridge_hello 1
 #       bridge_maxage 4
        bridge_fd 2
        bridge_maxwait 0

Et enfin

 # ifup br0

J'ai mis en commentaire ce qui a fait partie de mes tests, sans comprendre quel etait leurs fonctions… mais ca marche aussi en les commentant.

manual permet, il me semble, de ne pas preciser d'adresse IP.

On peut specifier une adresse IP aussi ! Exemple:

 auto br0
 iface br0 inet static
        address 192.168.0.65
        network 192.168.0.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        bridge_ports eth1 eth2
        bridge_stp off
 #       bridge_hello 1
 #       bridge_maxage 4
 #       bridge_fd 4
        bridge_maxwait 0

Ainsi, on peut acceder a la machine qui sert de bridge sans besoin d'une 3 ieme carte reseau.

 ...

Il faut savoir que le bridge peut mettre plusieurs longues secondes avant d'être fonctionnel. (une sorte de decouverte du réseau …)

Methode compliqué...

(Methode vu et revu maintes fois… mais elle est chiiiiiiiiiante)

 #!/bin/sh -x
 IFA="eth1"
 IFB="eth2"
 ifconfig $IFA 0.0.0.0 promisc
 ifconfig $IFB 0.0.0.0 promisc
 brctl addbr br0
 brctl addif br0 $IFA
 brctl addif br0 $IFB
 brctl sethello br0 1
 brctl setmaxage br0 4
 brctl setfd br0 4
 ifconfig br0 up

Ca marche un peu… mais ce n'est pas le methode que je comprend le mieux.

Interessant quand même de faire brctl show pour voir les bridges existant.

 # brctl show
 bridge name     bridge id               STP enabled     interfaces
 br0             8000.0000b452eff6       no              eth1
                                                         eth2

bridge et iptables

C'est assez limité en fait, car le veritable outils pour les bridges, c'est ebtables qui manipulent les trames Ethernet… ce qui n'est pas mon but.

Le bridge ne passe que par le filtre FORWARD. (y parait que c'est logique) Donc, on peut autoriser ou non des echanges au niveau du filtre FORWARD.

iptables ne semble voir a priori que br0, et pas les interfaces bridgé que sont eth1 et eth2.

Je ne vois pas bien l'utilité de jouer avec br0 vu que je ne comprend pas le sens de deplacement des trames ! Le seul usage que j'en ai vu, c'est pour simplement faire:

 # iptables -A FORWARD -i br0 -j ACCEPT
 # iptables -A FORWARD -o br0 -j ACCEPT

Pour designer les interfaces physiques, il faut utiliser le module physdev… ouf

Exemple, on suppose que eth1 est le reseau de nos serveurs et eth2 est le WAN…

 # autorisons d'abord ce qui est legitime
 # Le wan ne peut pas initier de connexion et se limite au sous reseau designé
 iptables -A FORWARD -m physdev --physdev-in eth2 --physdev-out eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
 # notre reseau oui
 iptables -A FORWARD -m physdev --physdev-in eth1 --physdev-out eth2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
 # autoriser le WAN a acceder au port 80 des serveurs
 iptables -A FORWARD -m physdev --physdev-in eth2 --physdev-out eth1 -p tcp --dport www -m state --state NEW -j ACCEPT
 # a SSH
 iptables -A FORWARD -m physdev --physdev-in eth2 --physdev-out eth1 -p tcp --dport ssh -m state --state NEW -j ACCEPT
 # autoriser tout au reseau de confiance...
 iptables -A FORWARD -m physdev --physdev-in eth2 -s 212.7.3.0/24 -m state --state NEW -j ACCEPT
 # et finalement
 iptables -A FORWARD -m physdev --physdev-in eth2 -j DROP

Et voila, un putain de reseau protege…

Par contre, impossible de faire du NAT ! Ca doit être normal mais c'est dommage. J'aurai voulu modifier les IP a la volé, mais ca ne semble pas possible.

Piste

On peut faire une sorte de “nat” et beaucoup d'autres choses au niveau des trames Ethernet avec un outil comme ebtables.

Dummy

Liens:

Le but: avoir une pseudo interface reseau supplémentaire…

L'interet que j'ai vu: créer une pseudo DMZ pour Xen.

L'autre interet, c'est que c'est super plus rapide…

Dom0 → dummy0 → Bridge → DomU …

Exemple:

Dans /etc/modules :

dummy

Et sans devoir rebooter, appliquer:

# modprobe dummy0

Dans /etc/sysctl.conf :

# Les requetes ARP ne traversent pas
net.ipv4.conf.all.arp_ignore=1

Et sans devoir rebooter, appliquer:

# sysctl -p

Préparer le bridge sous Xen 4/Debian:

auto dummy0
iface dummy0 inet manual

auto xenbr1
iface xenbr1 inet manual 
      bridge_ports dummy0
      bridge_stp off
      bridge_maxwait 0

Monter le bridge:

# ifup dummy0
# ifup xenbr1

Ensuite, on peut créer des DomU, avec par exemple dans la conf:

vif         = [ 'mac=00:16:3E:4A:19:BC,bridge=xenbr1' ]

Libre a vous de définir un network IP qui va bien…

Tweaks

min_free_kbytes

Liens:

Xen + un trafic TCP élévé donne ça:

Dans les logs:

... kernel: [896480.440273] __ratelimit: 190 callbacks suppressed
... kernel: [896480.440276] swapper: page allocation failure. order:0, mode:0x4020
... kernel: [896480.440279] Pid: 0, comm: swapper Not tainted 2.6.32-5-xen-amd64 #1
... kernel: [896480.440282] Call Trace:
... kernel: [896480.440284]  <IRQ>  [<ffffffff810bb649>] ? __alloc_pages_nodemask+0x592/0x5f5
... kernel: [896480.440295]  [<ffffffff810e798e>] ? new_slab+0x5b/0x1ca
... <snip> ...

On me pointe ça:

$ cat /proc/sys/vm/min_free_kbytes
5746

Et j'essaye:

# echo 16384 > /proc/sys/vm/min_free_kbytes
reseaux_bridge.txt · Dernière modification : 2011/08/07 21:11 de thierry