„MikroTik dinamikus WAN interfészek kezelése” változatai közötti eltérés
| 7. sor: | 7. sor: | ||
==IP váltás észlelése== | ==IP váltás észlelése== | ||
A | 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 | :global WanIP | ||
:local | :local intName "WAN" | ||
if ( $ | :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 | :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 | :global WanIP | ||
:local | :local intName "WAN" | ||
:local | :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 ] ] | |||
:set | if ( $WanIP != $ttempIP ) do={ | ||
:set WanIP $tempIP | |||
# DNS rekord frissítése | # DNS rekord frissítése | ||
/tool dns-update dns-server= | /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 | 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 | :global WanIP | ||
:local | :local intName "WAN" | ||
:local | :local listName "WAN" | ||
if ( $ | :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= | /ip firewall address-list remove [find list=$listName address=$WanIP] | ||
:set | :set WanIP $tempIP | ||
# új IP felvétel | # új IP felvétel | ||
/ip firewall address-list add list= | /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 | :global WanIP | ||
:local intName "WAN" | :local intName "WAN" | ||
:local scriptName "chkIP" | :local scriptName "chkIP" | ||
:local | :local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ] | ||
:local | :local tempIP [:pick $tempIP 0 [:find $tempIP "/" -1 ] ] | ||
:local | :local leaseIP [ /ip dhcp-client get value-name=expires-after [find interface=$intName] ] | ||
if ( [:len [/system scheduler find name= | if ( [:len [/system scheduler find name=$scriptName]]=0) do={ | ||
/system scheduler add name=$scriptName interval=$ | /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 | :local schInt [ /system scheduler get $scriptName value-name=interval ] | ||
if ( | if ( $leaseIP!=$schInt) do={ | ||
/system scheduler set $scriptName interval=$ | /system scheduler set $scriptName interval=$leaseIP start-time=[/system clock get time] start-date=[/system clock get date] | ||
} | } | ||
if ( $ | if ( $WanIP != $tempIP ) do={ | ||
# teendők a régi IP -vel | # teendők a régi IP -vel | ||
:set | :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
}