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" <christo...@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.tar...@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

Répondre à