Tu ne propose pas d’astuce, je viens de déplacer ton fil dans la bonne section.
A mon avis l’autoconfiguration est une mauvaise idée pour un routeur. Pas pour rien qu’en IPv6 l’autoconfiguration sans état est désactivée par défaut sur les interfaces qui ont forwarding=1.
Concrètement, c’est quoi « la configuration » ? Un ou plusieurs fichiers ? Une archive ? Une image disque ?
Bonjour,
Je pensez que c’était une section aussi bien pour donner que demander des astuces.
Désolé.
Bonjour,
ta problématique pour installer tes routeurs est d’avoir un routeur actif, et un routeur passif avec une IP qui est toujours la même. c’est un système avec HA.
Il faut que chaque routeur aient une adresse, plus prévoir une adresse IP virtuelle.
utilisez Carp (package ucarp il me semble) pour pouvoir basculer d’un routeur sur l’autre.
L’IP virtuelle restera la même quelque soit le routeur actif.
On ne met jamais des routeurs en DHCP sur l’interface active, pour des raisons de sécurité notamment. Qui plus est tu ne pourra pas affecter l’IP virtuelle via DHCP.
Quand aux synchronisation de configuration entre deux machines il suffit d’exclure ce qui touche au réseau. Comment faites vous cette synchronisation de configuration, et quelles sont les configurations qui sont susceptibles d’être modifiées?
Au final ce n’est simplement qu’une synchronisation de fichiers de configurations, donc simplement une synchronisation de fichier.
Bonjour Pascal,
Merci de ton retour.
Cela tombe bien nous avons désactivé l’IPV6 du routeur, car nous n’en avons aucune utilité.
Le routeur est en faite un un système « propriétaire » de notre Virtual Provider basé sur Debian. Il fonctionne avec un système en live mais certain fichier sont persistant lorsque que l’on effectue une commande équivalent a un « write » ou « copy running-config startup-config ».
Lorsque nous l’effectuons cela génère un fichier .gz dans un partition persistante protégé. Cette archive contient un fichier .cpio qui lui même contient une partie d’information en claire est un autre « binarisé » (je pense car illisible depuis un nano).
La partie lisible contient par exemple le contenu des fichiers /etc/hostname, /etc/network/interfaces etc…
Lorsque que nous ajoutons des configurations comme des routes dans le fichier interfaces, nous effectuons un pseudo « Write » puis nous copions le fichier dans le second routeur et nous le redémarrons.
Mais voila, lors de ce chargement de startup config d’un routeur a l’autre il faut pas oublier de changer l’ip de l’interface d’interconnexion entre les 2 sinon il devient injoignable pour cause de conflit IP (ce qui est logique).
Je voudrais justement régler ce soucis pas un système ou dans la config quelques part il regarde sa MAC et ce dise « Ah c’est la 00:EF alors tu prendre la 169.254.1.1/30 » ou « Ah c’est la 00:AB alors tu prendre la 169.254.1.2/30 »
En soit cela parait simple mais pas tant que ça finalement lol.
Et, c’est bien dommage car IPv6 est intéressant à faire fonctionner.
Ne serait-ce que d’avoir des adresses de type ULA, qui permettront de n’envoyer QUE des messages sur son propre réseau IPv6 sans communiquer avec d’autres réseaux, dont le grand Net.
(bien sûr, je rationalise/schématise le propos).
Mais ça, c’est un autre propos, hors du soucis présent.
Ça n’a aucun rapport avec ce que j’essayais de te dire.
Il n’y a pas un élément de configuration ou un identifiant propre à chaque routeur qui permettrait de dire « je suis le routeur A » ou « je suis le routeur B » ?
Bonjour Zargos,
Nous utilisons déjà du HA via Heartbeat pour d’autre client, mais ce n’est pas ce que nous voulons pour ce site avec le client. Dans notre cas, on veut un STB mais contrairement à d’habitude et vu sa localisation, nous voulons faire un STB avec la possibilité de mettre à jour cette en temps réel sans a devoir reprendre la conf du 2em systématiquement.
Bonjour Pascal,
Non malheureusement, ce qui n’est pas présent dans ce fichier de backup ne sera pas conservé au reboot dû au mode de fonctionnement live prévu dans sa conception.
Je suis donc obligé sur le fichier de configuration partagé, d’avoir l’information des configurations des 2 routeurs. (A la base identique en tout points, mais seul l’IP de d’une interface doit être différentes).
Bonjour a tous,
Bon n’ayant pas trouvé d’alternative rapidement il me reste plus que le scripting.
Etant novice dans ce domaine, voici ce que j’ai fait. Je suis ouvert a vos critiques d’améliorations avant de le déployer.
Ceci marche dans mon labs.
#!/bin/bash
# Viariables
mac=$(cat /sys/class/net/eth4/address)
MacMaster=**:**:**:**:46:35
MacSlave=**:**:**:**:46:1d
IpMaster=169.254.2.1/30
IpSlave=169.254.2.2/30
# Script
# Si la MAC correspond à l'ISR du Master il ajoute l'ip 2.1 a l'interface eth4
if [ "$mac" = "$MacMaster" ]
then
/bin/ip a a $IpMaster dev eth4
else
exit
fi
# Si la MAC correspond a l'ISR du Slave il ajoute l'ip 2.2 à l'interface eth4
if [ "$mac" = "$MacSlave" ]
then
/bin/ip a a $IpSlave dev eth4
else
exit
fi
Merci d’avance de votre aide.
Tu es sûr d’avoir testé correctement ce script ? Pour moi il ne fonctionne pas car
else
exit
termine le script si le premier test est négatif et donc empêche d’entrer dans le second test.
Utilise plutôt une structure case
.
Accessoirement, il vaut mieux déclarer /bin/sh
comme shell non interactif (et éviter les bashismes le cas échéant).
Bonsoir Pascal,
En effet, sur le 2em le script s’arretez à la fin du premier IF.
J’ai l’ai ai donc retirer, mais je remettrais le 2em pour clore le script.
Trés bonne idée pour le bin/sh je vais le changer.
Pour le case je vais regarder de ce pas. Quel sont les avantages du case sur le if pour toi ?
Aucun intérêt, surtout s’il reste conditionnel. Si tu veux mettre un exit
qui serve à quelque chose, il faut le mettre après le premier ip
pour éviter l’exécution inutile du second if
. Mais on peut aussi éviter l’exécution inutile du second if
en mettant ce dernier dans un else
.
C’est prévu pour tester différentes valeurs d’une même variable ou expression.
Bonjour je viens un peu tard dans la discussion. Je ne connais pas ta topologie réseau. Ni tes équipements.
Chaque réseau derrière un routeur a son domaine de broadcast donc la diffusion du dhcp est limité a son domaine de broadcast.
Sur un Switch manageable tu peux faire un relais dhcp qui va pointer vers ton serveur dhcp.
Il faut après rajouter un nouveau subnet dhcp sur ton serveur qui correspond aux ips de ton réseau relayé
Bonjour 6no,
Il n’y a rien entre les 2 routeurs. Ceci n’est qu’une interconnexion entre 2 routeur et en directe.
Pas de serveur, pas de switch rien.
Pas de topologie spécial dans ce sujet. Seulement 2 routeurs et une configuration commune et différencier l’IP entre les 2 par leur MAC address.
Merci de tes conseils Pascal,
Voici ce que je fais, peux tu me dire ce que tu en pense ?
Version 2 en IF
#!/bin/sh
# Viariable
mac=$(cat /sys/class/net/eth4/address)
MacMaster=*:46:35
MacSlave=*:46:1d
IpMaster=169.254.2.1/30
IpSlave=169.254.2.2/30
# Script
# Si la MAC correspond a l'ISR du Master il ajoute l'ip 2.1
if [ "$mac" = "$MacMaster" ]
then
/bin/ip a a $IpMaster dev eth4 ; exit
# Si la MAC correspond a l'ISR du Slave il ajoute l'ip 2.2
elif [ "$mac" = "$MacSlave" ]
then
/bin/ip a a $IpSlave dev eth4 ; exit
# Si rien corespond sortie
else
exit
fi
Version 1 en CASE
#!/bin/sh
# Viariable
mac=$(cat /sys/class/net/eth4/address)
MacMaster=**:46:35
MacSlave=**:46:1d
IpMaster=169.254.2.1/30
IpSlave=169.254.2.2/30
# Script
case $mac in
"$MacMaster")
/bin/ip a a $IpMaster dev eth4 ; exit
;;
"$MacSlave")
/bin/ip a a $IpSlave dev eth4 ; exit
;;
*)
exit
;;
esac
Merci d’avance.
Dans le script 2, la condition else exit
ne sert à rien que ne ferait le script par défaut !
Idem dans le script 1, l’utilisation de la sortie exit
dans les cas génériques, n’a pas d’intérêt, puisque de toute façon, dans le cas actuel, si pas de correspondance, fin du script et sortie.
Bref, ne cherchez pas à faire compliqué.
Sinon, mis-à-part l’usage de double-quote sur les déclarations de variables et leur utilisation, tout ça me semble bon.
mac="$(cat /sys/class/net/eth4/address)"
MacMaster="**:46:35"
MacSlave="**:46:1d"
IpMaster="169.254.2.1"
IpSlave="169.254.2.2"
# Script
case "${mac}" in
"${MacMaster}")
/bin/ip a a "${IpMaster}" dev eth4
;;
"${MacSlave}")
/bin/ip a a "${IpSlave}" dev eth4
;;
esac
Astuce lié à la déclaration de l’environnement shell, et de l’usage de cat :
⇒ si le shell déclaré est bash
⇒ alors cat
peut être appelé ainsi : < /dir/file
; en appelant le redirecteur d’entrée, sans écrire spécifiquement le nom du binaire, cela agit comme si cat était volontairement appelé.
(cette spécificité n’est pas POSIX ; et donc seuls certains shell peuvent l’utiliser)
Voilà !
Cela doit pouvoir se faire avec systemd-networkd et des unités network de ce type :
[Match]
MACAddress=61:02:09:7c:88:f7
[Network]
Description=network interface xxx
DHCP=no
Address=a.b.c.d/m
Gateway=a.b.c.d
Bonjour Pengouin,
Super, merci pour tes corrections et information complémentaire.
Juste pour ma connaissance, quel fonction on les " " ainsi que les { } qui entoure chaque variable ?
J’avoue mettre des exit partout car j’ai toujours peur d’un vieux script qui boucle et me plante le routeur étant que très amateur de Scripting.
Hello Bruno1
Merci, j’avoue que j’aurais bien tenté d’opter plutôt pour cette option au départ que sur le Scripting.
Malheureusement par manque de temps je vais livrer par script pour ce cas, mais je vais rapidement tester cela sur un autre routeur que j’ai en stock pour faire des tests car elle me semble plus propre.
Actuellement mon script est appelé par mon fichier interfaces :
auto eth4
iface eth4 inet manual
up /etc/init.d/autoconfig-ip
J’avais tenté de le faire en rc.local mais cela n’existe plus sur les nouvelles version du routeur et pour le remettre en service cela impose beaucoup de modification, car ils sont en systemd avec du Generated pour le SYS V
J’ai donc tenté de le faire par un module Systemd, la non plus le résultat n’était pas terrible car le système étant en live et ne backupant pas tout, au reboot cette partie de module n’avait pas été conservé.
J’ai du donc opté sur ce que j’étais sûr qui était conservé.
Encore Merci à tous de votre aide.
Cordialement