Table des matières
Bridge...
Liens:
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