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
informatique:linux:reseau [2016/11/14 09:45] – created pteuinformatique:linux:reseau [2023/05/05 12:35] (current) – [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 globales de la carte réseau:
 +<code bash>
 +ifconfig eno0
 +eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 +        inet 10.0.34.26  netmask 255.255.255.0  broadcast 10.0.34.255
 +        inet6 fe80::32d0:42ff:fe12:3456  prefixlen 64  scopeid 0x20<link>
 +        ether 30:d0:42:12:34:56  txqueuelen 1000  (Ethernet)
 +        RX packets 4963422  bytes 1239605132 (1.1 GiB)
 +        RX errors 0  dropped 208003  overruns 0  frame 0
 +        TX packets 4106056  bytes 4178402339 (3.8 GiB)
 +        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 +        device interrupt 16  memory 0x72180000-721a0000
 +</code>
 +Ici le compteur de paquets reçus supprimés (dropped) est important ; pourtant il n'indique __pas nécessairement__ un problème dans la mesure où le kernel décompte les paquets :
 +  * reçus avec un mauvais tag de VLAN
 +  * utilisant un protocole inconnu
 +  * utilisant une adresse multicast non enregistrée
 +  * reçus par un agrégat inactif
 +
 +Les commandes suivantes sont des alternatives équivalentes qui remontent les mêmes compteurs :
 +<code bash>
 +ip -s link
 +2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
 +    link/ether 30:d0:42:12:34:56 brd ff:ff:ff:ff:ff:ff
 +    RX: bytes  packets  errors  dropped overrun mcast
 +    1239605132 4963422  0       208003  0       4807
 +    TX: bytes  packets  errors  dropped carrier collsns
 +    4178403021 4106057  0                   0
 +</code>
 +
 +<code bash>
 +netstat -i
 +Table d'interfaces noyau
 +Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
 +eth0             1500  4963422      0 208003 0       4106059      0      0      0 BMRU
 +</code>
 +
 +Il est plus pertinent de consulter les compteurs avec l'utilitaire ethtool (commande passée sur une autre machine) :
 +<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>
 +Dans cette dernière commande, le compteur **rx_missed_errors** indique des paquets perdus ; la cause est souvent la saturation du tampon de l'interface réseau, car trop de paquets sont 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.1479116751.txt.gz · Last modified: 2016/11/14 09:45 by pteu