Auteur Sujet: Problème Gateway incorrect sur DHCP-Client MikroTik modem 4G IP Passtrough  (Lu 411 fois)

0 Membres et 1 Invité sur ce sujet

Tomate

  • Abonné SFR fibre FttH
  • *
  • Messages: 8
Bonjour a tous et merci pour ce merveilleux forum ! Pour mon premier message petit problème de taille je penses,

Je rencontre un problème avec mon routeur MikroTik sous RouterOS 7.15.3 en configuration failover 4G. L'interface concernée est une interface 4G nommée `ether-4G`, qui récupère une adresse IP via un client DHCP depuis un routeur en mode IP Passtrough. Le souci est que bien que l'adresse IP soit correctement assignée, la gateway reçue via le DHCP est incorrecte.

Détails du problème :
  • Adresse IP reçue (via DHCP sur MikroTik) : 100.108.81.210/30
  • Passerelle reçue (via DHCP) : 100.108.81.209 (incorrecte)
  • Passerelle correcte (vérifiée sur le Zyxtel) : 100.108.81.211
En conséquence, la route par défaut configurée sur le MikroTik pointe vers une mauvaise passerelle, ce qui entraîne l'absence de connectivité Internet sur la 4G.

Informations récupérées via le routeur MikroTik :

[Cedric@MikroTik] > /ip/dhcp-client/print detail                                                                                     
Flags: X - disabled, I - invalid, D - dynamic
 0   interface=sfp-ONT add-default-route=yes default-route-distance=1 use-peer-dns=yes use-peer-ntp=no
     dhcp-options=hostname,clientid,vendor-class-identifier status=bound address=x.x.x.x/24 gateway=x.x.x.x
     dhcp-server=x.x.x.x primary-dns=x.x.x.x secondary-dns=x.x.x.x expires-after=8m38s

 1   interface=ether-4G add-default-route=no use-peer-dns=no use-peer-ntp=no dhcp-options=hostname,clientid status=bound
     address=100.108.81.210/30 gateway=100.108.81.209 dhcp-server=100.108.81.209 primary-dns=172.20.2.39 expires-after=17m33s

Résultats des tests de ping sur le MikroTik :

[Cedric@MikroTik] > ping 8.8.8.8 src-address=100.108.81.209
  SEQ HOST                                     SIZE TTL TIME       STATUS                                                         
    0                                                              could not make socket                                         
    1                                                              could not make socket                                         
    2                                                              could not make socket                                         
    sent=3 received=0 packet-loss=100%

[Cedric@MikroTik] > ping 8.8.8.8 src-address=100.108.81.210
  SEQ HOST                                     SIZE TTL TIME       STATUS                                                         
    0 8.8.8.8                                    56 119 1ms586us 
    1 8.8.8.8                                    56 119 1ms790us 
    2 8.8.8.8                                    56 119 1ms587us 
    3 8.8.8.8                                    56 119 1ms193us 
    sent=4 received=4 packet-loss=0% min-rtt=1ms193us avg-rtt=1ms539us max-rtt=1ms790us

[Cedric@MikroTik] > ping 8.8.8.8 src-address=100.108.81.211
  SEQ HOST                                     SIZE TTL TIME       STATUS                                                         
    0 8.8.8.8                                    56 119 1ms964us 
    1 8.8.8.8                                    56 119 1ms759us 
    2 8.8.8.8                                    56 119 1ms379us 
    sent=3 received=3 packet-loss=0% min-rtt=1ms379us avg-rtt=1ms700us max-rtt=1ms964us

Informations récupérées via le modem Zyxel en SSH :

ZySH> ifconfig
br0       Link encap:Ethernet  HWaddr D4:1A:D1:CE:A4:04
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          inet6 addr: fe80::d61a:d1ff:fece:a404/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth2      Link encap:Ethernet  HWaddr D4:1A:D1:CE:A4:04
          inet6 addr: fe80::d61a:d1ff:fece:a404/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth2.1    Link encap:Ethernet  HWaddr D4:1A:D1:CE:A4:04
          inet addr:100.108.81.209  Bcast:100.108.81.211  Mask:255.255.255.252
          inet6 addr: fe80::d61a:d1ff:fece:a404/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth2.2    Link encap:Ethernet  HWaddr D4:1A:D1:CE:A4:04
          inet6 addr: fe80::d61a:d1ff:fece:a404/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Ce que j'aimerais faire : 
Je cherche à automatiser la modification de la passerelle par défaut lorsque le DHCP client reçoit une nouvelle adresse IP, en ajoutant `+1` à l'adresse IP récupérée par le client DHCP. J'ai déjà essayé de créer un script qui se déclenche lors du renouvellement du bail DHCP, mais je n'arrive pas à obtenir un résultat fonctionnel.

Script actuel que j'essaie d'utiliser : 
Voici un script que j'ai tenté de mettre en place dans le DHCP client pour modifier la passerelle :

/ip dhcp-client
set [find interface="ether-4G"] add-default-route=no script="{\
    :local ipAddress [/ip dhcp-client get [find interface=\"2ether-4G\"] value-name=address];\
    :local gateway [:pick \$ipAddress 0 [:find \$ipAddress \"/\"]];\
    :local newGateway (\$gateway + 1);\
    :log info \"New Gateway calculated: \$newGateway\";\
    /ip route remove [find comment=\"auto-updated-4G-gateway\"];\
    /ip route add dst-address=0.0.0.0/0 gateway=\$newGateway comment=\"auto-updated-4G-gateway\";\
}"

Problèmes rencontrés :
  • La commande `:local ipAddress` ne semble pas récupérer l'adresse IP correctement, et le script ne parvient pas à modifier la passerelle comme prévu.
  • Je n'ai pas trouvé de moyen fiable de récupérer l'adresse IP et de la modifier dans le script de lease du DHCP.

Questions :
1. Comment puis-je récupérer correctement l'adresse IP du DHCP client dans RouterOS 7.15.3 pour que je puisse l'utiliser dans un script ?
2. Y a-t-il un moyen plus efficace de gérer cette situation via des scripts RouterOS ?
3. Toute suggestion pour corriger ou améliorer ce script afin qu'il fonctionne comme prévu ?

Merci d'avance pour votre aide et vos suggestions ! Toute contribution serait grandement appréciée.

Je vous remercie pour le temps consacré à la lecture de ce message et pour vos éventuels retours !

Cordialement,
« Modifié: 14 septembre 2024 à 04:04:19 par Tomate »

rooot

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 2 168
  • 🔵🔵🔵🔵⚪⚪⚪⚪🔴🔴🔴🔴
Problème Gateway incorrect sur DHCP-Client MikroTik modem 4G IP Passtrough
« Réponse #1 le: 13 septembre 2024 à 21:20:25 »
Peut-être essayer ceci :

/ip dhcp-client
set [find interface="ether-4G"] add-default-route=no script="{
    :local ipAddress [/ip dhcp-client get [find interface=\"ether-4G\"] value-name=address];
   
    # Vérification si l'adresse IP est bien récupérée
    :if ([:len \$ipAddress] = 0) do={
        :log warning \"No IP address assigned to ether-4G.\";
        :error \"DHCP Client Error\";
    }
   
    # Extraction de l'adresse IP sans le masque
    :local gateway [:pick \$ipAddress 0 [:find \$ipAddress \"/\"]];
   
    # Conversion de la partie de l'adresse en nombre entier pour ajouter 1
    :local gatewayParts [:toarray [:toip \$gateway]];
    :set gatewayParts ([:tostr [:pick \$gatewayParts 0]] . \".\" . [:tostr [:pick \$gatewayParts 1]] . \".\" . [:tostr [:pick \$gatewayParts 2]] . \".\" . ([:tonum [:pick \$gatewayParts 3]] + 1));
   
    # Log pour vérifier la nouvelle passerelle
    :log info \"New Gateway calculated: \$gatewayParts\";
   
    # Suppression de l'ancienne route si elle existe
    /ip route remove [find comment=\"auto-updated-4G-gateway\"];

    # Ajout de la nouvelle route
    /ip route add dst-address=0.0.0.0/0 gateway=\$gatewayParts comment=\"auto-updated-4G-gateway\";
}"


hsd

  • Abonné SFR fibre FttH
  • *
  • Messages: 42
  • PARIS 75
Problème Gateway incorrect sur DHCP-Client MikroTik modem 4G IP Passtrough
« Réponse #2 le: 13 septembre 2024 à 21:35:14 »
Bonjour,

Je ne vais peut-être pas répondre directement à ta question mais je peux te dire ce que j'ai fais pour ma config failover 4G en passthrough.

Sur mon routeur j'ai ether2 qui est connecté à l'ONT SFR et un vlan-lte qui récupère les flux du routeur 4G.

J'ajoute manuellement la route par défaut pour permettre de mettre un commentaire et changer son poids dynamiquement.

/ip route
add comment=routedefault disabled=no distance=1 dst-address=0.0.0.0/0 gateway=ether2 routing-table=main scope=\
    30 suppress-hw-offload=no target-scope=10

J'ai mis un poids de 10 sur la route via la 4G.

/ip dhcp-client
add default-route-distance=10 interface=vlan-lte use-peer-dns=no use-peer-ntp=no

J'ai ajouté deux routes pour ne permettre le ping vers 8.8.8.8 uniquement via la fibre (que je n'utilise pas comme DNS)

/ip route
add comment=routespe disabled=no distance=1 dst-address=8.8.8.8/32 gateway=\
    ether2 pref-src="" routing-table=main scope=30 suppress-hw-offload=no \
    target-scope=10
add blackhole disabled=no distance=2 dst-address=8.8.8.8/32 gateway="" \
    routing-table=main scope=30 suppress-hw-offload=no target-scope=10

ensuite je crée une règle Netwatch avec un ping toutes les 30 secondes avec les scripts suivants:
la seule ligne importante est "/ip route set [find comment="routedefault"] distance=1", le reste c'est pour envoyer un SMS via l'API.

on up :

#script test liason principale
:local number1 "+33xxxxxxxxxxx"
:local URL "raff-4g.xxxxxxxxxxx"
:local port "lte1"
:local date
:local time
:set date [/system clock get date]
:set time [/system clock get time]

:local MSG "$date $time Liaison FTTH UP!"


/ip route set [find comment="routedefault"] distance=1

/tool fetch http-method=post mode=https url="https://$URL/rest/tool/sms/send" output=user as-value \
user="user_api" password="Adste2540" http-header-field="Content-Type: application/json" \
http-data="{\"phone-number\":\"$number1\",\"port\":\"$port\",\"message\":\"$MSG\"}"

on down: ici on passe le poids de la route fibre à 100, soit supérieure à celle via la 4G qui est à 10.

#script test liason principale
:local number1 "+33xxxxxxxxxxx"
:local URL "raff-4g.xxxxxxxxxxx"
:local port "lte1"
:local date
:local time
:set date [/system clock get date]
:set time [/system clock get time]

:local MSG "$date $time Liaison FTTH DOWN!"

/ip route set [find comment="routedefault"] distance=100

/tool fetch http-method=post mode=https url="https://$URL/rest/tool/sms/send" output=user as-value \
user="user_api" password="Adste2540" http-header-field="Content-Type: application/json" \
http-data="{\"phone-number\":\"$number1\",\"port\":\"$port\",\"message\":\"$MSG\"}"

Tomate

  • Abonné SFR fibre FttH
  • *
  • Messages: 8
Problème Gateway incorrect sur DHCP-Client MikroTik modem 4G IP Passtrough
« Réponse #3 le: 14 septembre 2024 à 03:51:49 »
Cela pourrait m’être utile pour la seconde étape, mais pour l’instant, mon seul problème est que mon DHCP Client récupère une passerelle incorrecte, qui ne permet pas de ping internet.

Je me suis également aperçu que le masque de sous-réseau pouvait varier. Mon Mikrotik a parfois récupéré un /30, mais aussi un /25, et probablement d’autres.
Donc, mon idée d’incrémenter l’IP de 1 pour obtenir la passerelle correcte n’est pas fiable. Cela dit, si je fais un ping vers 8.8.8.8 en utilisant l’IP de broadcast (que je suppose être la passerelle et que j'obtiens directement en SSH sur le Zyxtel), fonctionne toujours.
En revanche, avec la passerelle obtenue par le Mikrotik, le ping échoue systématiquement.

Quoi qu’il en soit, merci pour tes indications, elles me seront probablement utiles à l’étape suivante !

Bonjour,

Je ne vais peut-être pas répondre directement à ta question mais je peux te dire ce que j'ai fais pour ma config failover 4G en passthrough.


Tomate

  • Abonné SFR fibre FttH
  • *
  • Messages: 8
Problème Gateway incorrect sur DHCP-Client MikroTik modem 4G IP Passtrough
« Réponse #4 le: 14 septembre 2024 à 04:04:02 »
J’ai testé le script de plusieurs façons, mais malheureusement, il ne fonctionne toujours pas. J’ai également remarqué que le masque de sous-réseau pouvait changer, ce qui rend la solution initiale consistant à incrémenter l’IP de +1 non viable et caduque.

Merci tout de même pour le script précédent, mais il échoue systématiquement, et je ne comprends toujours pas pourquoi.
De toute façon, le fait que le masque change rend ma première idée caduque. Cela dit, je me souviens qu’avec SFR, en cas de CG-NAT sur une box Fibre, il était possible de récupérer les bonnes IP grâce à un script spécifique, permettant ainsi au DHCP client d’obtenir les IP correctes.

Penses-tu qu’un script similaire, ou légèrement modifié, pourrait fonctionner dans ce cas ? Une idée ?

Pour info, voici un nouveau bail DHCP et le résultat d’un ifconfig sur le Zyxel :

ZySH> ifconfig
br0       Link encap:Ethernet  HWaddr D4:1A:D1:CE:A4:04
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          inet6 addr: fe80::d61a:d1ff:fece:a404/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:11 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3608 (3.5 KiB)  TX bytes:408 (408.0 B)

eth2      Link encap:Ethernet  HWaddr D4:1A:D1:CE:A4:04
          inet6 addr: fe80::d61a:d1ff:fece:a404/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2980 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6640 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:277637 (271.1 KiB)  TX bytes:8377193 (7.9 MiB)
          Interrupt:3

eth2.1    Link encap:Ethernet  HWaddr D4:1A:D1:CE:A4:04
          inet addr:100.96.195.146  Bcast:100.96.195.147  Mask:255.255.255.252
          inet6 addr: fe80::d61a:d1ff:fece:a404/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2759 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6393 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:207755 (202.8 KiB)  TX bytes:8326077 (7.9 MiB)

eth2.2    Link encap:Ethernet  HWaddr D4:1A:D1:CE:A4:04
          inet6 addr: fe80::d61a:d1ff:fece:a404/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:4788 (4.6 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:18 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1437 (1.4 KiB)  TX bytes:1437 (1.4 KiB)

usb0      Link encap:Ethernet  HWaddr BE:2A:3E:52:17:9D
          inet6 addr: fe80::bc2a:3eff:fe52:179d/64 Scope:Link
          UP BROADCAST RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:232 errors:0 dropped:2 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:16491 (16.1 KiB)

wwan0     Link encap:Ethernet  HWaddr BE:2A:3E:52:17:9D
          inet6 addr: fe80::bc2a:3eff:fe52:179d/64 Scope:Link
          UP BROADCAST RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:223 errors:0 dropped:0 overruns:0 frame:0
          TX packets:232 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:20824 (20.3 KiB)  TX bytes:16491 (16.1 KiB)

ZySH>

Peut-être essayer ceci :

/ip dhcp-client
set [find interface="ether-4G"] add-default-route=no script="{
    :local ipAddress [/ip dhcp-client get [find interface=\"ether-4G\"] value-name=address];
   
    # Vérification si l'adresse IP est bien récupérée
    :if ([:len \$ipAddress] = 0) do={
        :log warning \"No IP address assigned to ether-4G.\";
        :error \"DHCP Client Error\";
    }
   
    # Extraction de l'adresse IP sans le masque
    :local gateway [:pick \$ipAddress 0 [:find \$ipAddress \"/\"]];
   
    # Conversion de la partie de l'adresse en nombre entier pour ajouter 1
    :local gatewayParts [:toarray [:toip \$gateway]];
    :set gatewayParts ([:tostr [:pick \$gatewayParts 0]] . \".\" . [:tostr [:pick \$gatewayParts 1]] . \".\" . [:tostr [:pick \$gatewayParts 2]] . \".\" . ([:tonum [:pick \$gatewayParts 3]] + 1));
   
    # Log pour vérifier la nouvelle passerelle
    :log info \"New Gateway calculated: \$gatewayParts\";
   
    # Suppression de l'ancienne route si elle existe
    /ip route remove [find comment=\"auto-updated-4G-gateway\"];

    # Ajout de la nouvelle route
    /ip route add dst-address=0.0.0.0/0 gateway=\$gatewayParts comment=\"auto-updated-4G-gateway\";
}"



Tomate

  • Abonné SFR fibre FttH
  • *
  • Messages: 8
Problème Gateway incorrect sur DHCP-Client MikroTik modem 4G IP Passtrough
« Réponse #5 le: 14 septembre 2024 à 04:22:06 »
Après un reboot du Zyxel le masque change ...

artemus24

  • Abonné SFR fibre FttH
  • *
  • Messages: 1 248
  • Montignac Lascaux (24)
Problème Gateway incorrect sur DHCP-Client MikroTik modem 4G IP Passtrough
« Réponse #6 le: 14 septembre 2024 à 13:28:46 »
Je n'avais pas vu, hier, que tu avais créé un nouveau sujet sur ton problème de passerelle.
N'oublies pas que nous ne sommes pas censé connaitre le montage que tu fais, ni la bidouille que tu as déjà entreprise depuis le début.
Ce n'est pas parce que ceux qui ont un Mikrotik comme toi le font d'une certaine façon, qu'il fait reprendre à l'identique leur bidouille.
Il faut toujours vérifier plusieurs fois ce que l'on fait et comprendre pourquoi on le fait.

Citation de: Tomate
Je me suis également aperçu que le masque de sous-réseau pouvait varier. Mon Mikrotik a parfois récupéré un /30, mais aussi un /25, et probablement d’autres.
Dans l'autre sujet, tu m'avais pourtant affirmé que tu étais certain du masque.
Il faudrait comprendre pourquoi il change continuellement.
Et surtout, pourquoi veux tu l'incrémenter de +1 ?

Vu que c'est de la 4G, il est possible que l'attribution d'une nouvelle adresse soit différente à chaque fois que tu rebootes ton Zyxel. Ca ne me choque ppas.

Citation de: Tomate
Détails du problème :
  • Adresse IP reçue (via DHCP sur MikroTik) : 100.108.81.210/30
  • Passerelle reçue (via DHCP) : 100.108.81.209 (incorrecte)
  • Passerelle correcte (vérifiée sur le Zyxtel) : 100.108.81.211
Admettons que le masque soit correcte : "/30". Tu te retrouves avec seulement quatre adresses possibles.
--> adresse 100.108.81.211 en binaire : 0110 0100 0110 1100 0101 0001 1101 0011
En rouge, le masque, c'est-à-dire ce qui ne bouge pas dans ton adresse.
Cette adresse est incorrecte car la partie variable n'est pas à zéro.
Selon moi, et selon le masque "/30", la bonne plage d'adresse pour effectuer l'affectation définitive serait :
--> adresse 100.108.81.208 en binaire : 0110 0100 0110 1100 0101 0001 1101 0000
Sur cette exemple, je vois un problème.

Si mon raisonnement est bon, je pense que n'importe quelle adresse pris parmi les quatre devrait fonctionner (de 208 jusqu'à 211).

Si la bonne adresse est 100.108.81.211, le masque doit être "/32". Il n'y a rien à incrémenter, tu la récupères telle qu'elle.
Même raisonnement sur 100.96.195.146/30, ainsi que sur 100.114.185.52/29.

Le raisonnement est peut-être différent car je ne suis pas dans le contexte d'un bridge, mais dans celui d'un routeur où je récupère une seul adresse WAN dite publique avec un masque à "/32".

Essayes manuellement de fixer tes adresses dans ton Mikrotik, à partir de ceux fournies par le Zyxel.
Fais des essaies en changeant les adresses dans la plages indiquées par le masque.
Tu verras bien si ça passe ou pas. C'est pour comprendre le comportement du Mikrotik.
tu peux faire de même aussi avec ton Zyxel.

Kana-chan

  • Abonné Orange Fibre
  • *
  • Messages: 679
  • Antibes (06)
Problème Gateway incorrect sur DHCP-Client MikroTik modem 4G IP Passtrough
« Réponse #7 le: 14 septembre 2024 à 14:01:57 »
Ce n'est pas le masque qu'il veut incrémenter, mais l'IP pour avoir une nouvelle passerelle, car elle est fausse.

artemus24

  • Abonné SFR fibre FttH
  • *
  • Messages: 1 248
  • Montignac Lascaux (24)
Problème Gateway incorrect sur DHCP-Client MikroTik modem 4G IP Passtrough
« Réponse #8 le: 14 septembre 2024 à 14:11:04 »
Merci Kana-Chan mais j'avais bien compris qu'il veut incrémenter l'adresse IP Wan venant de son Zyxel.
Mais ce n'est peut-être pas la chose à faire.