[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Faire un routeur HA dual WAN (+ VPN) avec un PC sous debian



J'ai eu un zyxel il y a longtemps. Le problème c'est le jour où ils ont décidé de l'arrêter, plus de muse à jour.
Pour moi, j'ai un sg3100 de chez netgate et pas de soucis


Le 15 juin 2023 18:06:39 GMT+02:00, roger.tarani@free.fr a écrit :
Merci pour le script.

Je vois que le ZYXEL LTE490-M904 est à environ 400 € sur le site du fabricant et à 730 € chez certains revendeurs.
C'est un produit pour l'extérieur (IP68).
Il a bien "One Gigabit RJ-45 PoE LAN port".
https://www.zyxel.com/fr/fr/products/mobile-broadband/4g-lte-a-pro-outdoor-router-lte7490-m904

----- Mail original -----
De: "Christophe Maquaire" <christophe@ce2c.com>
À: "Liste Debian" <debian-user-french@lists.debian.org>
Envoyé: Mercredi 14 Juin 2023 18:37:44
Objet: Re: Faire un routeur HA dual WAN (+ VPN) avec un PC sous debian

Le mercredi 14 juin 2023 à 17:46 +0200, roger.tarani@free.fr a écrit :
Bonjour,

Bonjour,
J'ai besoin de disposer d'un lien internet redondant (FO+ 4G).
Si le lien principal (FO) tombe, alors l'autre lien 4G prend le
relais automatiquement.
Si le lien principal revient, alors c'est lui qui va reprendre le
relais.

J'aimerais en réaliser un avec un PC debian équipé des matériels et
logiciels nécessaires.
(Mon expérience du Raspberry me fait oublier cette solution : sur le
long terme, mes cartes flash "haut de gamme" n'ont jamais tenu)

Je dispose :
- d'un modem FO (interface Ethernet) et d'un routeur Ethernet/WiFi
d'un opérateur.
IMPORTANT : j'ignore si le routeur de l'opérateur peut être remplacé
par n'importe quel routeur !
- d'un modem 4G avec une interface WiFi+USB (j'attends un modem qui
ait aussi une interface Ethernet)
 - d'un PC qui a trois interfaces réseau (2 Ethernet et 1 WiFi) ;
logiquement, il lui faudrait 3 cartes réseau...

Je sais que c'est théoriquement possible de faire ça. Ce doit être du
routage de flux conditionnel (sur l'état des liens).
Et je sais par expérience dans un domaine approché que ça doit être
rapide ou trrrrès long à réaliser.
Surtout que je n'ai pas d'expérience.

J'ai un script récupéré je ne sais plus où et adapté à mes besoins qui
fait çà en IPv4

-------début--------
#!/bin/bash

# variables (eventuellement passees par ENV)

CHECK_DELAY=${CHECK_DELAY:-5}
CHECK_IP=${CHECK_IP:-1.1.1.1}
PRIMARY_IF=${PRIMARY_IF:-enp3s0f0}
PRIMARY_GW=${PRIMARY_GW:-192.168.1.254}
BACKUP_IF=${BACKUP_IF:-enp4s0f1}
BACKUP_GW=${BACKUP_GW:-192.168.2.254}
FAILOVER_LOG=${FAILOVER_LOG:-/var/log/failover.log}

date >> $FAILOVER_LOG
echo "CHECK_DELAY " $CHECK_DELAY >> $FAILOVER_LOG
echo "CHECK_IP " $CHECK_IP >> $FAILOVER_LOG
echo "PRIMARY_IF "$PRIMARY_IF >> $FAILOVER_LOG
echo "PRIMARY_GW " $PRIMARY_GW >> $FAILOVER_LOG
echo "BACKUP_IF " $BACKUP_IF >> $FAILOVER_LOG
echo "BACKUP_GW " $BACKUP_GW >> $FAILOVER_LOG


# Comparaison défault GW actuelle avec celle donnée en argument
gateway_if() {
[[ "$1" = "$(ip route get "$CHECK_IP" | grep dev | cut -d ' ' -f5 )" ]]
}


# boucle continue de vérification de la connectivité sur primary
while true
do
if gateway_if "$BACKUP_IF"
then
ip route add "$CHECK_IP" via "$PRIMARY_GW" dev "$PRIMARY_IF"
PING_PRIMARY_IF=$( ping -I "$PRIMARY_IF" -c1 "$CHECK_IP"|grep
'packet loss'|cut -d ' ' -f4)
ip route del "$CHECK_IP" via "$PRIMARY_GW" dev "$PRIMARY_IF"
else
PING_PRIMARY_IF=$(ping -I "$PRIMARY_IF" -c1 "$CHECK_IP"|grep
'packet loss'|cut -d ' ' -f4)
fi

if [ $PING_PRIMARY_IF -eq 1 ]
# succès de verif interface primaire
then
# On est sur backup?
if gateway_if "$BACKUP_IF"
then
# Switch sur primary
date >> $FAILOVER_LOG
echo "GW "$BACKUP_GW "=> "$PRIMARY_GW >> $FAILOVER_LOG
echo "INTERFACE "$BACKUP_IF "=> "$PRIMARY_IF >> $FAILOVER_LOG
ip route del default via "$BACKUP_GW" dev "$BACKUP_IF"
ip route add default via "$PRIMARY_GW" dev "$PRIMARY_IF"
fi
else
# echec de verif interface primaire
# On est sur primary?
if gateway_if "$PRIMARY_IF"
then

# Switch sur backup
ip route del default via "$PRIMARY_GW" dev "$PRIMARY_IF"
ip route add default via "$BACKUP_GW" dev "$BACKUP_IF"
date >> $FAILOVER_LOG
echo "GW "$PRIMARY_GW "=> "$BACKUP_GW >> $FAILOVER_LOG
echo "INTERFACE "$PRIMARY_IF "=> "$BACKUP_IF >> $FAILOVER_LOG
fi
# la primary est down et on est dèjà sur la backup
# du coup on espère que la backup est UP !!!!
fi
sleep "$CHECK_DELAY"
done

-------fin-----

En gros on ping sur l'interface usuelle, si ça foire on passe sur
l'interface de backup en adaptant la table de routage.
Si l'interface usuelle remonte, on switch de nouveau.

Si on NAT (c'est probable) il faut ajouter les règles utiles (iptables
ou nftables)


Quel modèle vous a satisfait ?

J'ai un routeur ZYXEL LTE490-M904 sur la façade qui fonctionne pas mal,
mais qui n'est pas donné

PS : Je ne dispose pas d'info des opérateurs pour déterminer si un
tel appareil saurait remplacer le modem FO de l'opérateur et
communiquer avec le serveur FO de l'opérateur.
Je dirais plutôt que non (protocole proprio ?)
Avez-vous déjà réussi à utiliser votre propre modem FO au réseau de
votre opérateur ?

Me contente d'une box...
Merci.
De rien,
Christophe

Benoît szczygiel

Reply to: