MikroTik – Automatically creating DNS record for each DHCP lease/client

You’ll notice that when you first get your MikroTik router, that it doesn’t create DNS records for each DHCP client that successfully receives a lease. The below article provides the necessary script to create a DNS record for each DHCP Client. I’ve provided a link to the Mikrotik Wiki article so you can see the original source.

http://wiki.mikrotik.com/wiki/Setting_static_DNS_record_for_each_DHCP_lease

The script does need to be modified (white spaces taken out) so that it will run correctly on the MikroTik. I’ve done this already and provided the script below. Also, make sure that you change :local zone “local”; to your network domain name or dns search suffix.

You will also have to create this script via telnet/ssh as webfig will mess up line 11 and remove the “\\” and leave “\”. If you don’t know how to add a script via telnet/ssh, simply type system script add name=”dhcp-dns” soruce={ at which point you can then paste the script content below. You will then have to complete the line by entering in again.

Viola! Execute the script to ensure it runs without errors system scripts run name=dhcp-dns. Lastly we want to run this script often, to ensure the records are created and updated. Lets set a schedule run system scheduler add name=dhcp-dns-run interval=5m on-event=dhcp-dns and now the script should be running every 5 minutes. To confirm the scheduler is working, wait 5 minutes and then run system scheduler print and look at the “RUN-COUNT” value, which should be greater than 0.

This script is now in GitHub and can be seen here https://github.com/jordantrizz/mikrotik-scripts/blob/master/dhcp-dns

:local zone "local";
:local ttl "00:05:00"
:local hostname
:local ip
:local dnsip
:local dhcpip
:local dnsnode
:local dhcpnode

/ip dns static;
:foreach i in=[find where name ~ (".*\\.".$zone) ] do={
  :set hostname [ get $i name ];
  :set hostname [ :pick $hostname 0 ( [ :len $hostname ] - ( [ :len $zone ] + 1 ) ) ];
  /ip dhcp-server lease;
  :set dhcpnode [ find where host-name=$hostname ];
  :if ( [ :len $dhcpnode ] > 0) do={
    :log debug ("Lease for ".$hostname." still exists. Not deleting.");
  } else={
# there's no lease by that name. Maybe this mac has a static name.
    :local found false
    /system script environment
    :foreach n in=[ find where name ~ "shost[0-9A-F]+" ] do={
       :if ( [ get $n value ] = $hostname ) do={
         :set found true;
       }
    }
    :if ( found ) do={
      :log debug ("Hostname ".$hostname." is static");
    } else={
      :log info ("Lease expired for ".$hostname.", deleting DNS entry.");
      /ip dns static remove $i;
    }
  }
}

/ip dhcp-server lease;
:foreach i in=[find] do={
  :set hostname ""
  :local mac
  :set dhcpip [ get $i address ];
  :set mac [ get $i mac-address ];
  :while ($mac ~ ":") do={
    :local pos [ :find $mac ":" ];
    :set mac ( [ :pick $mac 0 $pos ] . [ :pick $mac ($pos + 1) 999 ] );
  };
  :foreach n in=[ /system script environment find where name=("shost" . $mac) ] do={
    :set hostname [ /system script environment get $n value ];
  }
  :if ( [ :len $hostname ] = 0) do={
    :set hostname [ get $i host-name ];
  }
  :if ( [ :len $hostname ] > 0) do={
    :set hostname ( $hostname . "." . $zone );
    /ip dns static;
    :set dnsnode [ find where name=$hostname ];
    :if ( [ :len $dnsnode ] > 0 ) do={
# it exists. Is its IP the same
      :set dnsip [ get $dnsnode address ];
      :if ( $dnsip = $dhcpip ) do={
        :log debug ("DNS entry for " . $hostname . " does not need updating.");
      } else={
        :log info ("Replacing DNS entry for " . $hostname);
        /ip dns static remove $dnsnode;
        /ip dns static add name=$hostname address=$dhcpip ttl=$ttl;
      }
    } else={
# it doesn't exist. Add it
      :log info ("Adding new DNS entry for " . $hostname);
      /ip dns static add name=$hostname address=$dhcpip ttl=$ttl;
    }
  }
}

 

 

*UPDATE 10/01/2014* A much better script has been created by Tyler and is available at http://www.tolaris.com/2014/09/27/synchronising-dhcp-and-dns-on-mikrotik-routers/


Did you like this article?


0 Shares:
You May Also Like

QuickPwn Released for Mac OS X

The iphone-dev.org crew has released QuickPwn for Mac OS X, there is a an official torrent for the release.
Here is the long awaited “QuickPwn” for Mac OS X. You’ll see a similarity to the user-interface of PwnageTool, this is because of the great feedback we’ve had since we moved to that interface with PwnageTool 2.x.
Read More

Western Digital developing 20,000RPM drives

That's right, this isn't a joke.
The new drive will be very similar to the recently-released VelociRaptor, in that it’ll be a 2.5in drive with a custom 3.5in housing built around it. Details are incredibly light at this stage, given that the product is still in development, and we don’t even have a release timeframe at the moment. However, our sources said that the drive will be ‘silent’ – that’s the last thing I would have expected from a drive with platters spinning at 20,000 RPM. Western Digital is apparently working on silencing the beast by improving the housing technology, which will now not just act as a heatsink, but also as a noise cancelling device. We’d also hope that the drive enclosure has some vibration dampening technology as well, because that’s also likely to be a problem given the high spindle speeds.
Now they just need push SATA 6.0Gbit/s onto motherboards http://en.wikipedia.org/wiki/SATA#SATA_6.0_Gbit.2Fs Full artile at bit-tech.net
Read More

Creators Of Mobile Chat For the iPhone Twenty08 Hires AplloIM Developer

If you bought the iPhone when it first came out, you had two choices for Instant Messaging. Twenty08's MobileChat and Alex Schaefer's ApolloIM. Twenty08 has now hired Alex Schaefer to work exclusively on MobileChat
twenty08 would like to formally welcome aboard…Alex Schaefer. Many of you may know him as the founder of the world’s first Native iPhone IM Application, ApolloIM. ApolloIM was an amazing application and during it’s run, MobileChat and Apollo stood head to head and constantly battled to create the better app. (Friendly war of course!) The best part about it was that no one won! Only our respective users benefited from the friendly competition, and you can’t ask for anything better than that as far as I’m concerned. Now with Alex working on our side, we believe that MobileChat will be able to rise up and regain its glory as the number one iPhone application that we all know it can be. He is a very talented developer (plus a great guy) who has already brought some great ideas to the table and we’re all very excited to see our new-found relationship grow.
Read the full article on Twenty08's site. MobileChat's website
Read More

Error’d: Crashing Las Vegas

This is awesome. I recently took a trick to Las Vegas, and wondered about all of the the neat hardware that runs the screens and lights.
Error'd: Crashing Las Vegas -

Surely, you’ve seen the commercials and are familiar with Las Vegas’ First-Commandment / Clever-Marketing-Tagline: What Happens in Vegas, Stays in Vegas. I suppose we can bend that rule today and share a couple pictures that Christopher Kimbell snapped while he was walking down the strip…

… and later that day …

As for the rest of the pictures that Chris found on his camera after his vacation? I think we'll just leave those in Vegas…

[The Daily WTF]
Read More