Gérer plusieurs connexions internet avec OpenBSD

Gérer plusieurs connexions internet avec OpenBSD, ce qu’il faut faire :

Répartition de charge

Pré-requis : les passerelles pour l’accès à internet doivent être joignables via la même interface sur le firewall. OpenBSD est un système d’exploitation open source sous linux et propose un firewall gratuit et performant.
Pour mettre en place la répartition de charge sur plusieurs connexions, on ajoute des routes multi-path (algorithme Equal-Cost Multi-Path) :

route add -mpath default wan1_gw
route add -mpath default wan2_gw

Pour que le multipath fonctionne, il faut appliquer les paramètres sysctl suivants :

sysctl net.inet.ip.multipath=1
sysctl net.inet6.ip6.multipath=1

Ne pas oublier de mettre un masquerade dans /etc/pf.conf pour NATer sur la bonne ip source :

pass out on $wan_if from $net_internal to any nat-to $wan_if

Le champ use de la table de routage indique que les 2 connexions sont utilisées :

route show -inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Mtu Prio Iface
default wan1_gw UGSP 4 1214298 - 8 wan
default wan2_gw UGSP 37 43925 - 8 wan

Pour fixer les paramètres, on ajoute les routes dans la configuration de l’interface :

grep default /etc/hostname.re0
!route add -mpath default wan1_gw
!route add -mpath default wan2_gw

Et dans /etc/sysctl.conf :

net.inet.ip.multipath=1
net.inet6.ip6.multipath=1

Pour recharger les paramètres sysctl :

sysctl -w

Mettre en place un mécanismes de Failover

En l’état, les paquets sortent bien sur les 2 connexions, mais en cas de coupure de l’une d’elles, la moitié des connexions vont échouer. Il faut donc mettre en place un mécanisme de failover.
Pour le failover, on va mettre en place un script ifstated qui va vérifier toutes les 30 secondes l’état des interfaces et ajuster les routes en conséquence.
Dans un premier temps il faut choisir plusieurs ips à pinguer pour déterminer l’état de la connexion WAN. Dans l’exemple suivant on utilise les DNS primaires / secondaires d’opendns et Level3, mais on peut en définir d’autres.
Dans la configuration de l’interface, on ajoute :

!route add 4.2.2.1/32 wan1_gw
!route add 208.67.220.220/32 wan1_gw
!route add 4.2.2.2/32 wan2_gw
!route add 208.67.222.222/32 wan2_gw

On vérifie avec des traceroute qu’on sort bien par la bonne passerelle pour chaque ip définie plus haut :

traceroute 4.2.2.1

Penser à activer ifstated au démarrage dans /etc/rc.conf.local :

ifstated_flags=""

Et on crée le script /etc/ifstated.conf :

#
# ifstated.conf
#
#Etat de depart
init-state all_ok
#Checks toutes les 30s
wan1_ok = '( "ping -q -c 1 -w 5 4.2.2.1>/dev/null || ping -q -c 1 -w 5 208.67.220.220>/dev/null" every 30 )'
wan2_ok = '( "ping -q -c 1 -w 5 4.2.2.2>/dev/null || ping -q -c 1 -w 5 208.67.222.222>/dev/null" every 30 )'
#Definission des etats
state all_ok {
  if ! $wan1_ok {
    set-state wan1_down
  }
  if ! $wan2_ok {
    set-state wan2_down
  }
}
state wan1_down {
  init {
    run "/usr/bin/logger -s -t ifstated 'wan1_down'"
    run "/sbin/route delete -mpath default wan1_gw"
  }
  if $wan1_ok {
    run "/usr/bin/logger -s -t ifstated 'all_ok'"
    run "/sbin/route add -mpath default wan1_gw"
    set-state all_ok
  }
}
state wan2_down {
  init {
    run "/usr/bin/logger -s -t ifstated 'wan2_down'"
    run "/sbin/route delete -mpath default wan2_gw"
  }
  if $wan2_ok {
    run "/usr/bin/logger -s -t ifstated 'all_ok'"
    run "/sbin/route add -mpath default wan2_gw"
    set-state all_ok
  }
}

Les changements d’état sont logués dans le fichier /var/log/messages. Pour tester, on débranche une des connexions, et on vérifie que la route par défaut correspondante ne soit plus présente dans la table de routage après 30s. L’entrée doit ré-apparaître quand on rebranche la connexion. Effectuer ensuite le même test pour la seconde connexion.
Au besoin, lancer ifstated en mode debug pour visualiser les informations sur la sortie standard :

ifstated -dv

En savoir plus sur la gestion des connexions internet avec OpenBSD

Consultez la documentation proposée par OpenBSD. Formez-vous sur la gestion des connexions internet avec OpenBSD avec notre offre de formation Linux et notre offre de formation réseau et infrastructure.

Commentaire sur "Gérer plusieurs connexions internet avec OpenBSD"

  1. atome

    « OpenBSD est un système d’exploitation open source sous linux » Ahahahah ! Allez, fermer l’onglet.

Laisser un commentaire

Inscrivez-vous à la newsletter Syloé !

Recevez gratuitement les analyses de nos experts