Recherche de site Web

Comment transformer un serveur Linux en routeur pour gérer le trafic de manière statique et dynamique – Partie 10


Comme nous l'avions prévu dans les didacticiels précédents de cette série LFCE (Linux Foundation Certified Engineer), dans cet article, nous discuterons du routage du trafic IP de manière statique et dynamique avec des applications spécifiques.

Présentation du programme de certification Linux Foundation

Tout d’abord, mettons quelques définitions au clair :

  1. En termes simples, un paquet est l'unité de base utilisée pour transmettre des informations au sein d'un réseau. Les réseaux qui utilisent TCP/IP comme protocole réseau suivent les mêmes règles de transmission des données : les informations réelles sont divisées en paquets constitués à la fois de données et de l'adresse à laquelle elles doivent être envoyées.
  2. Le Routage est le processus de « guidage » des données de la source à la destination au sein d'un réseau.
  3. Le routage statique nécessite un ensemble de règles configurées manuellement et définies dans une table de routage. Ces règles sont fixes et servent à définir la manière dont un paquet doit passer lorsqu'il passe d'une machine à une autre.
  4. Le routage dynamique, ou routage intelligent (si vous le souhaitez), signifie que le système peut modifier automatiquement, selon les besoins, l'itinéraire suivi par un paquet.

Configuration avancée des périphériques IP et réseau

Le package iproute fournit un ensemble d'outils pour gérer la mise en réseau et le contrôle du trafic que nous utiliserons tout au long de cet article car ils représentent le remplacement des outils existants tels que ifconfig et route.

L'utilitaire central de la suite iproute s'appelle simplement ip. Sa syntaxe de base est la suivante :

ip object command

object ne peut être qu'un des éléments suivants (seuls les objets les plus fréquents sont affichés – vous pouvez vous référer à man ip pour une liste complète) :

  1. lien : périphérique réseau.
  2. addr : adresse de protocole (IP ou IPv6) sur un appareil.
  3. route : entrée de la table de routage.
  4. règle : règle dans la base de données des politiques de routage.

Alors que la commande représente une action spécifique qui peut être effectuée sur un objet. Vous pouvez exécuter la commande suivante pour afficher la liste complète des commandes pouvant être appliquées à un objet particulier :

ip object help

Par exemple,

ip link help

L'image ci-dessus montre, par exemple, que vous pouvez modifier l'état d'une interface réseau avec la commande suivante :

ip link set interface {up | down}

Pour d'autres exemples de commande 'ip', lisez 10 commandes 'ip' utiles pour configurer l'adresse IP

Exemple 1 : Désactivation et activation d'une interface réseau

Dans cet exemple, nous allons désactiver et activer eth1 :

ip link show
ip link set eth1 down
ip link show

Si vous souhaitez réactiver eth1,

ip link set eth1 up

Au lieu d'afficher toutes les interfaces réseau, nous pouvons en spécifier une :

ip link show eth1

Ce qui renverra toutes les informations pour eth1.

Exemple 2 : Affichage de la table de routage principale

Vous pouvez afficher votre table de routage principale actuelle avec l'une des 3 commandes suivantes :

ip route show
route -n
netstat -rn

La première colonne du résultat des trois commandes indique le réseau cible. La sortie de ip route show (après le mot-clé dev) présente également les périphériques réseau qui servent de passerelle physique vers ces réseaux.

Bien que de nos jours la commande ip soit préférée à la route, vous pouvez toujours vous référer à man ip-route et man route pour une explication détaillée du reste. des colonnes.

Exemple 3 : Utiliser un serveur Linux pour acheminer des paquets entre deux réseaux privés

Nous voulons acheminer les paquets icmp (ping) de dev2 vers dev4 et inversement également (notez que les deux machines clientes sont sur des réseaux différents). Le nom de chaque carte réseau, ainsi que son adresse IPv4 correspondante, sont indiqués entre crochets.

Notre environnement de test est le suivant :

Client 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1
Router: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2
Client 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Regardons la table de routage dans dev1 (boîtier CentOS) :

ip route show

puis modifiez-le afin d'utiliser sa NIC enp0s3 et la connexion à 192.168.0.15 pour accéder aux hôtes du réseau 10.0.0.0/24 :

ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Ce qui se lit essentiellement comme suit : « Ajoutez une route vers le réseau 10.0.0.0/24 via l'interface réseau enp0s3 en utilisant 192.168.0.15 comme passerelle ».

De même dans dev4 (boîtier openSUSE) pour envoyer une requête ping aux hôtes du réseau 192.168.0.0/24 :

ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Enfin, nous devons activer le transfert dans notre routeur Debian :

echo 1 > /proc/sys/net/ipv4/ip_forward

Maintenant, faisons un ping :

et,

Pour rendre ces paramètres persistants lors des démarrages, modifiez /etc/sysctl.conf sur le routeur et assurez-vous que la variable net.ipv4.ip_forward est définie sur true comme suit :

net.ipv4.ip_forward = 1

De plus, configurez les cartes réseau sur les deux clients (recherchez le fichier de configuration dans /etc/sysconfig/network sur openSUSE et /etc/sysconfig/network-scripts sur CentOS – dans les deux cas, cela s'appelle ifcfg-enp0s3).

Voici le fichier de configuration de la boîte openSUSE :

BOOTPROTO=static
BROADCAST=10.0.0.255
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.15
NAME=enp0s3
NETWORK=10.0.0.0
ONBOOT=yes
Exemple 4 : Utilisation d'un serveur Linux pour acheminer des packages entre un réseau privé et Internet

Un autre scénario dans lequel une machine Linux peut être utilisée comme routeur est celui où vous devez partager votre connexion Internet avec un réseau local privé.

Router: Debian Wheezy 7.7 [eth0: Public IP, eth1: 10.0.0.15/24] - dev2
Client: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

En plus de configurer le transfert de paquets et la table de routage statique dans le client comme dans l'exemple précédent, nous devons ajouter quelques règles iptables dans le routeur :

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

La première commande ajoute une règle à la chaîne POSTROUTING dans la table nat (Network Address Translation), indiquant que la carte réseau eth0 doit être utilisée pour les packages sortants.

MASQUERADE indique que cette carte réseau a une IP dynamique et qu'avant d'envoyer le paquet vers le « monde sauvage » d'Internet, l'adresse source privée du paquet doit être remplacé par celui de l’adresse IP publique du routeur.

Dans un réseau local comportant de nombreux hôtes, le routeur garde une trace des connexions établies dans /proc/net/ip_conntrack afin de savoir où renvoyer la réponse d'Internet.

Seulement une partie de la sortie de :

cat /proc/net/ip_conntrack

est montré dans la capture d’écran suivante.

Où l'origine (IP privée de la box openSUSE) et la destination (Google DNS) des paquets sont mises en évidence. C'est le résultat de l'exécution de :

curl linux-console.net

sur la boîte openSUSE.

Comme vous pouvez déjà le deviner, le routeur utilise le 8.8.8.8 de Google comme serveur de noms, ce qui explique pourquoi la destination des paquets sortants pointe vers cette adresse.

Remarque : Les packages entrants provenant d'Internet ne sont acceptés que s'ils font partie d'une connexion déjà établie (commande n°2), tandis que les packages sortants sont autorisés "sortie libre » (commande n°3).

N'oubliez pas de rendre vos règles iptables persistantes en suivant les étapes décrites dans la partie 8 – Configurer le pare-feu Iptables de cette série.

Routage dynamique avec Quagga

De nos jours, l'outil le plus utilisé pour le routage dynamique sous Linux est quagga. Il permet aux administrateurs système de mettre en œuvre, avec un serveur Linux relativement peu coûteux, les mêmes fonctionnalités fournies par les routeurs Cisco puissants (et coûteux).

L'outil lui-même ne gère pas le routage, mais modifie plutôt la table de routage du noyau à mesure qu'il apprend les nouvelles meilleures routes pour gérer les paquets.

Puisqu'il s'agit d'un fork de zebra, un programme dont le développement s'est arrêté depuis quelque temps, il conserve pour des raisons historiques les mêmes commandes et la même structure que zebra. C’est pourquoi vous verrez beaucoup de références au zèbre à partir de maintenant.

Veuillez noter qu'il n'est pas possible de couvrir le routage dynamique et tous les protocoles associés dans un seul article, mais je suis convaincu que le contenu présenté ici vous servira de point de départ sur lequel vous pourrez vous appuyer.

Installer Quagga sous Linux

Pour installer quagga sur la distribution de votre choix :

aptitude update && aptitude install quagga 				[On Ubuntu]
yum update && yum install quagga 					[CentOS/RHEL]
zypper refresh && zypper install quagga 				[openSUSE]

Nous utiliserons le même environnement que dans l'exemple n°3, à la seule différence que eth0 est connecté à un routeur passerelle principal avec l'IP 192.168.0.1.

Ensuite, éditez /etc/quagga/daemons avec,

zebra=1
ripd=1

Créez maintenant les fichiers de configuration suivants.

/etc/quagga/zebra.conf
/etc/quagga/ripd.conf

et ajoutez ces lignes (remplacez par un nom d'hôte et un mot de passe de votre choix) :

service quagga restart
hostname    	dev2
password    	quagga
service quagga restart

Remarque : Ce ripd.conf est le fichier de configuration du Routing Information Protocol, qui fournit au routeur les informations sur les réseaux qui peuvent être connectés. atteint et à quelle distance (en termes de quantité de sauts) ils se trouvent.

Notez qu'il ne s'agit que d'un des protocoles pouvant être utilisés avec quagga, et je l'ai choisi pour ce tutoriel en raison de sa facilité d'utilisation et parce que la plupart des périphériques réseau le prennent en charge, bien qu'il présente l'inconvénient de transmettre les informations d'identification en texte brut. Pour cette raison, vous devez attribuer les autorisations appropriées au fichier de configuration :

chown quagga:quaggavty /etc/quagga/*.conf
chmod 640 /etc/quagga/*.conf 
Exemple 5 : Configuration de Quagga pour acheminer le trafic IP de manière dynamique

Dans cet exemple, nous utiliserons la configuration suivante avec deux routeurs (assurez-vous de créer les fichiers de configuration pour le routeur n°2 comme expliqué précédemment) :

Important : N'oubliez pas de répéter la configuration suivante pour les deux routeurs.

Connectez-vous à zebra (en écoute sur le port 2601), qui est l'intermédiaire logique entre le routeur et le noyau :

telnet localhost 2601

Saisissez le mot de passe défini dans le fichier /etc/quagga/zebra.conf, puis activez la configuration :

enable
configure terminal

Saisissez l'adresse IP et le masque réseau de chaque carte réseau :

inter eth0
ip addr 192.168.0.15
inter eth1
ip addr 10.0.0.15
exit
exit
write

Nous devons maintenant nous connecter au terminal démon RIP (port 2602) :

telnet localhost 2602

Saisissez le nom d'utilisateur et le mot de passe tels que configurés dans le fichier /etc/quagga/ripd.conf, puis tapez les commandes suivantes en gras (des commentaires sont ajoutés par souci de clarification) :

enable turns on privileged mode command.
configure terminal changes to configuration mode. This command is the first step to configuration
router rip enables RIP.
network 10.0.0.0/24 sets the RIP enable interface for the 10.0.0.0/24 network. 
exit
exit
write writes current configuration to configuration file.

Remarque : Dans les deux cas, la configuration est ajoutée aux lignes que nous avons ajoutées précédemment (/etc/quagga/zebra.conf et < b>/etc/quagga/ripd.conf).

Enfin, connectez-vous à nouveau au service Zebra sur les deux routeurs et notez comment chacun d'eux a « appris » l'itinéraire vers le réseau qui se trouve derrière l'autre, et quel est le prochain saut pour y accéder. réseau, en exécutant la commande show ip route :

show ip route

Si vous souhaitez essayer différents protocoles ou configurations, vous souhaiterez peut-être vous référer au site du projet Quagga pour une documentation supplémentaire.

Conclusion

Dans cet article, nous avons expliqué comment configurer un routage statique et dynamique, à l'aide d'un ou plusieurs routeurs box Linux. N'hésitez pas à ajouter autant de routeurs que vous le souhaitez et à expérimenter autant que vous le souhaitez. N'hésitez pas à nous revenir en utilisant le formulaire de contact ci-dessous si vous avez des commentaires ou des questions.