Problèmes courants de connectivité réseau Linux et comment les résoudre

Diagnostiquez les problèmes réseau Linux avec ip, ping, dig, ethtool, tcpdump, les vérifications de pare-feu et des correctifs clairs pour les pannes courantes.

Problèmes courants de connectivité réseau Linux et comment les résoudre

Les problèmes réseau Linux se manifestent généralement par l'un des quatre symptômes suivants : pas de route, pas de DNS, trafic lent ou un port de service qui ne répond pas. Des configurations domestiques simples aux environnements d'entreprise complexes, rencontrer des problèmes réseau sur les systèmes Linux est courant. Ces problèmes peuvent aller de pannes de connectivité complètes à des vitesses réseau frustrantes. Heureusement, Linux fournit un ensemble robuste d'outils et de commandes qui peuvent aider à diagnostiquer et résoudre la plupart des problèmes réseau courants. Travaillez de l'hôte local vers l'extérieur : état du lien, adresse IP, route, DNS, pare-feu, puis le service distant.

Comprendre la pile réseau

Avant de plonger dans le dépannage, une compréhension de base de la pile réseau Linux est bénéfique. La pile réseau est un modèle en couches (similaire au modèle OSI ou TCP/IP) qui gère la communication réseau. Les composants clés incluent :

  • Cartes d'interface réseau (NIC) : Le matériel physique responsable de l'envoi et de la réception des données.
  • Configuration de l'interface réseau : Paramètres logiciels qui définissent le fonctionnement des NIC (adresse IP, masque de sous-réseau, passerelle, etc.).
  • Routage IP : Le processus de direction du trafic réseau entre différents réseaux.
  • DNS (Domain Name System) : Traduit les noms de domaine lisibles par l'homme en adresses IP.
  • Pare-feu (iptables/nftables) : Contrôle le flux du trafic réseau en fonction de règles prédéfinies.

Lors du dépannage, vous interagirez souvent avec des outils qui inspectent et manipulent ces composants.

Problèmes de connectivité réseau courants et solutions

1. Aucune connectivité réseau / Impossible d'atteindre les ressources externes

C'est le problème le plus basique et souvent le plus perturbateur. Cela signifie que votre système ne peut pas envoyer ou recevoir de paquets de données au-delà de son réseau local.

Étapes de diagnostic :

  1. Vérifier l'état de l'interface réseau :

    • ip a ou ifconfig -a : Liste toutes les interfaces réseau et leur état actuel. Recherchez votre interface principale (par exemple, eth0, ens33) et vérifiez si elle a une adresse IP et est dans un état UP.
      ip a show eth0
      # ou
      ifconfig eth0
      
    • Si l'interface est inactive, activez-la :
      sudo ip link set eth0 up
      # ou
      sudo ifconfig eth0 up
      
  2. Vérifier l'adresse IP, le masque de sous-réseau et la passerelle :

    • Assurez-vous que votre système a une adresse IP et un masque de sous-réseau valides pour son réseau. L'adresse IP de la passerelle est essentielle pour atteindre les réseaux externes.
    • Vérifiez votre configuration de passerelle :
      ip r
      # ou
      route -n
      
      Vous devriez voir une route par défaut (commençant généralement par 0.0.0.0/0 ou default) pointant vers votre adresse IP de passerelle.
    • Si vous utilisez DHCP, essayez de renouveler le bail :
      sudo dhclient -r eth0  # Libérer le bail actuel
      sudo dhclient eth0      # Obtenir un nouveau bail
      
    • Si vous utilisez une IP statique, vérifiez le gestionnaire réseau actif pour votre distribution, comme Netplan sur de nombreux serveurs Ubuntu, les profils de connexion NetworkManager, ou les fichiers hérités comme /etc/network/interfaces et /etc/sysconfig/network-scripts/ifcfg-* là où ils sont encore utilisés.
  3. Tester la connectivité réseau locale :

    • ping l'adresse IP de la passerelle : Cela vérifie si vous pouvez atteindre votre routeur ou passerelle par défaut.
      ping <ip_passerelle>
      
      (par exemple, ping 192.168.1.1)
  4. Tester la résolution DNS :

    • ping un nom d'hôte externe : Si pinger une adresse IP fonctionne mais pas un nom d'hôte, cela indique un problème DNS.
      ping example.com
      
    • nslookup ou dig : Ces outils interrogent les serveurs DNS.
      nslookup example.com
      # ou
      dig example.com
      
    • Vérifiez votre configuration de serveur DNS dans /etc/resolv.conf.
      cat /etc/resolv.conf
      
      Assurez-vous qu'elle liste des entrées nameserver valides.
  5. Vérifier le gestionnaire réseau (si applicable) :

    • Si vous utilisez NetworkManager (courant sur les postes de travail Linux), vérifiez son état :
      nmcli networking off
      nmcli networking on
      nmcli device status
      nmcli connection show
      

Correctifs :

  • Redémarrer les services réseau :
    sudo systemctl restart networking  # Pour Debian/Ubuntu (ancien)
    sudo systemctl restart NetworkManager # Pour les systèmes utilisant NetworkManager
    sudo systemctl restart network # Pour RHEL/CentOS
    
  • Corriger les fichiers de configuration : Modifiez manuellement les fichiers de configuration pour définir l'IP correcte, le masque de sous-réseau, la passerelle et les serveurs DNS.
  • Vérifier le serveur DHCP : Assurez-vous que votre serveur DHCP fonctionne et a des baux disponibles.
  • Remplacer le matériel défectueux : Si ip a ne montre aucun lien, essayez un câble réseau ou un port différent, ou même une NIC différente.

2. Vitesses réseau lentes

Lorsque votre réseau est techniquement fonctionnel mais lent, cela peut être tout aussi frustrant.

Étapes de diagnostic :

  1. Isoler le goulot d'étranglement :

    • Tester la vitesse localement : Utilisez des outils comme iperf3 pour tester le débit entre deux machines sur votre réseau local. Cela aide à déterminer si la lenteur est dans votre LAN ou avec votre connexion WAN.
      • Sur le serveur (une machine) :
        iperf3 -s
        
      • Sur le client (une autre machine) :
        iperf3 -c <ip_serveur>
        
    • Tester la vitesse externe : Utilisez des sites web de test de vitesse en ligne ou des outils comme speedtest-cli.
      sudo apt install speedtest-cli # Debian/Ubuntu
      sudo yum install speedtest-cli # RHEL/CentOS (peut nécessiter le dépôt EPEL)
      speedtest-cli
      
  2. Vérifier les erreurs de l'interface réseau :

    • Utilisez ethtool pour vérifier les erreurs, les paquets perdus ou les problèmes matériels sur l'interface.
      sudo ethtool -S eth0
      
      Recherchez des métriques comme rx_dropped, tx_dropped ou rx_errors.
  3. Examiner le trafic réseau :

    • iftop ou nethogs : Ces outils montrent l'utilisation du réseau en temps réel par connexion ou par processus, respectivement. Ils peuvent aider à identifier quelle application ou hôte consomme de la bande passante.
      sudo apt install iftop nethogs # Debian/Ubuntu
      sudo yum install iftop nethogs # RHEL/CentOS
      sudo iftop -i eth0
      sudo nethogs eth0
      
    • tcpdump : Pour une analyse plus approfondie des paquets (plus avancé).
      sudo tcpdump -i eth0 -n
      
  4. Vérifier la congestion :

    • Si vous avez de nombreux appareils sur votre réseau, la congestion pourrait en être la cause. Vérifiez l'état de votre routeur et la bande passante disponible.
  5. Examiner les performances DNS :

    • Les recherches DNS lentes peuvent rendre la navigation lente. Essayez d'utiliser un serveur DNS différent (par exemple, Google DNS 8.8.8.8, Cloudflare 1.1.1.1) dans /etc/resolv.conf ou les paramètres de votre gestionnaire réseau et retestez.

Correctifs :

  • Mettre à jour les pilotes : Assurez-vous que les pilotes de votre carte réseau sont à jour.
  • Ajuster le MTU : Parfois, un paramètre de Maximum Transmission Unit (MTU) incorrect peut causer des problèmes de performance, surtout avec les VPN ou certaines configurations réseau. (Avancé : Utilisez ip link set eth0 mtu <valeur>).
  • Remplacer le matériel : Une NIC ou un port de commutateur défaillant peut causer des ralentissements.
  • Optimiser les règles du pare-feu : Des règles de pare-feu trop complexes ou inefficaces peuvent parfois affecter les performances.
  • Mettre à niveau l'infrastructure réseau : Si votre réseau est saturé, vous pourriez avoir besoin d'un routeur, d'un commutateur ou d'une connexion Internet plus rapide.

3. Problèmes de connectivité intermittents

C'est peut-être le type de problème le plus difficile, car les connexions se coupent de manière aléatoire.

Étapes de diagnostic :

  1. Surveiller les journaux système :

    • Vérifiez les journaux système pour toute erreur ou déconnexion liée au réseau. Les journaux clés incluent :
      • /var/log/syslog ou /var/log/messages
      • journalctl -xe (pour les systèmes utilisant systemd)
      • Recherchez des messages liés à NetworkManager, dhclient, kernel ou des interfaces réseau spécifiques.
  2. Vérifier dmesg :

    • dmesg affiche les messages du tampon en anneau du noyau, ce qui peut révéler des problèmes matériels ou de pilote.
      dmesg | grep -i eth0
      dmesg | grep -i net
      
  3. Tester avec ping en continu :

    • Sous Linux, ping s'exécute en continu par défaut jusqu'à ce que vous l'arrêtiez avec Ctrl+C. Utilisez -c lorsque vous voulez un nombre fixe.
      ping <ip_passerelle>
      ping -c 1000 <ip_passerelle>
      
    • Pingez à la fois la passerelle et un hôte externe simultanément pour différencier les problèmes locaux des problèmes externes.
  4. Vérifier la connectivité sans fil (si applicable) :

    • Si vous utilisez le Wi-Fi, vérifiez la force du signal, les interférences et réassociez-vous au réseau.
      iwconfig
      nmcli device wifi list
      nmcli device wifi connect <SSID> password <mot_de_passe>
      
  5. Vérifications matérielles :

    • Essayez un câble réseau différent, un port sur le commutateur, ou même une NIC différente.
    • Si sans fil, essayez de vous rapprocher du point d'accès.

Correctifs :

  • Mettre à jour les pilotes et le noyau : Les problèmes intermittents peuvent parfois être causés par des pilotes ou des modules du noyau bogués. Assurez-vous que votre système est entièrement mis à jour.
  • Désactiver l'économie d'énergie : Certaines NIC ont des fonctionnalités d'économie d'énergie agressives qui peuvent causer des déconnexions. Cela peut parfois être ajusté via ethtool ou par des paramètres de module du noyau.
  • Simplifier la configuration réseau : Désactivez temporairement NetworkManager ou d'autres démons de gestion réseau pour exclure les conflits.
  • Vérifier les baux DHCP : Assurez-vous que votre serveur DHCP ne manque pas de baux ou n'a pas de problèmes de renouvellement.

4. Pare-feu bloquant le trafic

Les pare-feu sont essentiels pour la sécurité, mais des erreurs de configuration peuvent bloquer le trafic légitime.

Étapes de diagnostic :

  1. Vérifier l'état du pare-feu :

    • iptables : Liste les règles iptables actuelles.
      sudo iptables -L -n -v
      
    • nftables : Liste les règles nftables actuelles (systèmes plus récents).
      sudo nft list ruleset
      
    • Vérifiez si ufw (Uncomplicated Firewall) ou firewalld est en cours d'exécution et quelles règles sont actives.
      sudo ufw status verbose
      sudo systemctl status firewalld
      sudo firewall-cmd --list-all
      
  2. Tester des ports spécifiques :

    • Si vous ne pouvez pas accéder à un service (par exemple, SSH sur le port 22), essayez de vous connecter en utilisant telnet ou nc (netcat) depuis une autre machine.
      telnet <ip_serveur> <port>
      # ou
      nc -zv <ip_serveur> <port>
      

Correctifs :

  • Désactiver temporairement le pare-feu : À des fins de test uniquement, vous pouvez désactiver temporairement le pare-feu pour voir si la connectivité revient. N'oubliez pas de le réactiver ensuite.
    sudo ufw disable
    sudo systemctl stop firewalld
    # ou gérez les règles iptables directement
    
  • Ajouter des règles spécifiques : Si le pare-feu est le problème, ajoutez des règles pour autoriser le trafic nécessaire. Par exemple, pour autoriser SSH :
    • ufw :
      sudo ufw allow ssh
      # ou
      sudo ufw allow 22/tcp
      
    • firewalld :
      sudo firewall-cmd --permanent --add-service=ssh
      sudo firewall-cmd --reload
      
    • iptables (exemple pour autoriser le HTTP sortant) :
      sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
      

Meilleures pratiques pour l'administration réseau

  • Documentez votre réseau : Conservez des enregistrements des adresses IP, sous-réseaux, passerelles, serveurs DNS et règles de pare-feu.
  • Utilisez la journalisation centralisée : Transférez les journaux vers un serveur central pour suivre facilement les problèmes sur plusieurs machines.
  • Surveillez les performances réseau : Mettez en œuvre des outils de surveillance (par exemple, Nagios, Zabbix, Prometheus) pour détecter les problèmes de manière proactive.
  • Maintenez les systèmes à jour : Appliquez régulièrement les correctifs de sécurité et les mises à jour, car ils incluent souvent des correctifs pour les bogues liés au réseau.
  • Comprenez votre matériel : Connaissez les capacités et les limites de vos interfaces réseau, commutateurs et routeurs.
  • Testez les modifications : Avant d'apporter des modifications importantes à la configuration réseau, testez-les dans un environnement non productif si possible.

À retenir

Commencez par les bases : lien physique, état de l'interface, adresse IP, route par défaut, DNS et règles de pare-feu. Si ceux-ci passent, testez le port de service spécifique avec nc et inspectez les paquets avec tcpdump. Cet ordre vous évite de chercher des problèmes d'application alors que l'hôte n'a tout simplement pas de route ou de résolution de nom.