rolf14
Goto Top

Mikrotik DynDNS und Port Weiterleitung

Hallo Leute,

ich habe hier einen MikroTik Router vor mir ( zum ersten mal ) und bin dabei diesen einzurichten.

Es klappt auch soweit alles ganz gut. Nun bin ich an dem Punkt das ich bestimmte Port´s von außen erreichbar machen möchte.
Ich möchte den Router daher via dyndns erreichbar machen.

Ich habe das erste Skript von http://wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_dynDNS eingebunden und eine Shedule dafür eingerichtet, welche jede Minute abgearbeitet wird.
Leider muss ich jedoch ein Fehler machen da der Host bei dyndns nicht aktualisiert wird.

Kann mir jemand helfen oder mir verraten was ich vielleicht falsch mache?

Im Skript habe ich nur die drei Felder für mich abgeändert:

  1. Define User Variables
:global ddnsuser "DYNDNSUSER"
:global ddnspass "DYNDNSPASS"
:global ddnshost "DYNDNSHOST"

Leider sehe ich auch im Log nicht ob er das script überhaupt abarbeitet, Kann ich das Logging dafür irgendwo aktivieren?

Beste Grüße

Content-ID: 271474

Url: https://administrator.de/contentid/271474

Ausgedruckt am: 21.11.2024 um 21:11 Uhr

michi1983
michi1983 08.05.2015 um 13:19:40 Uhr
Goto Top
Hallo,

hast du die korrekte Version des Scriptes passend für die RouterOS Version genommen?

Hier kannst du das Logging aktivieren:
http://wiki.mikrotik.com/wiki/Manual:System/Log

Gruß
dog
dog 08.05.2015 aktualisiert um 13:20:15 Uhr
Goto Top
Ich benutze seit langem diese Variante:
:local ddnsuser "user"  
:local ddnspass "password"  
:local theinterface "pppoe1"  
:local ddnshost "host.dyndns.org"  

:local ipddns [:resolve $ddnshost];
:local iplocal [ /ip address get [/ip address find interface=$theinterface ] address ]

:if ([ :typeof $iplocal ] = nil ) do={
  :log info ("DynDNS: No ip address on $theinterface .")  
} else={
# IP Adresse ist 1.2.3.4/32 also muss das /32 erstmal weg
  :for i from=( [:len $iplocal] - 1) to=0 do={ 
    :if ( [:pick $iplocal $i] = "/") do={   
      :set iplocal [:pick $iplocal 0 $i];
    } 
  }
 
  :if ($ipddns != $iplocal) do={
    :log info ("DynDNS: IP-DynDNS = $ipddns <> local IP = $iplocal UPDATE")  
    :local str "nic/update?hostname=$ddnshost&myip=$iplocal&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"  
    /tool fetch url="http://members.dyndns.org/$str" user=$ddnsuser password=$ddnspass keep=no  
  } else={
    :log debug ("DynDNS IP identical. Will not update <$ipddns>")  
  }
}
Rolf14
Rolf14 08.05.2015 um 13:41:56 Uhr
Goto Top
Hey danke euch beiden für die Antwort,

@dog:

leider scheint auch das Skript gar nicht abgearbeitet zu werden.

@michi:

Ich weiß nicht genau welche Version ich habe. kannst du mir sagen wo ich das sehe?
Unter System/Routerboard steht Current Firmware 3.19 und als Upgrade Firmaware steht das selbe.

danke für deinen Link. Wenn ich beim Logging scripte eintrage loggt er diese dennoch nicht. Was kann ich da falsch machen?

3bae6cdfb8e41f609682c335f35c830b
dog
dog 08.05.2015 um 13:47:29 Uhr
Goto Top
Die Firmware ist größtenteils egal.
Interessant ist die Software-Version. Die steht in der Titelzeile des Fensters.
Ob ein Skript ausgeführt wird, kannst du am Run Count sehen.
Wenn der sich nicht verändert ist dein Scheduler-Eintrag falsch.
Rolf14
Rolf14 08.05.2015 um 13:55:15 Uhr
Goto Top
Ich habe jetzt nochmal alle Packages aktualisiert ( jetzt alles auf Version 6.28 ) und die Firmware habe ich nun auch aktualisiert. Diese befindet sich nun auf Version 3.22.

Der Run Counter des Scripts steigt stetig an. Bei dem Scheduler Eintrag habe ich denke ich soweit alles richtig. Nur das Script als solches scheint nicht zu funktionieren.
Rolf14
Rolf14 08.05.2015 aktualisiert um 16:15:09 Uhr
Goto Top
Ich habe jetzt das Script eingebunden und nun funktioniert es.


:global ddnsuser "theddnsusername"
:global ddnspass "theddnspassword"
:global theinterface "interfacename"
:global ddnshost blabla.dyndns.org
:global ipddns [:resolve $ddnshost];
:global ipfresh [ /ip address get [/ip address find interface=$theinterface ] address ]
:if ([ :typeof $ipfresh ] = nil ) do={
:log info ("DynDNS: No ip address on $theinterface .")
} else={
:for i from=( [:len $ipfresh] - 1) to=0 do={
:if ( [:pick $ipfresh $i] = "/") do={
:set ipfresh [:pick $ipfresh 0 $i];
}
}

:if ($ipddns != $ipfresh) do={
:log info ("DynDNS: IP-DynDNS = $ipddns")
:log info ("DynDNS: IP-Fresh = $ipfresh")
:log info "DynDNS: Update IP needed, Sending UPDATE...!"
:global str "/nic/update\?hostname=$ddnshost&myip=$ipfresh&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG"
/tool fetch address=members.dyndns.org src-path=$str mode=http user=$ddnsuser \
password=$ddnspass dst-path=("/DynDNS.".$ddnshost)
:delay 1
:global str [/file find name="DynDNS.$ddnshost"];
/file remove $str
:global ipddns $ipfresh
:log info "DynDNS: IP updated to $ipfresh!"
} else={
:log info "DynDNS: dont need changes";
}
}

Im Log wird es nun auch angezeigt, aber sicher wegen dem Script an sich und nicht wegen meiner Logging Regel. Kannst du mir sagen ob ich das da richtig eingetragen habe oder muss das anders aussehen?

3bae6cdfb8e41f609682c335f35c830b

Beste Grüße