Auteur Sujet: Script pour monter un serveur avec Iperf3 lancé par systemd  (Lu 5549 fois)

0 Membres et 1 Invité sur ce sujet

vivien

  • Administrateur
  • *
  • Messages: 46 994
    • Twitter LaFibre.info
Script pour monter un serveur avec Iperf3 lancé par systemd

Première étape installer iPerf3 => Installation d'iPerf 3.7 sous Ubuntu / Debian

On ne lance pas iPerf3 avec les droits root, donc on crée un utilisateur spécifique : iperf
sudo adduser iperf --disabled-login --gecos iperf

Fichier de configuration systemd, permettent d'indiquer les conditions d'activation, leur propriétaire,...
sudo nano /etc/systemd/system/iperf3-server@.service

[Unit]
Description=iperf3 server on port %i
After=syslog.target network.target

[Service]
ExecStart=/usr/bin/iperf3 -s -1 -p %i
Restart=always
RuntimeMaxSec=3600
User=iperf

[Install]
WantedBy=multi-user.target
DefaultInstance=5201

Le "Restart=always" fait que le service est toujours redémarré soit parce qu'il a fini a cause de l'option -1 ou parce que au bout d'une heure (RuntimeMaxSec=3600) le système l’arrête.

On lancer iPerf avec l'option -1 afin de quitter après le test, car le changement de l'algorithme de congestion TCP par le test n reste effectif pour le test n+1.
La solution pour être sur de l'algorithme sans le spécifier à chaque test est donc de quitter après chaque test (option -1).

Pourquoi redémarrer au bout d'une heure (RuntimeMaxSec=3600) ? Tout simplement car iPerf3 peut se bloquer.

Penser daemon-reload a chaque modification  du fichier :
sudo systemctl daemon-reload

Pour activer iPerf3 au boot du serveur, il faut 'enable' les services (et "disable" donc pour les désactiver).
Le port TCP 5201 est le port par défaut, mais dans mon cas j'écoute sur les ports 9200 à 9222.
Pourquoi écouter sur plusieurs ports ? Car iPerf3 ne peut gérer qu'un test simultanément.
Écouter sur de nombreux ports permet diminuer la chance de tomber sur un port déjà utilisé (et quand on écoute sur le port par défaut, la plupart des clients restent sur le port par défaut, donc j'ai fait le choix de ne pas écouter sur le port par défaut et cela permet d'utiliser les ports < 9200 pour des tests de neutralité du net)

Activation sur les ports 9200 à 9222 :
for p in $(seq 9200 9222); do sudo systemctl enable iperf3-server@$p ; done

$ for p in $(seq 9200 9222); do sudo systemctl enable iperf3-server@$p ; done
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9200.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9201.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9202.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9203.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9204.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9205.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9206.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9207.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9208.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9209.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9210.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9211.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9212.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9213.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9214.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9215.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9216.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9217.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9218.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9219.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9220.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9221.service → /etc/systemd/system/iperf3-server@.service.
Created symlink /etc/systemd/system/multi-user.target.wants/iperf3-server@9222.service → /etc/systemd/system/iperf3-server@.service.

Deux options au choix pour le lancement d'iPerf3 :

Option N°1 : On redémarre
sudo reboot
pour voir l"état et les logs ce sont les commandes usuelles de systemd. par exemple:
sudo systemctl status iperf3-server@*
sudo journalctl -u iperf3-server@*




Option N°2 : On lance tout de suite les services sans redmérarer
for p in $(seq 9200 9222); do sudo systemctl start iperf3-server@$p ; done
(c'est "stop" pour les arrêter).

Un grand merci à kgersen !

vivien

  • Administrateur
  • *
  • Messages: 46 994
    • Twitter LaFibre.info
Script pour monter un serveur avec Iperf3 lancé par systemd
« Réponse #1 le: 29 mai 2021 à 18:22:34 »
Une petite question, dans [Unit]

il ne faudrait pas remplacer :
After=syslog.target network.target

Par :
After=network-online.target

Cela semble plus souvent ce qui est utilisé.

Et même peut-être rajouter à la suite de After=network-online.target :
Wants=network-online.target

Soit :
[Unit]
Description=iperf3 server on port %i
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/bin/iperf3 -s -1 -p %i
Restart=always
RuntimeMaxSec=3600
User=iperf

[Install]
WantedBy=multi-user.target
DefaultInstance=5201