From 0c3ef1b0dce40966443c1b999aa455d118ffa0ec Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 16 Mar 2026 11:27:14 +0100 Subject: [PATCH 1/6] dhcp-to-dns: support to ignore networks Closes: https://github.com/eworm-de/routeros-scripts/issues/119 --- dhcp-to-dns.rsc | 12 +++++++++--- doc/dhcp-to-dns.md | 8 ++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/dhcp-to-dns.rsc b/dhcp-to-dns.rsc index 74d2e9b3..692403ba 100644 --- a/dhcp-to-dns.rsc +++ b/dhcp-to-dns.rsc @@ -72,15 +72,21 @@ :continue; } - :local Comment ($CommentPrefix . ", macaddress=" . $LeaseVal->"active-mac-address" . ", server=" . $LeaseVal->"server"); - :local MacDash [ $CleanName ($LeaseVal->"active-mac-address") ]; - :local HostName [ $CleanName [ $EitherOr ([ $ParseKeyValueStore ($LeaseVal->"comment") ]->"hostname") ($LeaseVal->"host-name") ] ]; :local Network [ /ip/dhcp-server/network/find where ($LeaseVal->"active-address") in address ]; :local NetworkVal; :if ([ :len $Network ] > 0) do={ :set NetworkVal [ /ip/dhcp-server/network/get ($Network->0) ]; } :local NetworkInfo [ $ParseKeyValueStore ($NetworkVal->"comment") ]; + + :if ($NetworkInfo->"dns-ignore" = true) do={ + $LogPrint debug $ScriptName ("Lease for " . $LeaseVal->"active-mac-address" . " is in ignored network... Skipping."); + :continue; + } + + :local Comment ($CommentPrefix . ", macaddress=" . $LeaseVal->"active-mac-address" . ", server=" . $LeaseVal->"server"); + :local MacDash [ $CleanName ($LeaseVal->"active-mac-address") ]; + :local HostName [ $CleanName [ $EitherOr ([ $ParseKeyValueStore ($LeaseVal->"comment") ]->"hostname") ($LeaseVal->"host-name") ] ]; :local NetDomain ([ $IfThenElse ([ :len ($NetworkInfo->"name-extra") ] > 0) ($NetworkInfo->"name-extra" . ".") ] . \ [ $EitherOr [ $EitherOr ($NetworkInfo->"domain") ($NetworkVal->"domain") ] $Domain ]); :local FullA ($MacDash . "." . $NetDomain); diff --git a/doc/dhcp-to-dns.md b/doc/dhcp-to-dns.md index a1a211c6..bf0db384 100644 --- a/doc/dhcp-to-dns.md +++ b/doc/dhcp-to-dns.md @@ -50,8 +50,12 @@ A bound lease for mac address `00:11:22:33:44:55` with ip address `10.0.0.50` would result in an A record `00-11-22-33-44-55.example.com` pointing to the given ip address. -Additional options can be given from comment, to add an extra level in -dns name or define a different domain. +Additional options can be given from comment, first of all you can opt-out +for specific networks: + + /ip/dhcp-server/network/add address=10.0.0.0/24 domain=example.com comment="dns-ignore=true"; + +Use this to add an extra level in dns name or define a different domain. /ip/dhcp-server/network/add address=10.0.0.0/24 domain=example.com comment="domain=another-domain.com, name-extra=dhcp"; From df289640bce219d50187ff48d6525ccaeb992dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Witkowski?= Date: Mon, 11 May 2026 16:43:13 +0200 Subject: [PATCH 2/6] dhcp-to-dns: convert DNS names to lower case --- dhcp-to-dns.rsc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dhcp-to-dns.rsc b/dhcp-to-dns.rsc index 692403ba..d93eeb34 100644 --- a/dhcp-to-dns.rsc +++ b/dhcp-to-dns.rsc @@ -89,8 +89,8 @@ :local HostName [ $CleanName [ $EitherOr ([ $ParseKeyValueStore ($LeaseVal->"comment") ]->"hostname") ($LeaseVal->"host-name") ] ]; :local NetDomain ([ $IfThenElse ([ :len ($NetworkInfo->"name-extra") ] > 0) ($NetworkInfo->"name-extra" . ".") ] . \ [ $EitherOr [ $EitherOr ($NetworkInfo->"domain") ($NetworkVal->"domain") ] $Domain ]); - :local FullA ($MacDash . "." . $NetDomain); - :local FullCN ($HostName . "." . $NetDomain); + :local FullA [ :convert transform=lc ($MacDash . "." . $NetDomain) ]; + :local FullCN [ :convert transform=lc ($HostName . "." . $NetDomain) ]; :local MacInServer ($LeaseVal->"active-mac-address" . " in " . $LeaseVal->"server"); :local DnsRecord [ /ip/dns/static/find where comment=$Comment type=A ]; From 172298f5eb2e9131ad5c2157d2d8e0c7f520e9eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Witkowski?= Date: Mon, 11 May 2026 17:17:35 +0200 Subject: [PATCH 3/6] dhcp-to-dns: set $LeaseInfo --- dhcp-to-dns.rsc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dhcp-to-dns.rsc b/dhcp-to-dns.rsc index d93eeb34..007a96e3 100644 --- a/dhcp-to-dns.rsc +++ b/dhcp-to-dns.rsc @@ -66,6 +66,7 @@ $LogPrint debug $ScriptName ("A lease just vanished, ignoring."); :continue; } + :local LeaseInfo [ $ParseKeyValueStore ($LeaseVal->"comment") ]; :if ([ :len ($LeaseVal->"active-address") ] = 0) do={ $LogPrint debug $ScriptName ("No address available... Ignoring."); @@ -86,7 +87,7 @@ :local Comment ($CommentPrefix . ", macaddress=" . $LeaseVal->"active-mac-address" . ", server=" . $LeaseVal->"server"); :local MacDash [ $CleanName ($LeaseVal->"active-mac-address") ]; - :local HostName [ $CleanName [ $EitherOr ([ $ParseKeyValueStore ($LeaseVal->"comment") ]->"hostname") ($LeaseVal->"host-name") ] ]; + :local HostName [ $CleanName [ $EitherOr ($LeaseInfo->"hostname") ($LeaseVal->"host-name") ] ]; :local NetDomain ([ $IfThenElse ([ :len ($NetworkInfo->"name-extra") ] > 0) ($NetworkInfo->"name-extra" . ".") ] . \ [ $EitherOr [ $EitherOr ($NetworkInfo->"domain") ($NetworkVal->"domain") ] $Domain ]); :local FullA [ :convert transform=lc ($MacDash . "." . $NetDomain) ]; From 71df93e0117ccefc9e0ab993af44d91a6e03d8b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Witkowski?= Date: Mon, 11 May 2026 17:25:42 +0200 Subject: [PATCH 4/6] dhcp-to-dns: allow to specify domain for CNAMEs... ... in network or lease. --- dhcp-to-dns.rsc | 3 ++- doc/dhcp-to-dns.md | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/dhcp-to-dns.rsc b/dhcp-to-dns.rsc index 007a96e3..8fb83d1b 100644 --- a/dhcp-to-dns.rsc +++ b/dhcp-to-dns.rsc @@ -91,7 +91,8 @@ :local NetDomain ([ $IfThenElse ([ :len ($NetworkInfo->"name-extra") ] > 0) ($NetworkInfo->"name-extra" . ".") ] . \ [ $EitherOr [ $EitherOr ($NetworkInfo->"domain") ($NetworkVal->"domain") ] $Domain ]); :local FullA [ :convert transform=lc ($MacDash . "." . $NetDomain) ]; - :local FullCN [ :convert transform=lc ($HostName . "." . $NetDomain) ]; + :local CNameDomain [ $EitherOr ($LeaseInfo->"cname-domain") ($NetworkInfo->"cname-domain") ]; + :local FullCN [ :convert transform=lc ($HostName . "." . [ $EitherOr $CNameDomain $NetDomain ]) ]; :local MacInServer ($LeaseVal->"active-mac-address" . " in " . $LeaseVal->"server"); :local DnsRecord [ /ip/dns/static/find where comment=$Comment type=A ]; diff --git a/doc/dhcp-to-dns.md b/doc/dhcp-to-dns.md index bf0db384..bb46040b 100644 --- a/doc/dhcp-to-dns.md +++ b/doc/dhcp-to-dns.md @@ -84,6 +84,19 @@ Note this information can be configured in wireless access list with then due to script execution order. Decrease the scheduler interval to reduce the effect. +### Override domain for CNAME records + +By default both the A record (based on mac address) and the CNAME record +(based on host name) use the same domain. You can set a different domain +for CNAME records with `cname-domain=` in network comment: + + /ip/dhcp-server/network/add address=10.0.0.0/24 domain=dhcp.example.com comment="cname-domain=example.com"; + +Adding `cname-domain=` in lease comment has even higher priority: + + /ip/dhcp-server/lease/add address=10.0.0.50 comment="cname-domain=example.com" mac-address=00:11:22:33:44:55 server=dhcp; + + Frequently asked questions -------------------------- From 69a45a51d3f690615b5ff3fdbc62a917d8e153a2 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 11 May 2026 17:10:32 +0200 Subject: [PATCH 5/6] update list of contributors --- CONTRIBUTIONS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTIONS.md b/CONTRIBUTIONS.md index cfbd4048..c54f4d0b 100644 --- a/CONTRIBUTIONS.md +++ b/CONTRIBUTIONS.md @@ -23,6 +23,7 @@ for details! * [Ignacio Serrano](mailto:ignic@ignic.com) (@ignic) * [Ilya Kulakov](mailto:kulakov.ilya@gmail.com) (@Kentzo) * [Leonardo David Monteiro](mailto:leo@cub3.xyz) (@leosfsm) +* [Ɓukasz Witkowski](mailto:witul@skyhost.pl) (@witul) * [Michael Gisbers](mailto:michael@gisbers.de) (@mgisbers) * [Miquel Bonastre](mailto:mbonastre@yahoo.com) (@mbonastre) * @netravnen From 99facacb5960db074390ef0e13f38bbddf71d0fb Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Tue, 12 May 2026 07:11:14 +0200 Subject: [PATCH 6/6] dhcp-to-dns: allow to ignore for specific lease --- dhcp-to-dns.rsc | 4 ++-- doc/dhcp-to-dns.md | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dhcp-to-dns.rsc b/dhcp-to-dns.rsc index 8fb83d1b..8b1729be 100644 --- a/dhcp-to-dns.rsc +++ b/dhcp-to-dns.rsc @@ -80,8 +80,8 @@ } :local NetworkInfo [ $ParseKeyValueStore ($NetworkVal->"comment") ]; - :if ($NetworkInfo->"dns-ignore" = true) do={ - $LogPrint debug $ScriptName ("Lease for " . $LeaseVal->"active-mac-address" . " is in ignored network... Skipping."); + :if ($LeaseInfo->"dns-ignore" = true || $NetworkInfo->"dns-ignore" = true) do={ + $LogPrint debug $ScriptName ("Lease for " . $LeaseVal->"active-mac-address" . " is ignored... Skipping."); :continue; } diff --git a/doc/dhcp-to-dns.md b/doc/dhcp-to-dns.md index bb46040b..92dad77f 100644 --- a/doc/dhcp-to-dns.md +++ b/doc/dhcp-to-dns.md @@ -55,6 +55,8 @@ for specific networks: /ip/dhcp-server/network/add address=10.0.0.0/24 domain=example.com comment="dns-ignore=true"; +The same can be done for a specific lease with its comment. + Use this to add an extra level in dns name or define a different domain. /ip/dhcp-server/network/add address=10.0.0.0/24 domain=example.com comment="domain=another-domain.com, name-extra=dhcp";