User Tools

Site Tools


informatique:linux:reseau

This is an old revision of the document!


Le réseau sous Linux

Outils en vrac

nmap (http://www.nmap.org/),
thcrut (http://www.thc.org/thcrut/),
hping (http://www.hping.org/),
dsniff (http://www.monkey.org/~dugsong/dsniff/),
ettercap (http://ettercap.sourceforge.net/),
ggsniff (http://ggsniff.sourceforge.net/),
p0f (http://lcamtuf.coredump.cx/),
amap (http://www.thc.org/amap/),
vmap (http://www.thc.org/vmap/)
nbtscan (http://www.unixwiz.net/tools/nbtscan.html).

TUI monitoring

bmon
iptraf
iftop
nettop

IP secondaire

Soit l'interface réseau (physique ou non = marche aussi avec les bridges par exemple) eth0, je veux ajouter une IP secondaire dessus :

ifconfig eth0 add 10.0.0.1 netmask 255.255.255.0 up
 
# PI : pour le supprimer..
ifconfig eth0:0 del 10.0.0.1

L'adresse MAC est la même que eth0, mais on peut utiliser ainsi plusieurs adressages logiques sur le même LAN. On peut vérifier que l'interface a bien été créé sous le nom eth0:0 : ifconfig eth0:0 (la notation <itf:nombre> indique qu'il s'agit d'une interface virtuelle = un alias).

Ceci est différent de la notion de VLANs, qui utilisent la notation <itf>.<vlan> (par ex : eth0.13). Dans les 2 cas, le réseau physique est partagé entre les 2 réseaux, mais la différence fondamentale est que dans le cas des alias, le niveau 2 (liaison de données, Ethernet dans notre cas) est partagé entre tous les réseaux, alors qu'avec les VLANs il y a segmentation (domaines de broadcast différents = moins de bruit sur le réseau = plus performant et plus sécurisé).

Ainsi il vaut bien mieux utiliser différents VLANs que différents alias, lorsqu'on en a la possibilité (le fin du fin étant bien sûr d'utiliser des interfaces physiques différentes).

Pour pérenniser cette config et la charger au prochain démarrage, on doit la rajouter dans les fichiers de configuration réseau, qui dépendent de la distribution Linux :

  • Sur Debian-like : éditer le fichier /etc/network/interfaces et ajouter les lignes suivantes :
auto eth0:0
iface eth0:0 inet static
	address 10.0.0.1
	netmask 255.255.255.0
	network 10.0.0.0
	broadcast 10.0.0.255
  • Sur Redhat-like :

La plupart du temps cette distrib utilise plusieurs fichiers pour gérer les interfaces réseau ; le plus simple est de créer l'interface virtuelle avec l'assistant system-config-network : aller dans “Configuration du périphérique”, puis “<Nouveau périphérique>”, “Ethernet” et préciser les informations suivantes :

Nom			reseau_10.0.0
Périphérique		eth0:0
IP statique		10.0.0.1
Masque de sous-réseau	255.255.255.0
[..]
On boot			X # pour activer l'interface après un reboot de la machine

L'assistant consigne ces infos dans le fichier de configuration suivant : /etc/sysconfig/network-scripts/ifcfg-eth0:0

DEVICE=eth0:0
BOOTPROTO=none
NETMASK=255.255.255.0
TYPE=Ethernet
IPADDR=10.0.0.1
ONBOOT=yes
NAME=reseau_10.0.0

Bonding (agrégat)

Le bonding sous Linux est l'agrégat de ports, c'est-à-dire l'association de plusieurs interfaces réseau physiques pour en créer une logique, plus rapide et/ou plus fiable. C'est l'équivalent de l'etherchannel en terminologie Cisco ou du sharing chez Extreme Networks.

Théorie

Il existe plusieurs modes de gestion de l'agrégat ; en bref les mode 0 (balance-rr), 1 (active-backup), 2 (balance-xor), 3 (broadcast), 4 (802.3ad / LACP), 5 (balance-tlb), et 6 (balance-alb).

Dans la mesure du possible (si le commutateur d'en face le gère et est configuré pour), il est recommandé d'utiliser le LACP pour grouper ces interfaces entre elles et dialoguer avec l'équipement d'en face. Cela permet de créer un agrégat dynamique auquel on peut ajouter/retirer des interfaces à chaud par ex.

Avec le LACP (comme le balance-xor) on peut alors configurer la méthode de répartition de charge entre les interfaces avec le paramètre xmit_hash_policy, qui peut prendre la valeur :

  • layer2 : répartition par défaut (XOR des adresses MAC src/dst et packet type ID)
  • layer2+3 (XOR des adresses MAC/IP src/dst)
  • layer3+4 (XOR des ports src/dst (TCP-UDP) et des adresses IPs src/dst ; NB : ce mode n'est pas totalement respectueux de la norme 802.3ad et peux causer des dé-séquencements avec des paquets fragmentés))

Il existe les modes encap2+3 et encap3+4, identiques à layer2+3 et layer3+4, mais en utilisant les informations des protocoles encapsulés lorsque détection de tunnels)

Configuration sous centOS

Fichiers de configuration :

  • interfaces physiques : /etc/sysconfig/network/ifcfg-ethX
  • agrégat : /etc/sysconfig/network/ifcfg-bond0
  • driver bonding : /etc/modprobe.d/bonding.conf

Pour fonctionner, on doit disposer d'une ou plusieurs interfaces physiques similaires en terme de type et de débit. Par exemple eth2 et eth3 :

# eth2
DEVICE=eth2
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:e0:ed:xx:xx:x2
MASTER=bond0
SLAVE=yes
TYPE=Ethernet
USERCTL=no
 
# eth3
DEVICE=eth3
BOOTPROTO=none
ONBOOT=yes
HWADDR=00:e0:ed:xx:xx:x3
MASTER=bond0
SLAVE=yes
TYPE=Ethernet
USERCTL=no

Il faut installer le module de bonding :

cat /etc/modprobe.d/bonding.conf 
alias bond0 bonding
options bond0 mode=4 xmit_hash_policy=layer2+3 miimon=100 downdelay=200 updelay=200

Exemple de configuration :

cat /etc/sysconfig/network-scripts/ifcfg-bond0
 
DEVICE='bond0'
BONDING_MASTER='yes'
BONDING_MODULE_OPTS='mode=802.3ad xmit_hash_policy=layer2+3 miimon=100'
BONDING_SLAVE0='eth2'
BONDING_SLAVE1='eth3'
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='10.1.8.200/24'
MTU='1500'
NAME='82599EB 10-Gigabit Network Connection'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'

Diagnostique

cat /proc/net/bonding/bond0
 
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
 
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
 
802.3ad info
LACP rate: slow
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
	Aggregator ID: 1
	Number of ports: 2
	Actor Key: 33
	Partner Key: 101
	Partner Mac Address: 74:8e:f8:xx:xx:x1
 
Slave Interface: eth2
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:e0:ed:xx:xx:x2
Aggregator ID: 1
 
Slave Interface: eth3
MII Status: up
Link Failure Count: 1
Permanent HW addr: 00:e0:ed:xx:xx:x3
Aggregator ID: 1

Références

Tips

Activer le TCP BBR

Pour remplacer l'algorithme de gestion des congestions TCP par défaut par le BBR : - vérifier que votre kernel a été compilé avec les bons modules :

$ grep 'CONFIG_TCP_CONG_BBR=m' /boot/config-$(uname -r) \
&& grep 'CONFIG_NET_SCH_FQ' /boot/config-$(uname -r) \
&& grep -E 'CONFIG_TCP_CONG_BBR=m|CONFIG_NET_SCH_FQ' /boot/config-$(uname -r)
CONFIG_TCP_CONG_BBR=m
CONFIG_NET_SCH_FQ_CODEL=m
CONFIG_NET_SCH_FQ=m
CONFIG_TCP_CONG_BBR=m
CONFIG_NET_SCH_FQ_CODEL=m
CONFIG_NET_SCH_FQ=m

Si vous optenez ce résultat c'est bon ; sinon c'est qu'il est trop ancien (< 4.9) ou qu'il faut le recompiler avec les modules activés. Sous Debian 10 ça ne devrait pas poser de problème.

Pour activer le TCP BRR, en root/sudo :

$ sudo echo -e "net.core.default_qdisc=fq\n net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.d/10-custom-kernel-bbr.conf

Pour prendre en compte ces paramètres :

$ sudo sysctl --system
# (ou reboot)

Pour mesurer les améliorations, utiliser iperf ou wget.

src : Increase Linux Internet speed with TCP BBR congestion control (nixCraft)

informatique/linux/reseau.1607279610.txt.gz · Last modified: 2020/12/06 18:33 by pteu