Je voudrais avoir plusieurs NIC (eth0 et wlan0) dans le même sous-réseau et servir de sauvegarde pour les applications sur l'hôte si l'un des NIC échoue. Pour cette raison, j'ai créé une table de routage supplémentaire. Voici à quoi /etc/network/interfaces
ressemble:
iface eth0 inet static
address 192.168.178.2
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.2
post-up ip route add default via 192.168.178.1 dev eth0
post-up ip rule add from 192.168.178.2/32
post-up ip rule add to 192.168.178.2/32
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.3
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.3 table rt2
post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
post-up ip rule add from 192.168.178.3/32 table rt2
post-up ip rule add to 192.168.178.3/32 table rt2
Cela fonctionne pour la connexion à l'hôte: je peux toujours y entrer en SSH si l'une des interfaces échoue. Cependant, les applications sur l'hôte ne peuvent pas initialiser une connexion au monde extérieur si elle eth0
est en panne. Voilà mon problème.
J'ai fait des recherches sur ce sujet et trouvé les informations intéressantes suivantes:
Lorsqu'un programme initie une connexion sortante, il est normal qu'il utilise l'adresse source générique (0.0.0.0), n'indiquant aucune préférence quant à l'interface utilisée à condition que l'adresse de destination appropriée soit accessible. Elle n'est remplacée par une adresse source spécifique qu'après la décision de routage. Le trafic associé à de telles connexions ne correspondra donc à aucune des règles de politique ci-dessus et ne sera dirigé vers aucune des tables de routage nouvellement ajoutées. En supposant une configuration par ailleurs normale, il passera à la place à la table de routage principale. http://www.microhowto.info/howto/ensure_symmetric_routing_on_a_server_with_multiple_default_gateways.html
Ce que je veux, c'est que la table de routage principale ait plus d'une passerelle par défaut (une sur eth0
et une sur wlan0
) et qu'elle accède à la passerelle eth0
par défaut via par défaut et via wlan0
si eth0
est en panne.
Est-ce possible? Que dois-je faire pour obtenir une telle fonctionnalité?
Réponses:
Je l'ai résolu moi-même. Il semble y avoir très peu d'informations sur les choses de réseau que vous pouvez faire avec Linux, j'ai donc décidé de documenter et d'expliquer ma solution en détail. Voici ma configuration finale:
Première étape : créez une nouvelle table de routage pour chaque interface dans
/etc/iproute2/rt_tables
. Appelons-les rt1, rt2 et rt3Deuxième étape : configuration du réseau dans
/etc/network/interfaces
. Ceci est la partie principale et je vais essayer d'expliquer autant que possible:Si vous tapez,
ip rule show
vous devriez voir ce qui suit:Cela nous indique que le trafic entrant ou sortant de l'adresse IP "192.168.178.99" utilisera la table de routage rt1. Jusqu'ici tout va bien. Mais le trafic généré localement (par exemple, vous voulez envoyer une requête ping ou ssh de la machine à un autre endroit) nécessite un traitement spécial (voir la grande citation dans la question).
Les quatre premières lignes de post-up
/etc/network/interfaces
sont simples et des explications peuvent être trouvées sur Internet, la cinquième et dernière ligne de post-up est celle qui fait que la magie opère:Notez comment nous n'avons pas spécifié de table de routage pour cette ligne de post-up. Si vous ne spécifiez pas de table de routage, les informations seront enregistrées dans la
main
table de routage que nous avons vueip rule show
. Cette ligne de post-up place une route par défaut dans la table de route "principale" qui est utilisée pour le trafic généré localement qui n'est pas une réponse au trafic entrant. (Par exemple, un MTA sur votre serveur essayant d'envoyer un e-mail.)Les trois interfaces placent toutes une route par défaut dans la table de route principale, bien qu'avec des métriques différentes. Jetons un coup d'œil à la
main
table de routage avecip route show
:Nous pouvons voir que la table de routage principale a trois routes par défaut, bien qu'avec différentes métriques. La priorité la plus élevée est eth0, puis wlan1 puis wlan0 car des nombres métriques inférieurs indiquent une priorité plus élevée. Étant donné que
eth0
la métrique la plus basse est la route par défaut qui va être utilisée aussi longtemps qu'elleeth0
est en place. S'ileth0
diminue, le trafic sortant passe àwlan1
.Avec cette configuration, nous pouvons saisir
ping 8.8.8.8
un terminal etifdown eth0
un autre.ping
devrait toujours fonctionner car, carifdown eth0
supprimera l'itinéraire par défaut lié àeth0
, le trafic sortant basculera verswlan1
.Les lignes de post-down s'assurent que les tables de routage associées sont supprimées de la base de données de politique de routage (
ip rule show
) lorsque l'interface tombe en panne, afin de garder tout en ordre.Le problème qui reste est que lorsque vous retirez la prise de
eth0
la route par défaut poureth0
est toujours là et le trafic sortant échoue. Nous avons besoin de quelque chose pour surveiller nos interfaces et pour exécuterifdown eth0
s'il y a un problème avec l'interface (c'est-à-dire une panne de NIC ou quelqu'un tirant la prise).Dernière étape : entrez
ifplugd
. C'est un démon qui surveille les interfaces et s'exécuteifup/ifdown
si vous débranchez la prise ou s'il y a un problème avec la connexion wifi/etc/default/ifplugd
:Vous pouvez maintenant retirer la fiche
eth0
, le trafic sortant basculera verswlan1
et si vous remettez la fiche en place, le trafic sortant redeviendraeth0
. Votre serveur restera en ligne tant que l'une des trois interfaces fonctionnera. Pour vous connecter à votre serveur, vous pouvez utiliser l'adresse IP de eth0 et en cas d'échec, l'adresse IP de wlan1 ou wlan0.la source
scp
session sera interrompue car l'adresse IP change. Vous pouvez essayer d'utiliserwithsctp
pour maintenir la connexion en vie dans un tel cas ou utiliserrsync
au lieu descp
limiter le transfert à partir du point où il s'est arrêté.withsctp
fonctionnera également pour un seul itinéraire par défaut.Linux offre une meilleure solution que votre solution de script: la liaison de sauvegarde active.
De cette façon, votre machine n'aura qu'une seule adresse IP (et une seule adresse mac) et commutera automatiquement et de manière transparente les interfaces si une interface devient indisponible. Aucune interruption de toute connexion TCP (ni à votre réseau local ni à Internet).
J'utilise cette configuration moi-même pour basculer automatiquement de eth0 à wlan0 sur mon ordinateur portable Debian lorsque je déconnecte mon ordinateur portable de la station d'accueil.
Mes / etc / network / interfaces:
Vous pouvez facilement étendre cette configuration pour inclure plusieurs périphériques WLAN. Définir l'
primary_reselect
option surbetter
(sélectionner automatiquement le lien le plus rapide) devrait aider ici.Pour plus d'informations, voir https://wiki.linuxfoundation.org/networking/bonding et https://wiki.debian.org/Bonding
Et (bien sûr) la documentation du noyau Linux sur https://www.kernel.org/doc/Documentation/networking/bonding.txt
la source