Salut,
Guillaume Leccese a écrit :
J'ai un serveur avec deux connexions PPP. L'ordre est tres important,
une étant la principale, l'autre la secondaire. Les DNS pointent sur
la principal, et mes rêgles de firewall n'autorisent le trafic que sur
la principale, la seconde étant là pour l'administration de secours.
La première n'a pas l'air tres stable malheureusement ... et ca
m'arrangerais pas mal qu'elle soit toujours nommée ppp0, et que ca ne
depende pas de l'ordre de lancement de pppd. Sinon je dois passer par
des manips via les routes par défaut, c'est pas pratique et pas du
tout idéal. Si au moins la connexion de secours était toujours en ppp1
voir autre chose, ca serait plus pratique.
Y a-t-il un moyen de faire cela ?
Je ne connais pas de moyen de forcer a priori ou changer a posteriori le
nom d'une interface PPP créée par pppd. Ma passerelle est elle aussi
susceptible de gérer plusieurs interfaces PPP montées dans n'importe
quel ordre et dont le nommage est par conséquent imprévisible. J'utilise
des scripts placés dans /etc/ppp/ip-up.d/ (resp. /etc/ppp/ipv6-up.d/)
que pppd lance après l'établissement de la liaison IP (resp. IPv6) en
leur passant diverses variables d'environnement comme le nom de
l'interface, l'adresse IP locale, l'adresse IP du pair, la valeur de
l'option 'ipparam', pour créer les règles iptables et les routes liées à
chaque connexion, ou pour relancer ou envoyer un signal à un démon pour
qu'il prenne l'interface en compte. J'utilise la valeur de l'option
'ipparam' dans les fichiers d'options de pppd pour différencier les
connexions.
Exemple fictif :
======================================================
#!/bin/sh
# Variables d'environnement :
# Variable Name Example
# PPP_IFACE Interface name ppp0
# PPP_TTY The tty ttyS1
# PPP_SPEED The link speed 38400
# PPP_LOCAL Local IP number 12.34.56.78
# PPP_REMOTE Peer IP number 12.34.56.99
# PPP_IPPARAM Optional "ipparam" value foo
# actions apres debut ou fin d'une connexion PPP en IPv4
# creation ou suppression des regles iptables liees aux interfaces PPP
if [ $PPP_IPPARAM == "connexion1" ]
then
iptables -A INPUT -i $PPP_IFACE -d $PPP_LOCAL -j ACCEPT
iptables -t nat -A POSTROUTING -o $PPP_IFACE -j MASQUERADE
route add default gw $PPP_REMOTE dev $PPP_IFACE
kill -HUP `cat /var/run/mon_demon.pid`
elif [ $PPP_IPPARAM == "connexion2" ]
then
iptables -A INPUT -i $PPP_IFACE -d $PPP_LOCAL -j ACCEPT
route add -net 192.168.7.0/24 gw $PPP_REMOTE dev $PPP_IFACE
fi
======================================================
Réciproquement j'utilise des scripts placés dans /etc/ppp/ip-down.d/
(resp. /etc/ppp/ipv6-down.d/) que pppd lance après la fermeture de la
liaison IP (resp. IPv6) avec les mêmes arguments pour nettoyer les
règles iptables obsolètes (normalement les routes liées à l'interface
qui tombe sont automatiquement nettoyées).
Rappel : ces scripts sont lancés par run-parts et doivent remplir des
conditions sur le nom et la mention de l'interpréteur en début de script
(cf. man run-parts).