dimanche, juillet 09, 2017

Utiliser deux passerelles sur un même réseau (failsafe)

Ok, j'ai pas écrit un article depuis 2014 ça fait un bail :)

mais comme je ne savais pas ou coucher ces informations qui je l'espère pourront venir en aide à ceux qui comme moi font de la configuration réseau un poil bizarre / avancée.

Postulat de départ.
suite à un écrasement de ma ligne vdsl je me suis retrouvé sans net , Sosh a été bien incapable de bien gérer mon problème et au bout de 14 jours je les ai envoyé se faire foutre eux, leur vdsl et leur mobile par la même occasion.

comme j'avais une puce freemobile et que je suis couvert en 4G , je me suis dit allé on vire l'adsl et on reste en 4G. jusque la rien d'exceptionnel. 15 jours plus tard les 100 Go était bouffé (le grand qui matte des video youtube a donf etc )  bref me voila en débit limité et quand free met du débit limité il en fait pas semblant.
heureusement j'ai des voisin sympa, qui me prête leur accès wifi.

Me voila parti à créer un PONT entre eux et moi , bon comme j'ai du matos , j'installe l'antenne directive bref j'arrive a créer un pont stable de environ 6/8 Mbps upload et download (il s'en fou lui il est en vdsl2 55mbps down et 15 mbps upload pas un gros consommateur de net) j'aurais donc pu resté comme ça . Mais c'est trop simple :)

j'ai donc commandé un routeur 4G TP-link  pour mettre en dur ma connexion 4G et alimenter toutes les machines de ma maison (PCs, Consoles etc ...)

me voila donc avec 2 réseaux distinct   le pont wifi d'un coté et la 4G de l'autre

un plus lent et illimité (plus lent c'est relatif a 6/8Mbps lol) et un plus rapide mais limité (47/50 Mbps j'ai en 4G) à 100 Go/mois

l'idée est donc que toutes mes machines se voient dans le LAN , mais que selon les configurations les machines du grand (fan de videos youtube mangeuse de Go ) passent par le pont wifi , que mes machines passent par le 4G et que le serveur de la maison qui doit être lui toujours joignable puisse basculer automatiquement d'une passerelle sur l'autre pour rester en ligne.

j'ai donc procédé comme suit :

pour le pont wifi j'ai une petite machine (eeeBox) sous windows 7 32bits light qui n'a pour but que de ce connecter au voisin(s) ou au pire sur des freewifi / sfrwifi etc (je vais pas détailler la mais en gros ça se connecte à tout ce que ça peut pour chopper du net ) et de, via un pont reseau windows tout con rediriger ça via le LAN sur l'entrée internet dune fonera 2.0 sortie de son sommeil dans le placard.

la config de mon voisin est sur une plage IP 192.168.1.xxx avec un masque de 255.255.255.0 et l'adresse de sa passerelle freebox est 192.168.1.254

j'ai donc décidé pour éviter tout problème de passer mon réseau interne sur une plage IP 192.168.2.xxx en restant sur un masque 255.255.255.0 et  la passerelle on va y venir après

donc ma fonera prends son internet sur 192.168.1.254 soit la freebox du voisin (via la eeeBox en relais) . Je lui ai fixé comme adresse sur mon LAN l'ip 192.168.2.1 (voila donc notre première passerelle sur le lan)

Coté routeur 4G , j'ai donc fixé comme adresse l'ip 192.168.2.254 sur un masque réseau 255.255.255.0

pour des raisons de sécurité (pour éviter que les IP se chevauchent) j'ai donc fixé la fonera pour qu'elle donne des adresses en DHCP sur la plage 192.168.2.100 à 192.168.2.199 et le routeur 4G lui attribue des adresses en DHCP sur la plage 192.168.2.10 à 192.168.2.99.
je me suis donc gardé pour mes IP Fixes locales de 192.168.2.2 à 192.168.2.9 & 192.168.2.200 à 192.168.2.253
c'est dans ces plages que je vais mettre entre autre l'imprimante réseau, le serveur , les NAS etc bref tout ce que je veux fixer en dur dans mon réseau.

le coté pratique si le dhcp nous attribue une ip de 192.168.2.100 à 192.168.2.199 on aura donc par défaut 192.168.2.254 comme passerelle (on passe via la connexion 4G quoi)
et si on a une adresse ip attribué dans la plage 192.168.2.10 à 192.168.2.99 comme c'est la fonera qui a attribué elle va donner 192.168.2.1 comme passerelle soit le pont wifi

bien sur on peut configurer manuellement les 2 passerelles en fixant la priorité de l'une l'autre en changeant la valeur métrique de chaque passerelle.

restait donc pour mon serveur à s'assurer que lui soit toujours connecté au net et je ne voulais pas m'amuser a changer les passerelles a la main, surtout si je ne suis pas a la maison je ne peut plus prendre la main a distance.

j'ai donc fait un script batch windows qui toute les 10 secondes , va vérifier que les 2 passerelles soient la (répondent au ping) mais aussi que la connexion vers internet (ping sur Google) est bien fonctionnelle (bah oui si le PC relais merde par exemple , la fonera réponds au ping ok mais ne fourni plus de net ...) . ce script se lance et surveille automatiquement et ajuste la passerelle au besoin .

j'ai aussi mis que si on est passé en mode secours c'est a dire la le relais a merdé , au bout de 30 min il va réessayer de passer par la fonéra pour voir si le pc en relais est reparti (exemple le voisin a rebooté sa box du coup le lien a été coupé , mais une fois rebooté il est revenu)

voila donc le script qui s'occupe de ça en espérant que ça pourra vous être utile , alors ça n'est pas parfait j'imagine , mais je vous invites si vous savez faire mieux a me faire part de vos remarques , suggestions etc ...

netfix.bat


@ECHO OFF
setlocal EnableDelayedExpansion
set flag=1
set pass=192.168.2.254
set count=1
set compteur=0
:DEBUT
set status=1000
if %flag%==0 (
set status=0000
)
CLS
ECHO --------------------------
ECHO - CONFIG ACTUELLE RESEAU -
ECHO --------------------------
set countg=
set gateway=
for /F "tokens=11-14 delims=:." %%i in ('ipconfig /all^|find "Passerelle par d‚faut"') do (
set /a countg=!countg! + 1
set gateway!countg!=%%i.%%j.%%k.%%l
)
echo Passerelle:!gateway1!
set chk=!gateway1!
if %chk%==%pass% (
echo routeur 4G
)
PING www.google.fr -n 2 > NUL
IF %ERRORLEVEL% == 0 (
   ECHO --------------------------
   ECHO Internet           [OK ]
   set /a status=%status% + 100
)
IF %ERRORLEVEL% == 1 (
   ECHO --------------------------
   ECHO Internet           [OFF]
)
ECHO --------------------------
PING 192.168.2.1 -n 1 -w 10 > NUL
IF %ERRORLEVEL% == 0 (
   ECHO IP - 192.168.2.1   [OK ]
   set /a  status=%status% + 10
)
IF %ERRORLEVEL% == 1 (
   ECHO IP - 192.168.2.1   [OFF]
)
PING 192.168.2.254 -n 1 -w 10 > NUL
IF %ERRORLEVEL% == 0 (
   ECHO --------------------------
   ECHO IP - 192.168.2.254 [OK ]
   set /a  status=%status% + 1
)
IF %ERRORLEVEL% == 1 (
   ECHO --------------------------
   ECHO IP - 192.168.2.254 [OFF]
)
ECHO --------------------------
echo status = %status%
if %status% == 0111 ( GOTO ATTENDS )
if %status% == 1010 ( GOTO CAS1 )
if %status% == 1001 ( GOTO CAS2 )
if %status% == 1011 ( GOTO CAS3 )
if %status% == 1111 ( GOTO CAS4 )

:ATTENDS
if %flag%==0 (
echo Attention mode secours
echo %compteur%
set /a compteur=%compteur% +1
if %compteur% GEQ 180 (
:: toutes les 30 mins on tente de remettre la passerelle wifi pour retester le net
set compteur = 0
set flag=1
set count=1
set status=1111
)
)
TIMEOUT /T 10
GOTO DEBUT
GOTO FIN

:CAS1
echo cas1
:: pas internet gateway 1 ok gateway 2 hs
netsh interface ip set address VersLAN  static 192.168.2.2 255.255.255.0 192.168.2.1 1
:: on a fix le gateway sur 192.168.2.1 et on va retester dans 10 sec
GOTO ATTENDS
:CAS2
echo cas 2
:: pas internet gateway 1 hs gateway 2 ok
netsh interface ip set address VersLAN  static 192.168.2.2 255.255.255.0 192.168.2.254 1
:: on a fix le gateway sur 192.168.2.254 et on va retester dans 10 sec
GOTO ATTENDS
:CAS3
echo cas 3
:: pas internet gateway 1 ok gateway 2 ok
netsh interface ip set address VersLAN  static 192.168.2.2 255.255.255.0 192.168.2.254 1
:: on a fix le gateway sur 192.168.2.254 et on va retester dans 10 sec
:: ça veut dire que la fonera ne recois plus de net on bascule sur la 4G
set /a  status=%status% - 1000
:: on fixe donc le status pour ne plus toucher a la connextion
GOTO ATTENDS
:CAS4
echo cas 4
:: on est réglé sur le routeur 4G
:: alors que la fonera est active c'est bizarre
:: si le flag est a 1 c'est qu'on du perdre le reseau coté fonera
:: on va fixer le flag pour ne plus revenir ici

if %chk%==%pass% (
if %flag%== 1 (
set flag=0
set /a  status=%status% - 0111
)
) else (
set count=1
GOTO ATTENDS
)
if %count%==1 (
set count=0
netsh interface ip set address VersLAN  static 192.168.2.2 255.255.255.0 192.168.2.1 1
GOTO ATTENDS
)
GOTO ATTENDS
:CAS5

GOTO ATTENDS
:FIN



une fois en fonction ça donne un truc comme ça