User Tools

Site Tools


informatique:linux:reseau

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Last revisionBoth sides next revision
informatique:linux:reseau [2016/11/14 09:45] – created pteuinformatique:linux:reseau [2021/01/31 15:40] – Diagnostique pteu
Line 1: Line 1:
-======Le réseau sous Linux======+====== Le réseau sous Linux ======
  
 +=====Outils en vrac=====
 +
 +<code>
 +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).
 +</code>
 +
 +====TUI monitoring====
 +
 +<code>
 +bmon
 +iptraf
 +iftop
 +nettop
 +</code>
 =====IP secondaire===== =====IP secondaire=====
  
Line 50: Line 73:
 </code> </code>
  
 +
 +=====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 :
 +<code bash>
 +# 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
 +</code>
 +
 +Il faut installer le module de bonding :
 +<code bash>
 +cat /etc/modprobe.d/bonding.conf 
 +alias bond0 bonding
 +options bond0 mode=4 xmit_hash_policy=layer2+3 miimon=100 downdelay=200 updelay=200
 +</code>
 +
 +Exemple de configuration :
 +<code bash>
 +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'
 +</code>
 +
 +====Diagnostique====
 +
 +<code bash>
 +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
 +</code>
 +
 +====Références====
 +
 +  * [[https://www.kernel.org/doc/Documentation/networking/bonding.txt|Linux Ethernet Bonding Driver HOWTO]] sur kernel.org
 +  * [[https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/sec-using_channel_bonding|Using Channel Bonding]] (Redhat.com)
 +
 +=====Diagnostique=====
 +
 +Afficher les infos gloables de la carte réseau:
 +<code bash>
 +ifconfig eno0
 +eno0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 +        inet 10.0.0.1  netmask 255.255.255.0  broadcast 10.0.0.254
 +        inet6 fe80:: prefixlen 64  scopeid 0x20<link>
 +        ether 00:11:22:33:44:55  txqueuelen 1000  (Ethernet)
 +        RX packets 145863345  bytes 51112594452 (47.6 GiB)
 +        RX errors 0  dropped 101954  overruns 0  frame 0
 +        TX packets 172043044  bytes 222388343673 (207.1 GiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +        device interrupt 16  memory 0x80400000-80420000
 +</code>
 +Ici on voit un problème de paquets supprimés (dropped).
 +
 +Afficher les statistiques de la carte (les compteurs plus précis) :
 +<code bash>
 +ethtool -S eth0
 +NIC statistics:
 +     rx_packets: 145743003
 +     tx_packets: 171911063
 +     rx_bytes: 51104241565
 +     tx_bytes: 222190909954
 +     rx_broadcast: 9278170
 +     tx_broadcast: 50
 +     rx_multicast: 3348219
 +     tx_multicast: 8
 +     rx_errors: 0
 +     tx_errors: 0
 +     tx_dropped: 0
 +     multicast: 3348219
 +     collisions: 0
 +     rx_length_errors: 0
 +     rx_over_errors: 0
 +     rx_crc_errors: 0
 +     rx_frame_errors: 0
 +     rx_no_buffer_count: 708691
 +     rx_missed_errors: 101954
 +     tx_aborted_errors: 0
 +     tx_carrier_errors: 0
 +     tx_fifo_errors: 0
 +     tx_heartbeat_errors: 0
 +     tx_window_errors: 0
 +     tx_abort_late_coll: 0
 +     tx_deferred_ok: 0
 +     tx_single_coll_ok: 0
 +     tx_multi_coll_ok: 0
 +     tx_timeout_count: 0
 +     tx_restart_queue: 0
 +     rx_long_length_errors: 0
 +     rx_short_length_errors: 0
 +     rx_align_errors: 0
 +     tx_tcp_seg_good: 0
 +     tx_tcp_seg_failed: 0
 +     rx_flow_control_xon: 0
 +     rx_flow_control_xoff: 0
 +     tx_flow_control_xon: 0
 +     tx_flow_control_xoff: 0
 +     rx_csum_offload_good: 132050209
 +     rx_csum_offload_errors: 284
 +     rx_header_split: 0
 +     alloc_rx_buff_failed: 0
 +     tx_smbus: 0
 +     rx_smbus: 0
 +     dropped_smbus: 0
 +     rx_dma_failed: 0
 +     tx_dma_failed: 0
 +     rx_hwtstamp_cleared: 0
 +     uncorr_ecc_errors: 0
 +     corr_ecc_errors: 0
 +     tx_hwtstamp_timeouts: 0
 +     tx_hwtstamp_skipped: 0
 +</code>
 +Le compteur rx_missed_errors indique des paquets perdus ; la cause est souvent le tampon réseau qui est saturé, car trop de paquets reçus en même temps (à cause de burst, voir contrôle de flux), ou CPU trop lente/chargée pour les traiter.
 +
 +Il peut être utile d'augmenter la taille des buffers et de faire des tests ; en gardant à l'esprit que cela augmente aussi la latence :
 +<code bash>
 +# afficher les paramètres actuels et les max admis
 +ethtool -g eno0
 +Ring parameters for eno0:
 +Pre-set maximums:
 +RX:             4096
 +RX Mini:        0
 +RX Jumbo:       0
 +TX:             4096
 +Current hardware settings:
 +RX:             256
 +RX Mini:        0
 +RX Jumbo:       0
 +TX:             256
 +
 +# augmenter les buffers rx/tx
 +ethtool -G eno0 rx 4096 tx 4096
 +</code>
 +
 +=====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 :
 +<code bash>
 +$ 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
 +</code>
 +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 :
 +<code bash>
 +$ sudo echo -e "net.core.default_qdisc=fq\n net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.d/10-custom-kernel-bbr.conf
 +</code>
 +
 +Pour prendre en compte ces paramètres :
 +<code bash>
 +$ sudo sysctl --system
 +# (ou reboot)
 +</code>
 +
 +Pour mesurer les améliorations, utiliser [[informatique:logiciels:iperf|iperf]] ou [[informatique:linux:commandes_linux#wget|wget]].
 +
 +src : [[https://www.cyberciti.biz/cloud-computing/increase-your-linux-server-internet-speed-with-tcp-bbr-congestion-control/|Increase Linux Internet speed with TCP BBR congestion control]] (nixCraft)
informatique/linux/reseau.txt · Last modified: 2023/05/05 12:35 by pteu