„MikroTik dinamikus WAN interfészek kezelése” változatai közötti eltérés

Innen: IT documentation
7. sor: 7. sor:


==IP váltás észlelése==
==IP váltás észlelése==
A WANIP golbális változóba helyezzük az aktuális címet és figyeljük, hogy változik e a WAN interface IP címe:<syntaxhighlight lang="bash">
A $WanIP golbális változóba helyezzük az aktuális címet és figyeljük, hogy változik e az $intName változóban megadott interface IP címe.<syntaxhighlight lang="bash">
:global WANIP
:global WanIP
:local tempip [ /ip address get [ /ip address find interface="WAN" ] address ]
:local intName "WAN"
:local tempip [:pick $tempip 0 [:find $tempip  "/" -1 ] ]


if ( $WANIP != $tempip ) do={
:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]
 
if ( $WanIP != $tempIP ) do={


     # teendők a régi IP -vel
     # teendők a régi IP -vel
     :set WANIP $tempip
     :set WanIP $tempIP
     # teendők az új IP -vel
     # teendők az új IP -vel


35. sor: 37. sor:
     status: updated
     status: updated
</syntaxhighlight>A következő módszer inkább egyéb szolgáltatások rekordfrissítéséhez használható.A rekord frissítéshez szükség van egy kulcsra (authorization key / Transfer Signature key), amelyet a DNS szerver üzemeltetőjétől szerezhetünk be. A kulcs birtokában egy egyszerű paranccsal frissíthetjük a rekordot:<syntaxhighlight lang="bash">
</syntaxhighlight>A következő módszer inkább egyéb szolgáltatások rekordfrissítéséhez használható.A rekord frissítéshez szükség van egy kulcsra (authorization key / Transfer Signature key), amelyet a DNS szerver üzemeltetőjétől szerezhetünk be. A kulcs birtokában egy egyszerű paranccsal frissíthetjük a rekordot:<syntaxhighlight lang="bash">
:global WANIP
:global WanIP
:local tempip [ /ip address get [ /ip address find interface="WAN" ] address ]
:local intName "WAN"
:local tempip [:pick $tempip 0 [:find $tempip  "/" -1 ] ]
:local DNSserver "<domain vagy IP>"
:local DNSrecord "<rekord neve, pl: mail>"
:local DNSdomain "<zóna neve, pl: domain.hu>"
:local DNSttl 3600
:local DNSkeyname "<kulcs neve>"
:local DNSkey "<kulcs érték>"


if ( $WANIP != $tempip ) do={
:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]


     :set WANIP $tempip
if ( $WanIP != $ttempIP ) do={
 
     :set WanIP $tempIP
     # DNS rekord frissítése
     # DNS rekord frissítése
     /tool dns-update dns-server=<domain vagy IP> name=<rekord neve, pl: mail> zone=<zóna neve, pl: domain.hu> address=$WANIP ttl=3600 key-name=<kulcs neve> key="<kulcs érték>"
     /tool dns-update dns-server=$DNSserver name=$DNSrecord zone=$DNSdomain address=$WanIP ttl=$DNSttl key-name=$DNSkeyname key=$DNSkey


}
}
49. sor: 59. sor:


==Address list frissítése==
==Address list frissítése==
Ha a WAN IP-vel dolgozni szeretnénk, pl. tűzfal szabályban, akkor egy "address list" -en kell tárolni és frissíteni a dinamikus címet. A következő változat ezt oldja meg:<syntaxhighlight lang="bash">
Ha a WAN IP-vel dolgozni szeretnénk, pl. tűzfal szabályban, akkor egy "address list" -en kell tárolni és frissíteni a dinamikus címet. A következő változat ezt oldja meg.<syntaxhighlight lang="bash">
:global WANIP
:global WanIP
:local tempip [ /ip address get [ /ip address find interface="WAN" ] address ]
:local intName "WAN"
:local tempip [:pick $tempip 0 [:find $tempip  "/" -1 ] ]
:local listName "WAN"


if ( $WANIP != $tempip ) do={
:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]
 
if ( $WanIP != $tempIP ) do={
      
      
     # régi IP levétel
     # régi IP levétel
     /ip firewall address-list remove [find list="WAN" address=$WANIP]
     /ip firewall address-list remove [find list=$listName address=$WanIP]
     :set WANIP $tempip
     :set WanIP $tempIP
     # új IP felvétel
     # új IP felvétel
     /ip firewall address-list add list=WAN address=$WANIP
     /ip firewall address-list add list=$listName address=$WanIP


}
}
</syntaxhighlight>
</syntaxhighlight>


== Időzítés ==
==Időzítés==
Megtehetjük, hogy ciklikusan időzítjük a scriptet, pl óránként, így beállítva a frissítési gyakoriságot. Ez estben lehet szolgáltatás kiesés, példánkban maximum 1 óra. Ha szeretnénk pontosan időzíteni, figyelni kell a dinamikus IP cím lejárati idejét, és erre az időpontra időzíteni a következő ellenőrzést.
Megtehetjük, hogy ciklikusan időzítjük a scriptet, pl óránként, így beállítva a frissítési gyakoriságot. Ez estben lehet szolgáltatás kiesés, példánkban maximum 1 óra. Ha szeretnénk pontosan időzíteni, figyelni kell a dinamikus IP cím lejárati idejét, és erre az időpontra időzíteni a következő ellenőrzést.


A példában feltételezzük, hogy a scriptnek "chkIP" a neve, és ugyanezen néveh hozza létre az időzítést.<syntaxhighlight lang="bash">
A példában feltételezzük, hogy a scriptnek "chkIP" a neve, és ugyanezen néveh hozza létre az időzítést.<syntaxhighlight lang="bash">
:global WANIP
:global WanIP
:local intName "WAN"
:local intName "WAN"
:local scriptName "chkIP"
:local scriptName "chkIP"


:local tempip [ /ip address get [ /ip address find interface=$intName ] address ]
:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempip [:pick $tempip 0 [:find $tempip  "/" -1 ] ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]


:local expr [ /ip dhcp-client get value-name=expires-after [find interface=$intName] ]
:local leaseIP [ /ip dhcp-client get value-name=expires-after [find interface=$intName] ]
if ( [:len [/system scheduler find  name="test"]] =0) do={
if ( [:len [/system scheduler find  name=$scriptName]]=0) do={
     /system scheduler add name=$scriptName interval=$expr start-time=[/system clock get time] start-date=[/system clock get date] policy=read,sniff,policy,test on-event="/system script run $scriptName"  
     /system scheduler add name=$scriptName interval=$leaseIP start-time=[/system clock get time] start-date=[/system clock get date] policy=read,sniff,policy,test on-event="/system script run $scriptName"  
}
}
:local expr2 [ /system scheduler get $scriptName value-name=interval ]
:local schInt [ /system scheduler get $scriptName value-name=interval ]
if ( expr!=exp2) do={
if ( $leaseIP!=$schInt) do={
     /system scheduler set $scriptName interval=$expr start-time=[/system clock get time] start-date=[/system clock get date]  
     /system scheduler set $scriptName interval=$leaseIP start-time=[/system clock get time] start-date=[/system clock get date]  
}
}


if ( $WANIP != $tempip ) do={
if ( $WanIP != $tempIP ) do={


     # teendők a régi IP -vel
     # teendők a régi IP -vel
     :set WANIP $tempip
     :set WanIP $tempIP
     # teendők az új IP -vel
     # teendők az új IP -vel


}
}
</syntaxhighlight><br />
</syntaxhighlight><br />

A lap 2020. január 6., 09:16-kori változata

Összefoglalás

A leírás MikroTik RouterOS 6.44.6 verzión készült.

Előfordulhat, hogy az interfész(ek)en dinamikus IP cím van (és nem is lehet más), de mégis szolgáltatás kell, hogy fusson rajtuk. Amikor a cím(ek) változnak, szükség van az információ automatikus frissítésére egyéb rendszerekben (például DNS rekordok vagy Address list-ek).

A következő Mikortik RouterOS script ebben az esetben lehet hasznos.

IP váltás észlelése

A $WanIP golbális változóba helyezzük az aktuális címet és figyeljük, hogy változik e az $intName változóban megadott interface IP címe.

:global WanIP
:local intName "WAN"

:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]

if ( $WanIP != $tempIP ) do={

    # teendők a régi IP -vel
    :set WanIP $tempIP
    # teendők az új IP -vel

}

DNS rekord frissítése

Lehetőség van egy DNS szerveren egy domain egy vagy több "A" rekordjának frissítésére.

Ha távoli eléréshez használnánk ezt a rekordot, akkor sokkal egyszerűbb a Mikrotik DDNS-ét használni:

/ip cloud set ddns-enabled=yes
/ip cloud print
    ddns-enabled: yes
    ddns-update-interval: none
    update-time: yes
    public-address: x.x.x.x
    public-address-ipv6: X:X:X::X
    dns-name: XXX.sn.mynetname.net
    status: updated

A következő módszer inkább egyéb szolgáltatások rekordfrissítéséhez használható.A rekord frissítéshez szükség van egy kulcsra (authorization key / Transfer Signature key), amelyet a DNS szerver üzemeltetőjétől szerezhetünk be. A kulcs birtokában egy egyszerű paranccsal frissíthetjük a rekordot:

:global WanIP
:local intName "WAN"
:local DNSserver "<domain vagy IP>"
:local DNSrecord "<rekord neve, pl: mail>"
:local DNSdomain "<zóna neve, pl: domain.hu>"
:local DNSttl 3600
:local DNSkeyname "<kulcs neve>"
:local DNSkey "<kulcs érték>"

:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]

if ( $WanIP != $ttempIP ) do={

    :set WanIP $tempIP
    # DNS rekord frissítése
    /tool dns-update dns-server=$DNSserver name=$DNSrecord zone=$DNSdomain address=$WanIP ttl=$DNSttl key-name=$DNSkeyname key=$DNSkey

}

Address list frissítése

Ha a WAN IP-vel dolgozni szeretnénk, pl. tűzfal szabályban, akkor egy "address list" -en kell tárolni és frissíteni a dinamikus címet. A következő változat ezt oldja meg.

:global WanIP
:local intName "WAN"
:local listName "WAN"

:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]

if ( $WanIP != $tempIP ) do={
    
    # régi IP levétel
    /ip firewall address-list remove [find list=$listName address=$WanIP]
    :set WanIP $tempIP
    # új IP felvétel
    /ip firewall address-list add list=$listName address=$WanIP 

}

Időzítés

Megtehetjük, hogy ciklikusan időzítjük a scriptet, pl óránként, így beállítva a frissítési gyakoriságot. Ez estben lehet szolgáltatás kiesés, példánkban maximum 1 óra. Ha szeretnénk pontosan időzíteni, figyelni kell a dinamikus IP cím lejárati idejét, és erre az időpontra időzíteni a következő ellenőrzést.

A példában feltételezzük, hogy a scriptnek "chkIP" a neve, és ugyanezen néveh hozza létre az időzítést.

:global WanIP
:local intName "WAN"
:local scriptName "chkIP"

:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]

:local leaseIP [ /ip dhcp-client get value-name=expires-after [find interface=$intName]  ]
if ( [:len [/system scheduler find  name=$scriptName]]=0) do={
    /system scheduler add name=$scriptName interval=$leaseIP start-time=[/system clock get time] start-date=[/system clock get date] policy=read,sniff,policy,test on-event="/system script run $scriptName" 
}
:local schInt  [ /system scheduler get $scriptName value-name=interval ]
if ( $leaseIP!=$schInt) do={
    /system scheduler set $scriptName interval=$leaseIP start-time=[/system clock get time] start-date=[/system clock get date] 
}

if ( $WanIP != $tempIP ) do={

    # teendők a régi IP -vel
    :set WanIP $tempIP
    # teendők az új IP -vel

}