dhcp-to-dns: handle duplicate mac-address and host-name

* several leases for one mac address (changed client id, different net):
   -> take address from last lease
  Most likely this is the same devices which booted different OS or
  changed to different network.

* several leases for one host name:
   -> take address from first lease
  We see either different devices with same name or one device with
  several network interfaces. Keep the first name to mitigate stealing
  dns name.
This commit is contained in:
Christian Hesse 2019-11-12 12:49:28 +01:00
parent 9d5c566b1c
commit 91776d3388

View file

@ -44,9 +44,14 @@
:if ([ :len $DnsRecord ] > 0) do={
:local DnsIp [ / ip dns static get $DnsRecord address ];
:local HostLeases [ / ip dhcp-server lease find where mac-address=($LeaseVal->"mac-address") dynamic=yes ];
:if ([ :len $HostLeases ] > 1) do={
:set ($LeaseVal->"address") [ / ip dhcp-server lease get ($HostLeases->([ :len $HostLeases ] - 1)) address ];
:local DupMacLeases [ / ip dhcp-server lease find where mac-address=($LeaseVal->"mac-address") dynamic=yes ];
:if ([ :len $DupMacLeases ] > 1) do={
:set ($LeaseVal->"address") [ / ip dhcp-server lease get ($DupMacLeases->([ :len $DupMacLeases ] - 1)) address ];
}
:local DupHostLeases [ / ip dhcp-server lease find where host-name=($LeaseVal->"host-name") dynamic=yes ];
:if ([ :len $DupHostLeases ] > 1) do={
:set ($LeaseVal->"address") [ / ip dhcp-server lease get ($DupHostLeases->0) address ];
}
:if ($DnsIp = $LeaseVal->"address") do={