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

Innen: IT documentation
a (Moszat átnevezte a(z) MikroTik dinamikus címek kezelése lapot MikroTik dinamikus WAN interfészek kezelése lapra átirányítás nélkül)
2. sor: 2. sor:


==Összefoglalás==
==Összefoglalás==
A leírás MikroTik RouterOS 6.44.6 verzión készült.
A leírás MikroTik RouterOS 6.48.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).
Előfordulhat, hogy az WAN 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ő Mikrotik RouterOS script ebben az esetben lehet hasznos.
A következő Mikrotik RouterOS script ez esetben lehet hasznos.


==IP váltás észlelése==
== Funkciók ==
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
:local intName "WAN"


if ([:len [ /ip address find interface=$intName dynamic ]] = 0) do={
===Időzítés===
    :log error message="Nincs dinamikus IP cim az $intName interfeszen!"
A script első futtatásakor automatikusan létrehozza az időzített futtatást a MikroTik RouterOS-ben. A '''$scriptName''' paraméterben a script nevét kell megadni (amely néven elmentettük), A '''$defaultInterval''' paraméterben pedig a futtatás gyakoriságát lehet megadni.
    :error message="Nincs dinamikus IP cim az $intName interfeszen!"
}
:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]


if ( $WanIP != $tempIP ) do={
=== Értesítés ===
A script képes értesítés küldeni syslog és email -en keresztül. A '''$logFacility''' paraméterben a log szintjét állíthatjuk, a '''$emailFacility''' paraméterben pedig az email értesítések szintjét. Az email küldés paramétereit az '''$Email,,,''' paraméter csoportban állíthatjuk be,


    # teendők a régi IP -vel
=== Online ellenőrzés ===
    :set WanIP $tempIP
Tipikusan több WAN interfész esetében szükséges ellenőrizni, hogy az interfész valóban képes e összeköttetést biztosítani az internettel. Ezt pusztán L2 vagy L3 szinten nem elég ellenőrizni, hiszen működő link és helyes IP beállítások mellett is elképzelhető, jellemzően szolgáltató hiba esetén, hogy valójában nincs internetkapcsolat.
    :log info message="IP valtozas az $intName interfeszen! Uj IP: $WanIP"
    # teendők az új IP -vel


}
A legmegfelelőbb teszt az internet kapcsolat ellenőrzésére, hogy megnézzük, elérünk e az adott interfészen keresztül, egy adott, biztosan elérhető hostot.
</syntaxhighlight>


==DNS rekord frissítése==
A script az ellenőrzést ping-el hajtja végre. Feltételezük, hogy a route fel van készítve a WAN interfészek kiesésére, ezért ezt most nem tárgyaljuk. A script csak az ellenőrzést, értesítést és a kapcsolódó szolgáltatások konfigurálását végzi.
 
A script policy-based route-okat hoz létre interfészenként WAN0, WAN1 ... WANX néven, amit majd az ellenőrzéskor használ. A $pingSites paraméterben megadott host-okkal ellenőriz. Ha az első host nem elérhető, csak akkor ellenőrzi a másodikat, ha az sem, akkor a harmadikat, stb. Ha az összes host elérhetetlen az interfészen keresztül, akkor minősíti offline-nak az interfészt.
 
=== Address list frissítése ===
Ha a WAN IP-vel dolgozni szeretnénk, pl. tűzfal szabályban, akkor egy "address list"-ben lehet tárolni és frissíteni a dinamikus címet.  Az '''$Int->$addresslist''' paraméter adja meg az address list nevét, melyben tárolni szerenénk az interfész címét. Dinamikus address list-et hoz létre a '''$defaultInterval''' paraméterben megdott lease time-al. Interfézenként megdható több address list, és minden interfészhez ugyanaz az address list is.
===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.
Lehetőség van egy DNS szerveren egy domain egy vagy több "A" rekordjának frissítésére.


43. sor: 40. sor:
     dns-name: XXX.sn.mynetname.net
     dns-name: XXX.sn.mynetname.net
     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:
:global WanIP
===Dinamikus IPsec peer===
:local intName "WAN"
Az IPsec protokoll két IP cím között hoz létre titkosítást. Eszközök és protokollok képesek dinamikus című IPsec kliensek kezelésére (pl.: L2TP esetén a Mikrotik is), de natívan, illetve tunnel protokollokkal együtt a Mikrotik nem. A következő példában egy GRE/IPsec tunnel-t tesszük dinamikussá.
: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 ([:len [ /ip address find interface=$intName dynamic ]] = 0) do={
    :log error message="Nincs dinamikus IP cim az $intName interfeszen!"
    :error message="Nincs dinamikus IP cim az $intName interfeszen!"
}
: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
    :log info message="IP valtozas az $intName interfeszen! Uj IP: $WanIP"
    # DNS rekord frissítése
    /tool dns-update dns-server=$DNSserver name=$DNSrecord zone=$DNSdomain address=$WanIP ttl=$DNSttl key-name=$DNSkeyname key=$DNSkey
 
}
</syntaxhighlight>
 
==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">
:global WanIP
:local intName "WAN"
:local listName "WAN"
 
if ([:len [ /ip address find interface=$intName dynamic ]] = 0) do={
    :log error message="Nincs dinamikus IP cim az $intName interfeszen!"
    :error message="Nincs dinamikus IP cim az $intName interfeszen!"
}
: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
    :log info message="IP valtozas az $intName interfeszen! Uj IP: $WanIP"
    # új IP felvétel
    /ip firewall address-list add list=$listName address=$WanIP


}




A két MikroTik eszköz között hozzuk létre a statikus tunnelt:


</syntaxhighlight>
A beállítás létrehozza az IPsec beállításokat is alap MikroTik beállításokkal.  
 
==Dinamikus IPsec peer==
Az IPsec protokoll két IP cím között hoz létre titkosítást. Eszközök és protokollok képesek dinamikus című IPsec kliensek kezelésére (pl.: L2TP esetén a Mikrotik is), de natívan, illetve tunnel protokollokkal együtt a Mikrotik nem. A következő példában egy GRE/IPsec tunnel-t tesszük dinamikussá.
 
A két MikroTik eszköz között hozzuk létre a statikus tunnelt:<syntaxhighlight lang="bash">
/interface gre add name=tunnel local-address=192.168.1.1 remote-address=192.168.2.2 ipsec-secret=HelloNSA allow-fast-path=no
</syntaxhighlight><syntaxhighlight lang="bash">
/interface gre add name=tunnel local-address=192.168.2.2 remote-address=192.168.1.1 ipsec-secret=HelloNSA allow-fast-path=no
</syntaxhighlight>A beállítás létrehozza az IPsec beállításokat is alap MikroTik beállításokkal.  


IP váltáskor a megszokott módon kicseréljük az IP címeket a tunnelben, ami módosítani fogja az IPsec beállításokat is. Viszont a másik MikroTik eszközön is meg kell változtani a beállításokat, hogy az IPsec tunnel felépüljön. Ehhez a már említett MikroTik DDNS-t használjuk. Engedélyezzük ezt mindkét eszközön a fent látható módon. A MikroTik DDNS-e egy perces TTL-el dolgozik. Tehát maximum ennyi szolgáltatás kiesés lehetséges.  
IP váltáskor a megszokott módon kicseréljük az IP címeket a tunnelben, ami módosítani fogja az IPsec beállításokat is. Viszont a másik MikroTik eszközön is meg kell változtani a beállításokat, hogy az IPsec tunnel felépüljön. Ehhez a már említett MikroTik DDNS-t használjuk. Engedélyezzük ezt mindkét eszközön a fent látható módon. A MikroTik DDNS-e egy perces TTL-el dolgozik. Tehát maximum ennyi szolgáltatás kiesés lehetséges.  


A következő scriptet mindkét eszközön egy perces időközönlént futtatva dinamikus lesz a GRE/IPsec csatorna. Értelem szerűen a $temprIP változónál az ellenkező MikroTik DDNS-ét kell megadni.<syntaxhighlight lang="bash">
:global WanIP
:global remoteIP
:local intName "WAN"
:local localTun "tunnel"
:local temprIP [:resolve XXX.sn.mynetname.net]


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


if ( $WanIP != $tempIP || $remoteIP != $temprIP ) do={
A következő scriptet mindkét eszközön egy perces időközönlént futtatva dinamikus lesz a GRE/IPsec csatorna. Értelem szerűen a $temprIP változónál az ellenkező MikroTik DDNS-ét kell megadni.
   
    /interface set $localTun disabled=yes
   
    :set WanIP $tempIP
    :set remoteIP $temprIP
    :log info message="IP valtozas az $localTun interfeszen! local: $WanIP remote:$remoteIP"
   
    /interface gre set $localTun local-address=$WanIP remote-address=$remoteIP
    /interface set $localTun disabled=no


}
Ha csak az egyik eszköz rendelkezik dinamikus címmel, a következő scipteket kell futtatni.
 
 
 
</syntaxhighlight>Ha csak az egyik eszköz rendelkezik dinamikus címmel, a következő scipteket kell futtatni.


A dinamikus címen:
A dinamikus címen:
<syntaxhighlight lang="bash">
:global WanIP
:local intName "WAN"
:local localTun "tunnel"
:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]
if ( $WanIP != $tempIP ) do={
   
    /interface set $localTun disabled=yes
   
    :set WanIP $tempIP
    :log info message="IP valtozas az $localTun interfeszen! local: $WanIP"
   
    /interface gre set $localTun local-address=$WanIP
    /interface set $localTun disabled=no
}
</syntaxhighlight>A statikus címen:<syntaxhighlight lang="bash">
:global remoteIP
:local localTun "tunnel"
:local temprIP [:resolve XXX.sn.mynetname.net]
if ( $remoteIP != $temprIP ) do={
   
    /interface set $localTun disabled=yes
   
    :set remoteIP $temprIP
    :log info message="IP valtozas az $localTun interfeszen! remote:$remoteIP"
   
    /interface gre set $localTun remote-address=$remoteIP
    /interface set $localTun disabled=no
}
</syntaxhighlight>
==Időzítés==
A példában feltételezzük, hogy a scriptnek "chkIP" a neve, és ugyanezen néven hozzuk létre az időzítést.
Megtehetjük, hogy ciklikusan időzítjük a scriptet, pl percenként, így beállítva a frissítési gyakoriságot. <syntaxhighlight lang="bash">
/system scheduler add name=chkIP interval=00:01:00 policy=read,write,policy,test on-event=
"/system script run chkIP"
</syntaxhighlight>
Ez esetben lehet szolgáltatás kiesés, példánkban maximum 1 perc. Ha szeretnénk pontosan időzíteni (és feleslegesen nem futtatni az ellenőrzést), 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 módszer csak DHCP-vel kapott IP címek esetén működik. PPPoE és egyéb tunnel protokolloknál nincs lejárati idő, ez esetben csak a ciklikus (manuális) időzés működik.
A $scriptName legyen a scriptünk neve. A script kezeli az alap hiba eseteket, ilyenkor a $defaultInterval változóban megadott értékkel időzíti az újraellenőrzést. <syntaxhighlight lang="bash">
:global WanIP
:local intName "WAN"
:local scriptName "chkIP"
:local defaultInterval 00:01:00
# időzítés létrehozása, ha nincs
if ( [:len [/system scheduler find  name=$scriptName]]=0) do={
    /system scheduler add name=$scriptName interval=$defaultInterval start-time=[/system clock get time] start-date=[/system clock get date] policy=read,write,policy,test on-event="/system script run $scriptName"
}
# időzítés alap értékkel, ha hiba van
if ([:len [ /ip address find interface=$intName dynamic ]] = 0) do={
    /system scheduler set $scriptName interval=$defaultInterval start-time=[/system clock get time] start-date=[/system clock get date]
    :log error message="Nincs dinamikus IP cim az $intName interfeszen!"
    :error message="Nincs dinamikus IP cim az $intName interfeszen!"
}
:local tempIP [ /ip address get [ /ip address find interface=$intName dynamic ] address ]
:local tempIP [:pick $tempIP 0 [:find $tempIP  "/" -1 ] ]
# időzítés alap értékkel, ha nincs DHCP client
if ( [ :len [ /ip dhcp-client find interface=$intName ] ] = 0 ) do= {
  /system scheduler set $scriptName interval=$defaultInterval start-time=[/system clock get time] start-date=[/system clock get date]
    :log error message="Nincs lease time az $intName interfeszen!"
    :error message="Nincs lease time az $intName interfeszen!"
}
# időzítés lease értékkel
:local leaseIP [ /ip dhcp-client get value-name=expires-after [find interface=$intName]  ]
: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
A statikus címen:
    :set WanIP $tempIP
    :log info message="IP valtozas az $intName interfeszen! Uj IP: $WanIP"
    # teendők az új IP -vel


}
</syntaxhighlight><br />
[[Kategória:MikroTik]]
[[Kategória:MikroTik]]

A lap 2022. január 23., 09:15-kori változata


Összefoglalás

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

Előfordulhat, hogy az WAN 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ő Mikrotik RouterOS script ez esetben lehet hasznos.

Funkciók

Időzítés

A script első futtatásakor automatikusan létrehozza az időzített futtatást a MikroTik RouterOS-ben. A $scriptName paraméterben a script nevét kell megadni (amely néven elmentettük), A $defaultInterval paraméterben pedig a futtatás gyakoriságát lehet megadni.

Értesítés

A script képes értesítés küldeni syslog és email -en keresztül. A $logFacility paraméterben a log szintjét állíthatjuk, a $emailFacility paraméterben pedig az email értesítések szintjét. Az email küldés paramétereit az $Email,,, paraméter csoportban állíthatjuk be,

Online ellenőrzés

Tipikusan több WAN interfész esetében szükséges ellenőrizni, hogy az interfész valóban képes e összeköttetést biztosítani az internettel. Ezt pusztán L2 vagy L3 szinten nem elég ellenőrizni, hiszen működő link és helyes IP beállítások mellett is elképzelhető, jellemzően szolgáltató hiba esetén, hogy valójában nincs internetkapcsolat.

A legmegfelelőbb teszt az internet kapcsolat ellenőrzésére, hogy megnézzük, elérünk e az adott interfészen keresztül, egy adott, biztosan elérhető hostot.

A script az ellenőrzést ping-el hajtja végre. Feltételezük, hogy a route fel van készítve a WAN interfészek kiesésére, ezért ezt most nem tárgyaljuk. A script csak az ellenőrzést, értesítést és a kapcsolódó szolgáltatások konfigurálását végzi.

A script policy-based route-okat hoz létre interfészenként WAN0, WAN1 ... WANX néven, amit majd az ellenőrzéskor használ. A $pingSites paraméterben megadott host-okkal ellenőriz. Ha az első host nem elérhető, csak akkor ellenőrzi a másodikat, ha az sem, akkor a harmadikat, stb. Ha az összes host elérhetetlen az interfészen keresztül, akkor minősíti offline-nak az interfészt.

Address list frissítése

Ha a WAN IP-vel dolgozni szeretnénk, pl. tűzfal szabályban, akkor egy "address list"-ben lehet tárolni és frissíteni a dinamikus címet. Az $Int->$addresslist paraméter adja meg az address list nevét, melyben tárolni szerenénk az interfész címét. Dinamikus address list-et hoz létre a $defaultInterval paraméterben megdott lease time-al. Interfézenként megdható több address list, és minden interfészhez ugyanaz az address list is.

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:

Dinamikus IPsec peer

Az IPsec protokoll két IP cím között hoz létre titkosítást. Eszközök és protokollok képesek dinamikus című IPsec kliensek kezelésére (pl.: L2TP esetén a Mikrotik is), de natívan, illetve tunnel protokollokkal együtt a Mikrotik nem. A következő példában egy GRE/IPsec tunnel-t tesszük dinamikussá.


A két MikroTik eszköz között hozzuk létre a statikus tunnelt:

A beállítás létrehozza az IPsec beállításokat is alap MikroTik beállításokkal.

IP váltáskor a megszokott módon kicseréljük az IP címeket a tunnelben, ami módosítani fogja az IPsec beállításokat is. Viszont a másik MikroTik eszközön is meg kell változtani a beállításokat, hogy az IPsec tunnel felépüljön. Ehhez a már említett MikroTik DDNS-t használjuk. Engedélyezzük ezt mindkét eszközön a fent látható módon. A MikroTik DDNS-e egy perces TTL-el dolgozik. Tehát maximum ennyi szolgáltatás kiesés lehetséges.


A következő scriptet mindkét eszközön egy perces időközönlént futtatva dinamikus lesz a GRE/IPsec csatorna. Értelem szerűen a $temprIP változónál az ellenkező MikroTik DDNS-ét kell megadni.

Ha csak az egyik eszköz rendelkezik dinamikus címmel, a következő scipteket kell futtatni.

A dinamikus címen:

A statikus címen: