Auteur Sujet: [Mikrotik] Script pour vérifier connectivité  (Lu 886 fois)

0 Membres et 1 Invité sur ce sujet

fttmeh

  • Abonné Bbox fibre
  • *
  • Messages: 314
  • Colombes (92)
[Mikrotik] Script pour vérifier connectivité
« le: 15 novembre 2024 à 12:38:55 »
Bonjour,

Ayant recemment migré vers une BBox avec débit+, j'ai modifié mon script pour vérifier la connectivité du router.

Pour vérifier la connection IPv4, il ping le DNS primaire. Le gateway primaire souvent ne repond pas aux pings. Pour vérifier la connection IPv6, le script ping le gw qui d'après mes tests répond bien.

Script test :
# WAN interface
:local waniface "vlan-wan-bouygues"

# Ping test parameters
:local pingcount 3
:local pinginterval "3s"

# Internal state variables - do not modify
:local defgw4
:local defgw6
:local dnssrv4

:local pingresult4 0
:local pingresult6 0

:local noconn4 0
:local noconn6 0
:local testv4 0
:local testv6 0
:local dorestarts 0

# Check if there are DHCP clients enabled on the WAN interface, and if so test respective connections
:if ([/ip dhcp-client get $waniface disabled ] = false ) do { :set testv4 1 }
:if ([/ipv6 dhcp-client get $waniface disabled ] = false ) do { :set testv6 1 }

# (DHCPv4) Get DNS server provided by ISP. If not available, restart DHCP clients.
:do { :set dnssrv4 [/ip dhcp-client get number=[find interface=$waniface ] value-name=primary-dns ] } on-error={ :set noconn4 1 }
:if ([:len $dnssrv4 ] < 7) do { :set noconn4 1 }
:if (($testv4 = 1) and (noconn4 = 1)) do={ :log error "WAN CONNECTIVITY CHECK (IPv4): No DNS server detected. Restarting DHCP clients." ; :set dorestarts 1 }

# (DHCPv6) Check if IPv6 gateway is available, if not, restart DHCP clients
:do { :set defgw6 [/ipv6 route get number=[find dst-address="::/0" and vrf-interface=$waniface  ] value-name=gateway ] } on-error={ :set noconn6 1 }
:if ([:len $defgw6 ] <= [:len $waniface]) do { :set noconn6 1 }
:if (($testv6 = 1) and (noconn6 = 1)) do { :log error "WAN CONNECTIVITY CHECK (IPv6): No gateway detected. Restarting DHCP clients." ; set dorestarts 1 }

# (DHCP v4&6) If gateway found, ping to check if reachable
:if ($dorestarts = 0) do {
:if (($testv4 = 1) and ($noconn4 = 0)) do={ :set pingresult4 [ :ping address=$dnssrv4 count=$pingcount interval=$pinginterval interface=$waniface ] }
:if (($testv6 = 1) and ($noconn6 = 0)) do={ :set pingresult6 [ :ping address=$defgw6 count=$pingcount interval=$pinginterval interface=$waniface ] }
}

# If no successful ping, restart DHCP clients.
:if ( ($dorestarts = 0) and ($pingresult4 = 0) and ($testv4 = 1) ) do={
:log error "WAN CONNECTIVITY CHECK (IPv4): Ping to primary ISP DNS server failed. Restarting DHCP clients."
:set dorestarts 1
}

:if ( ($dorestarts = 0) and ($pingresult6 = 0) and ($testv6 = 1) ) do={
:log error "WAN CONNECTIVITY CHECK (IPv6): Ping to default gateway failed. Restarting DHCP clients."
:set dorestarts 1
}

:if ( $dorestarts = 1 ) do={
:system/script/run wanRestartDHCPv4client
:delay delay-time=0.5s
:system/script/run wanRestartDHCPv6client
}

Script wanRestartDHCPv4client

:local waniface "vlan-wan-bouygues"

/ip dhcp-client release [find interface=$waniface ]
/ip dhcp-client disable [find interface=$waniface ]
/delay delay-time=2s
/ip dhcp-client enable [find interface=$waniface ]

Script wanRestartDHCPv6client
:local waniface "vlan-wan-bnet"

/ipv6 dhcp-client release [find interface=$waniface ]
/ipv6 dhcp-client disable [find interface=$waniface ]
/delay delay-time=2s
/ipv6 dhcp-client enable [find interface=$waniface ]


fttmeh

  • Abonné Bbox fibre
  • *
  • Messages: 314
  • Colombes (92)
[Mikrotik] Script pour vérifier connectivité
« Réponse #1 le: 15 novembre 2024 à 15:44:05 »
J'ai simplifié le script en utilisant /tool/netwatch. Il faut au moins la version ROS 7.15

Script netwatch qui fait une requête DNS au serveur primaire DNS de Bouygues :
/tool netwatch add comment="External DNS check (net connectivity) - DoNotRemove" disabled=no dns-server=194.158.122.10 down-script="/system script run wanRestartDHCPv4client\r\
    \n/delay delay-time=0.5s\r\
    \n/system script run wanRestartDHCPv6client" host=www.bouyguestelecom.fr http-codes="" interval=10m name=ISP_DNS_check_IPv4 start-delay=30s startup-delay=10m test-script="" timeout=1s type=dns up-script=""
/user aaa set accounting=no


Script qui met à jour le helper netwatch avec la bonne adresse IP du serveur DNS :

/ip dhcp-client add comment="Bouygues (IPv4)" dhcp-options=hostname,clientid,vendorid_bbox interface=vlan-wan-bnet script=":if (\$bound=1) do={\r\
    \n\t# Update DDNS record\r\
    \n\t/ip/cloud/force-update\r\
    \n\r\
    \n\t# Use primary ISP DNS server to netwatch script\r\
    \n\t:local dnssrv4\r\
    \n\t:set dnssrv4 [/ip dhcp-client get number=[find interface=\$interface ] value-name=primary-dns ]\r\
    \n\t:if ([:len \$dnssrv4 ] < 7) do { :set dnssrv4 1.1.1.1 }\r\
    \n\t/tool/netwatch/set dns-server=\$dnssrv4 [ find host=www.bouyguestelecom.fr ]\r\
    \n}\t" use-peer-dns=no use-peer-ntp=no