Δυναμικό DNS στο Mikrotik
Από TWMN Wiki
Πίνακας περιεχομένων |
Τι είναι το Dynamic DNS
Κάθε φορά που το DSL modem συνδέεται με τον ISP μας, παίρνει και μια ip. Σε περίπτωση που τρέχουμε κάποια services τα οποία θέλουμε να είναι προσβάσιμα απο internet (web page, ftp server κλπ.), θα πρέπει με κάποιο τρόπο να στέλνουμε την ip μας στους κεντρικούς DNS servers.
Τα περισσότερα DSL modems έχουν πλέον τη δυνατότητα να κάνουν αυτή τη δουλειά αυτόματα. Στη σελίδα ρύθμισής τους υπάρχει σχετικό section.
Μερικές γνωστά site που προσφέρουν δωρεάν υπηρεσίες Dynamic DNS είναι:
- dyndns.org
- changeip.com
Dynamic DNS και Mikrotik (μόνο για changeip.com)
Σε περίπτωση που:
- το modem/router μας δεν υποστηρίζει dynamic dns και το έχουμε σε "bridged" mode (η κλήση γίνεται απο το Mikrotik με pppoe client)
- έχουμε adsl interface στο Mikrotik
μπορούμε να ρυθμίσουμε το Mikrotik να ενημερώνει για τις αλλαγές της ip μας.
Αυτό γίνεται με τη βοήθεια της εντολής 'dns-update' που βρίσκετε κάτω από το menu 'tools' (http://www.mikrotik.com/documentation/manual_2.6/Tool/DDNS.html)
Για τη δουλειά αυτή, υπάρχει αντίστοιχο script (http://wiki.mikrotik.com/wiki/Dynamic_DNS_Update_Script_for_ChangeIP.com)
ΥΓ: Προσοχή με τους κωδικούς που θα χρησιμοποιήσετε στο script. To Scripting Host του Mikrotik χρησιμοποιεί κάποιους χαρακτήρες ως “operators”. Οπότε αποφεύγετε κυρίως σύμβολα σε αυτούς τους κωδικούς, για να μη συναντήσετε μηνύματα του είδους “ddns error – Authentication Failure” στο log file σας. Αναλυτικότερα για το Mikrotik Scripting Host: http://www.mikrotik.com/testdocs/ros/2.9/system/scripting.php
Για Mikrotik 2.9.x
:log info "DDNS: Begin"
:global ddns-user "YOURUSERID"
:global ddns-pass "YOURPASSWORD"
:global ddns-host "*1"
:global ddns-interface "EXACTINTERFACENAME"
:global ddns-ip [ /ip address get [/ip address find interface=$ddns-interface] address ]
:if ([ :typeof $ddns-lastip ] = nil ) do={ :global ddns-lastip 0.0.0.0/0 }
:if ([ :typeof $ddns-ip ] = nil ) do={
:log info ("DDNS: No ip address present on " . $ddns-interface . ", please check.")
} else={
:if ($ddns-ip != $ddns-lastip) do={
:log info "DDNS: Sending UPDATE!"
:log info [ /tool dns-update name=$ddns-host address=[:pick $ddns-ip 0 [:find $ddns-ip "/"] ] key-name=$ddns-user key=$ddns-pass ]
:global ddns-lastip $ddns-ip
} else={
:log info "DDNS: No change"
}
}
:log info "DDNS: End"
Για Mikrotik 3.x
# Define User Variables
:global ddnsuser "CHANGEIPUSERID"
:global ddnspass "CHANGEIPPASSWORD"
:global ddnshost "FREEHOSTNAME.TOUPDATE.TLD"
# Define Global Variables
:global ddnsip
:global ddnslastip
:if ([ :typeof $ddnslastip ] = nil ) do={ :global ddnslastip "0" }
:global ddnsinterface
:global ddnssystem ("mt-" . [/system package get system version] )
# Define Local Variables
:local int
# Loop thru interfaces and look for ones containing
# default gateways without routing-marks
:foreach int in=[/ip route find dst-address=0.0.0.0/0 active=yes ] do={
:if ([:typeof [/ip route get $int routing-mark ]] != str ) do={
:global ddnsinterface [/ip route get $int interface]
}
}
# Grab the current IP address on that interface.
:global ddnsip [ /ip address get [/ip address find interface=$ddnsinterface ] address ]
# Did we get an IP address to compare?
:if ([ :typeof $ddnsip ] = nil ) do={
:log info ("DDNS: No ip address present on " . $ddnsinterface . ", please check.")
} else={
:if ($ddnsip != $ddnslastip) do={
:log info "DDNS: Sending UPDATE!"
:log info [ :put [/tool dns-update name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip "/"] ] key-name=$ddnsuser key=$ddnspass ] ]
:global ddnslastip $ddnsip
} else={
:log info "DDNS: No update required."
}
}
# End of script

