Comment transformer un serveur Linux en un routeur pour gérer le trafic statiquement et dynamiquement - partie 10

Comment transformer un serveur Linux en un routeur pour gérer le trafic statiquement et dynamiquement - partie 10

Comme nous l'avons prévu dans les tutoriels précédents LFCE (Ingénieur certifié de la Fondation Linux) série, dans cet article, nous discuterons de l'acheminement du trafic IP statiquement et dynamiquement avec des applications spécifiques.

Ingénieur certifié de la Fondation Linux - Partie 10
Présentation du programme de certification de la Fondation Linux

Tout d'abord, faisons des définitions droites:

  1. En termes simples, un paquet est l'unité de base qui est utilisée pour transmettre des informations dans 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 qui sont fabriqués à la fois des données et l'adresse où elles doivent être envoyées à.
  2. Routage est le processus de «guidage”Les données de la source à la destination dans un réseau.
  3. Routage statique Nécessite un ensemble de règles à configuration manuellement définie dans un tableau de routage. Ces règles sont fixes et sont utilisées pour définir la façon dont un paquet doit passer lorsqu'il passe d'une machine à une autre.
  4. Routage dynamique, ou routage intelligent (si vous le souhaitez), signifie que le système peut modifier automatiquement, au besoin, l'itinéraire qu'un paquet suit.

Configuration avancée de dispositifs IP et réseau réseau

Le iproute Le package fournit un ensemble d'outils pour gérer la réseautage et le contrôle du trafic que nous utiliserons tout au long de cet article car ils représentent le remplacement d'outils hérités tels que ifconfig et itinéraire.

L'utilitaire central dans le iproute La suite est appelée simplement ip. Sa syntaxe de base est la suivante:

# commande d'objet IP 

objet ne peut être que l'un des éléments suivants (seuls les objets les plus fréquents sont affichés - vous pouvez vous référer à l'homme IP pour une liste complète):

  1. lien: Périphérique réseau.
  2. addr: Adresse Protocole (IP ou IPv6) sur un appareil.
  3. itinéraire: Entrée de table de routage.
  4. règle: Règle dans la base de données de stratégie de routage.

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

# Aide d'objet IP 

Par exemple,

# Aide du lien IP 
Aide de la commande IP

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 | bas 

Pour de tels exemples de plus de 'IP«Commande, lire 10 commandes« ip »utiles pour configurer l'adresse IP

Exemple 1: désactiver et activer une interface réseau

Dans cet exemple, nous désactiverons et activerons ETH1:

# lien ip show # lien ip set Eth1 vers le bas # lien ip show 
Désactiver l'interface ETH0

Si vous voulez réactiver ETH1,

# lien ip set Eth1 up 

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

# lien IP Show ETH1 

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 ited show # Route -N # netStat -rn 
Vérifiez la table de route Linux

La première colonne dans la sortie des trois commandes indique le réseau cible. La sortie de itinéraire IP Afficher (suivre le mot-clé dev) présente également les appareils réseau qui servent de passerelle physique vers ces réseaux.

Bien que de nos jours le commande IP est préféré à l'itinéraire, vous pouvez toujours vous référer à l'homme IP-RUTE et voie de l'homme pour une explication détaillée du reste des colonnes.

Exemple 3: Utilisation d'un serveur Linux pour acheminer les paquets entre deux réseaux privés

Nous voulons acheminer ICMP (ping) Paquets de Dev2 à Dev4 et l'inverse également (notez que les deux machines clients sont sur différents réseaux). Le nom de chaque NIC, ainsi que son adresse IPv4 correspondante, est donné à l'intérieur des crochets.

Notre environnement de test est le suivant:

Client 1: Centos 7 [ENP0S3: 192.168.0.17/24] - Dev1 Routeur: Debian Wheezezy 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 

Voyons la table de routage dans Dev1 (CentOS Box):

# IP Route Show 

puis le modifier pour utiliser son ENP0S3 Nic et la connexion à 192.168.0.15 pour accéder aux hôtes dans le 10.0.0.0/24 Réseau:

# ip route ajouter 10.0.0.0/24 via 192.168.0.15 DEV ENP0S3 

Qui lit essentiellement: «Ajoutez un itinéraire au 10.0.0.0/24 réseau via l'interface réseau ENP0S3 en utilisant 192.168.0.15 comme passerelle ».

Réseau de route dans Linux

De même dans Dev4 (OpenSuse Box) aux hôtes de ping dans le 192.168.0.0/24 Réseau:

# IP Route Ajouter 192.168.0.0/24 via 10.0.0.15 DEV ENP0S3 
Route réseau dans Linux

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

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

Maintenant, faisons du ping:

Vérifier le routage du réseau

et,

Statut de ping d'itinéraire

Pour rendre ces paramètres persistants à travers les bottes, modifiez / etc / sysctl.confli sur le routeur et assurez-vous que le filet.ipv4.ip_forward La variable est définie sur true comme suit:

filet.ipv4.ip_forward = 1 

De plus, configurez les NICS sur les deux clients (recherchez le fichier de configuration dans / etc / sysconfig / réseau sur opensuse et / etc / Sysconfig / Script de réseau sur Centos - dans les deux cas, il s'appelle ifcfg-enp0s3).

Voici le fichier de configuration de la zone OpenSuse:

Bootproto = diffusion statique = 10.0.0.255 iPaddr = 10.0.0.18 Masque de réseau = 255.255.255.0 passerelle = 10.0.0.15 nom = réseau ENP0S3 = 10.0.0.0 onoot = oui 
Exemple 4: Utilisation d'un serveur Linux pour acheminer les packages entre un réseau privé et Internet

Un autre scénario où une machine Linux peut être utilisée comme routeur est lorsque vous devez partager votre connexion Internet avec un LAN privé.

Routeur: Debian Wheezezy 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 du 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 mascarade # iptables -a avant -i eth0 -o eth1 -m état --state lié, établi -j accepter # iptables -a avant -i eth1 -o eth0 -j ACCEPTER 

La première commande ajoute une règle au Postal chaîne dans le tableau NAT (translation d'adresse réseau), indiquant que le NIC ETH0 doit être utilisé pour les packages sortants.

MASCARADE indique que ce réseau a une IP dynamique et qu'avant d'envoyer le package au «monde sauvage sauvage«Sur Internet, l'adresse source privée du paquet doit être changée par celle de l'IP publique du routeur.

Dans un LAN avec de nombreux hôtes, le routeur garde une trace des connexions établies / proc / net / ip_conntrack il sait donc où retourner la réponse d'Internet à.

Une seule partie de la sortie de:

# CAT / PROC / NET / IP_CONNTRACK 

est un spectacle dans la capture d'écran suivante.

Packages d'itinéraire dans Linux

Où l'origine (IP privée de la boîte OpenSuse) et la destination (Google DNS) des paquets sont mises en évidence. C'était le résultat de la course:

# curl www.Tecmint.com 

sur la boîte OpenSuse.

Comme je suis sûr que vous pouvez déjà deviner, le routeur utilise Google's 8.8.8.8 en tant que nom de nom, ce qui explique pourquoi la destination des paquets sortants pointe vers cette adresse.

Note: Que les packages entrants sur 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 gratuite»(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 dans Linux est quagga. Il permet aux administrateurs système de mettre en œuvre, avec un serveur Linux relativement peu coûteux, la même fonctionnalité qui est fournie par des 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 car il apprend de nouveaux meilleurs itinéraires pour gérer les paquets.

Puisqu'il s'agit d'une fourche de zèbre, un programme dont le développement a cessé il y a quelque temps, il maintient pour des raisons historiques les mêmes commandes et structure que le zèbre. C'est pourquoi vous verrez beaucoup de référence à Zebra à partir de ce moment.

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

Installation de quagga dans Linux

Pour installer quagga sur la distribution de votre choix:

# Aptitude Update && aptitude installer quagga [sur ubuntu] # yum Update && yum install quagga [Centos / rhel] # zypper refresh && zypper installer quagga [openseSU] 

Nous utiliserons le même environnement qu'avec l'exemple # 3, avec la seule différence que Eth0 est connecté à un routeur de passerelle principal avec IP 192.168.0.1.

Ensuite, modifiez / etc / quagga / daemons avec,

zèbre = 1 ripd = 1 

Créez maintenant les fichiers de configuration suivants.

# / etc / quagga / zèbre.conf # / etc / quagga / ripd.confli 

et ajouter ces lignes (remplacer pour un nom d'hôte et un mot de passe de votre choix):

service quagga redémarrer le nom d'hôte dev2 quagga 
# Service quagga redémarrer 
Démarrer le service Quagga

Note: Ce ripd.confli Le fichier de configuration est-il du protocole d'information de routage, qui fournit au routeur les informations dont les réseaux peuvent être atteints et jusqu'où (en termes de montant de houblon).

Notez que ce n'est qu'un des protocoles qui peuvent être utilisés avec Quagga, et je l'ai choisi pour ce tutoriel en raison de la facilité d'utilisation et parce que la plupart des appareils réseau le soutiennent, bien qu'il ait l'inconvénient de passer des informations d'identification en texte clair. Pour cette raison, vous devez attribuer des autorisations appropriées au fichier de configuration:

# chown quagga: quaggavty / etc / quagga / *.conf # chmod 640 / etc / quagga / *.confli 
Exemple 5: Configuration de Quagga pour acheminer dynamiquement le trafic IP

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

Configurer quagga

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

Connectez-vous au zèbre (écoute sur le port 2601), qui est l'intermédiaire logique entre le routeur et le noyau:

# Telnet localhost 2601 

Entrez le mot de passe qui a été défini dans le / etc / quagga / zèbre.confli fichier, puis activer la configuration:

Activer la configuration du terminal 

Entrez l'adresse IP et le masque réseau de chaque NIC:

Interth0 ip addr 192.168.0.15 IP Inter eth1 addr 10.0.0.15 Écriture de sortie de sortie 
Configurer le routeur

Maintenant, nous devons nous connecter au DÉCHIRER Terminal de démon (port 2602):

# Telnet localhost 2602 

Entrez le nom d'utilisateur et le mot de passe comme configuré dans le / etc / quagga / ripd.confli Fichier, puis saisissez les commandes suivantes en gras (des commentaires sont ajoutés pour la clarification):

activer Allume la commande de mode privilégié. configurer le terminal Modifications du mode de configuration. Cette commande est la première étape de la configuration Router RIP Permet RIP. réseau 10.0.0.0/24 Définit l'interface RIP Active pour le 10.0.0.0/24 réseau. sortie sortie écrire Écrit le fichier de configuration actuel de configuration. 
Activer le routeur

Note: Que dans les deux cas, la configuration est ajoutée aux lignes que nous avons ajoutées précédemment (/ etc / quagga / zèbre.confli et / etc / quagga / ripd.confli).

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 est derrière l'autre, et qui est le prochain saut à accéder à ce réseau, en exécutant la commande Afficher la route IP:

# Afficher la route IP 
Vérifier le routage IP

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

Conclusion

Dans cet article, nous avons expliqué comment configurer un routage statique et dynamique, en utilisant un ou plusieurs routeurs de boîte 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.

Devenir ingénieur certifié Linux