Hi Matthijs. THANK YOU.
This "MUSIC" tool is indeed appears to be most suitable assisting
addon tool for BIND to support MULTI-SIGNER MODEL-2 (aka MULTI
MASTER/PRIMAR)Y DNS NAME SERVER, at this moment.
I think i've seen another project Seen few other project also doing
similar
I regret, i did not follow all the links in your ref in your ISC
pdf, which appeared in ggl search result earlier, & i assumed
by-now BIND has builtin Multi-Signer MODEL-2 aka
Multi-Master/Primary DNSSEC mode support.
If the "MUSIC" was in C / C++ / perl, etc that would have been
better for me.
I will prepare a similar debian VPS server, & then compile "music",
& find the needed binary files + config files, and copy-over to
nameservers.
By the way, any plan to share a pre-compiled standalone static
binary & config files released as tar/etc file in github ?
From readme page, my interpretation is its installed in each
primary/master providers/nameservers, & can perform independently
if/when 2 of the 3 provider/namerservers went down/failed for
prolonged time.
If above assessment is correct, then it is fully HA
(High-Availability) addon solution for BIND.
But if "MUSIC" needs to be indicated manually, that, 2 went down
out of 3, then its not fully HA.
As BIND itself do not have builtin RFC 8901 MODEL-2 (Multi-Signer
MODEL-2) support now in v9.18, (current version in Debian is
v9.18-28), until v9.20 standard/stable arrives in future, I need to
do multi-signer model-2 with other tools, And, using other-ways to
update+sync is still necessary for MultiSigner / Multi-Master
objectives.
So, i want to try other ways of updating/signalling, instead of
using BIND's TSIG based connections, etc.
I want to try shared storage based solution, where files are
indicating/performing as signal for making changes, etc to ensure
only those (providers/nameserver) who are up/running is able to
send/receive signal for changes, and BIND still running fine (and
removing expired keys, etc), etc.
It is sad that https://launchpad.net/~isc/+archive/ubuntu/bind repo
do not have Debian packages. It has BIND v9.20 for Ubuntu.
But, Ubuntu's base is Debian, so it should run on Debian too.
BIND9 v9.20 atleast in Debian "testing" repo, ... i will attempt to
find out if BIND9 9.20.2-1-testing can work with dependencies from
standard debian repo. Dont want to get anything other than BIND
from "testing".
I think i need to use advanced option in "apt" to install the
"testing" BIND in a different directory. Disable default BIND, &
enable the "testing" BIND.
Thank you.
Erik.
Erik T Ashfolk.
On 9/29/24 11:36 PM, Matthijs Mekking wrote:
Hi Erik,
There is no configuration option for enabling multi-signer in BIND.
BIND 9.20 is able to deal with multi-signer setups, but as Mark
mentioned earlier, all the coordination needs to be done outside
the name server.
You may consider MUSIC for this: https://github.com/DNSSEC-
Provisioning/music
Best regards,
Matthijs
On 9/28/24 03:50, Terik Erik Ashfolk wrote:
Does the BIND have command/parameter for configuring+running BIND
in Multi-Signer MODEL-2 mode as specified in RFC 8901 ?
https://www.rfc-editor.org/rfc/rfc8901.html
in another words, Can BIND itself handle multiple-provider's
(aka: multiple-nameserver's) KSKs, ZSKs, DNSKEYs, etc RRsets and
create/update RRSIGs accordingly with Multi-Signer MODEL-2 mode ?
If it can what commands/parameters enable such mode ?
What "update-policy" it needs ?
Erik.
Erik T Ashfolk.
On 9/27/24 2:53 PM, Terik Erik Ashfolk wrote:
According to the page
https://blog.apnic.net/2021/08/25/multi-signer-dnssec-models/
in MODEL 2.
I added an improved image as attachment.
<img alt="ZSK-signing" src="cid:ImportZSK-PublishDSofKSK.jpg" />
MULTI-ZSK-SIGNING IS ONE OF THE SOLUTION, and appears to be
suitable for my case.
So, multi-signing with ZSKs from multiple nameservers would have
worked,
when nameservers were using separate "zones" & "keys" folder,
I needed to sign n1's zone file with n2's ZSK & with n3's ZSK.
I needed to sign n2's zone file with n1's ZSK & with n3's ZSK.
I needed to sign n3's zone file with n1's ZSK & with n2's ZSK.
Because 3 nameservers are using SYNCED/REPLICATED shared
directories & files,
so each ZSK & KSK are available to other nameservers.
for "key-directory"
n1 using "/mnt/vol/v1/etc/bind/n1/keys"
n2 using "/mnt/vol/v1/etc/bind/n2/keys"
n3 using "/mnt/vol/v1/etc/bind/n3/keys"
and shared common directory for BIND keys is
"/mnt/vol/v1/etc/bind/keys"
and shared directory is
"/mnt/vol/v1"
is there an option in BIND, that can monitor+enable additional
ZSK signing from new ZSK key from other namerservers for same
domain ?
if not, please add this as new feature in BIND.
if BIND itself cannot do the monitoring + multi-ZSK-signing now,
then, HOW can i monitor the ".../bind/n1/keys" (or ".../bind/n2/
keys" or ".../bind//n3/keys" or ".../bind/keys" ) sub-dirs under
shared-directory and find that BIND has began to use a new ZSK
key ?
or HOW can i get a signal from BIND in each nameserver ? that,
BIND has began to use a new ZSK key ?
so-that, i can trigger/run another script in each nameserver
(which added new ZSK key) to begin signing my domain's zone file
in other 2 nameservers with the new ZSK.
example : if n1 added a new ZSK for "example.com" domain, then a
"new-zsk-key-monitoring-script.sh" script will create 2 files
"signal-n2-ExampleCom-MZS-zskNUMBER.txt"
"signal-n3-ExampleCom-MZS-zskNUMBER.txt"
in the shared-bind-directory : "/mnt/vol/v1/etc/bind/keys".
Then "monitor-for-signal-file.sh" script running in n2 & n3,
will get that signal, & run "multi-ZSK-sign-script.sh" to mulit
ZSK signing.
Thanks in advance.
Erik.
Erik T Ashfolk.
On 9/26/24 7:26 PM, TErik Ashfolk wrote:
Hello BIND Community.
Looking forward to your suggestions, advises on setup DNSSEC
enabled zones on multiple master/primary authoritative DNS
server (Nameserver) with synced/replicated common shared
directories/ volume.
Please skip the section(s) that you dont need to read/scan,
& goto the QUESTIONS , the last section.
OBJECTIVES (END-RESULT):
Trying to achieve HA (High-Availability <https://
en.wikipedia.org/ wiki/High_availability>), so-that, as long as
1 master/primary is up/running, then my domains are still
available to world, and allowing users to obtain DNSSEC
verified domain- name to IP-address resolving, etc from BIND
DNS server services.
RESOURCES:
• Servers : rented 3 servers on 3 locations from different
server providers.
• Domain : I have multiple domains from domain providers
(registrar) . Here i will use "example.com"
• Each server has 1 IPv4-address, 1 IPv6-address.
• Domain provider's "Use your own Nameserver" is pointed to 3
hostnames in 3 nameservers : n1.example.com ( 192.10.2.11 ,
2001:db8:1::1 ) , n2.example.com ( 198.51.100.12 ,
2001:db8:2::2 ) , n3.example.com ( 203.0.113.13 ,
2001:db8:3::3 ) IP-addresses.
• Each IP-adrs has it's RDNS setup done, to correspond & match
with nameserver's hostname.
• Using Debian GNU/Linux 12 (bookworm) OS in each server.
( Server operator can use any other OS, its their choice/
preference. ) ( By the way, Debian GNU/Linux is base of Ubuntu
Linux, kind of similar to: RedHat Enterprise GNU/Linux is base
of Fedora Linux. )
• Using ISC BIND9 (9.18.0 , specifically now : 9.18.28) DNS
server software, in each server. ( Server operator can use any
other DNS server, its their choice/preference. )
ABOUT FILE/DIRECTORY REPLICATION:
• For directories & files replication/sync purpose, using
Gluster software (1 <https://en.wikipedia.org/wiki/Gluster>,2
<https:// docs.gluster.org/en/latest/>,3 <https://
serverfault.com/ a/1165339/217110>,4 <https://
www.howtoforge.com/how-to-install- glusterfs-on-debian-12/>).
( There are many other choices for server operators:Multi-
Master Replicaiton <https:// en.wikipedia.org/wiki/Multi-
master_replication>,List <https:// en.wikipedia.org/wiki/
List_of_cluster_management_software>), its their own choice
what suits best/works for their need/purpose.
• When any file/directory changes ( i.e: in "n1" server ) ,
then the replication/sync software that is installed/
monitoring , will nearly immediately or within few seconds,
begin to make same changes to same file/dir in server-
operator's other servers ( n2 , n3 ), that are member of
replication/sync volume/ directory. These replication software
uses time-server to have accurate time. Whichever edit/
creation/deletion/modification is done last, that takes
priority & duplicated/replicated/synced.
SHARED/COMMON STORAGE/VOLUME/DIRECTORY:
• I created a large file ("data-s1.img"), ~ 300 MB in size,
inside root-partition , at "/storage/s1/data-s1.img" .
Formatted with XFS filesystem creation/make tools . Attached
large-file into a loop block device . Mounted it in "/data/s1"
directory . Created a systemd service "mount-storage.service"
in Debian to do previous steps one after another, so-that it
can succeed in mounting during boot , (as "/etc/fstab" was not
suitable for this purpose) . Others can create/use a 2nd
partition in same storage drive (i.e: "/dev/ sda2") or add
another storage drive (i.e: "/ dev/sdb") in server . Others can
use a script (or "/etc/fstab") during boot to mount, etc.
• after above steps, replication software (Gluster) was used to
create replication volume "v1" inside the storage-mount-point
("/ data/s1") , so it became "/data/s1/v1" . i configured
gluster to enable SSL/TLS based secure connection for
replication process. Gluster also needs user to mount the
volume as "glusterfs" type mount-point to monitor data r/w &
replicate, & its done in : "/ mnt/ vol/v1" mount-point of
volume "v1" . Followed stepshere <https:// serverfault.com/
a/1165339/217110>(& changed file/dir names).
• the files+dirs under "/mnt/vol/v1/" is replicated/synced in
each server, available/accessible in each server, in same
location, has exact same contents.
• Created "/mnt/vol/v1/etc/bind" directory for BIND aka named
aka DNS server aka nameserver software usage. Applied : chgrp
bind / mnt/vol/v1/etc/bind
• Moved the "zones" dir+files from "/etc/bind", from "n1"
server into the "/mnt/vol/v1/etc/bind/n1/" directory, & done
similar for "n2" & "n3" servers . Moved the "keys" dir+files
from "/etc/ bind", from "n1" into the "/mnt/vol/v1/etc/bind/n1"
directory, & done similar for "n2" & "n3".
• so, "/mnt/vol/v1/etc/bind/keys" & "/mnt/vol/v1/etc/bind/
zones" folders/directories are COMMON for all servers: "n1",
"n2", "n3".
• "n1" using "/mnt/vol/v1/etc/bind/n1/keys" dir & “/mnt/vol/v1/
etc/ bind/n1/zones” dir, so i created symlink inside to
point+goto the replicated/synced mount-point, command : ln -s
"/ mnt/vol/v1/etc/ bind/n1/keys" "/etc/bind/keys" ; ln -s "/
mnt/vol/ v1/etc/bind/n1/ zones" "/etc/bind/zones" ;
• "n2" using "/mnt/vol/v1/etc/bind/n2/keys" dir & “/mnt/vol/v1/
etc/ bind/n2/zones” dir . & created symlinks as shown above.
• "n3" using "/mnt/vol/v1/etc/bind/n3/keys" dir & "/mnt/vol/v1/
etc/ bind/n3/zones" dir. & created symlinks as shown above.
• Added permissions in AppArmor "/etc/apparmor.d/local/
usr.sbin.named" file, for BIND/named, so that BIND/named can
use "v1" replicated-volume "/mnt/vol/v1" BIND directories : /
mnt/vol/ v1/etc/bind , /mnt/vol/v1/etc/bind/zones , /mnt/vol/
v1/etc/bind/ keys , /mnt/vol/v1/etc/bind/n1/zones , /mnt/vol/
v1/etc/bind/n1/ keys in n1 server ( and i have done similar for
n2 & n3 ) . Then applied changes with command :
apparmor_parser -r /etc/ apparmor.d/ usr.sbin.named
• Also applied or re-checked if the ownership-&-permission
(O&P) convention used+recommended by BIND/named for directories
& files, are applied/done on the dirs+files inside the "/mnt/
vol/ v1/etc/ bind, etc.
DNSSEC & DNS:
• Each nameserver has BIND DNS server named daemon software .
Each BIND need to be Authoritative for my domains
("example.com" , "example2.com", etc) & response back to any
DNS servers/clients query for my domains & for my subnet's
reverse- zone . And each BIND DNS server also need to serve/
perform as a recursive DNS resolver for any queries made into
"localhost" ( 127.0.0.1 , ::1 ).
• Followed various related steps as-much-possible from "DNSSEC
Howto for BIND 9.9+ <https://wiki.debian.org/
DNSSEC%20Howto%20for%20BIND%209%2E9%2B>” , ISCBIND docs for
9.18.28 <https://downloads.isc.org/isc/bind9/9.18.28/doc/arm/
html/> ( that i'm using now while writing this msg ) , etc .
Debian OS will update BIND in distro’s repo, & then my/op's
servers will be updated to that version . For next/latest
version, goto ISC BIND download pagehere <https://www.isc.org/
download/>, search for "PDF" word, select/click on the HTML /
PDF doc version that you want to read/follow.
• As each nameserver has different IP-addresses, so i've kept
the "named.conf", "named.conf.local", "named.conf.options"
files in the /etc/bind of server itself, for faster loading .
• The "named.conf" file has BIND ACLs, and include directives .
This file has same content in each server . Has “ acl
LocalHostR { 127.0.0.1; ::1; } ; LocalHostRv4 { 127.0.0.1; } ;
LocalHostRv6 { ::1; } ; acl BlockedNets { 0.0.0.0/8 ;
192.0.2.0/24 ; 224.0.0.0/3 ; 10.0.0.0/8 ; 172.16.0.0/12 ;
192.168.0.0/16 ; } ; acl N1-IPv4 { 192.10.2.11; } ; acl N1-IPv6
{2001:db8:1::11; }; ” , etc, (remove quote symbols) . ( i added
more IPv4 & IPv6 in BlockedNetslater ).
• The "named.conf.local" file has forward zones & reverse zones
declarations : each zone has "type primary;" directive/option
set , each zone has "file" directive with file located in
replicated volume location . Each local zones & each local
reverse-zone for IP-address) have "allow-query
{ LocalHostR; };" . My each domain's zone (i.e: "zone
"example.com" { ... };") declarations, & reverse- zone for my
own subnet, has "allow-query { any; };" .
•My domain “example.com”zone declaration in “named.local.conf”
file : “ zone "n1.example.com" { type master ; file "/mnt/vol/
v1/ etc/bind/zones/db.example.com" ; allow-query { any; } ;
serial- update-method unixtime ; key-directory "/mnt/vol/v1/
etc/bind/n1/ keys" ; dnssec-policy opPolicy ; inline-signing
yes ; notify no ; }; ” (remove quote symbols) . We allowed
query from anyone . By the way, i also have a sub-domain zone
declared in “named.local.conf” file as zone : “ zone
"ns.example.com" { … }; ” , nearly same as “example.com”.
• The "named.conf.options" file has “dnssec-policy
"opPolicy" { ... };” , "options { ... };" , "logging { ... };"
sections/declarations . Logging uses the server's "/var/log/
named" dir ( into "Update_Debug.log" , "Security.log" ,
"BIND.log" files ).
• The “options { … };” in “named.conf.options” file : “
options { recursion yes ; allow-recursion { LocalHostR; } ;
allow-query- cache { LocalHostR; } ;allow-query-cache-on
{ LocalHostR; } ; allow-query { LocalHostR; } ; allow-
recursion-on { LocalHostR; } ; empty-zones-enable yes ;
blackhole { BlockedNets; } ; allow- transfer { none; } ; auth-
nxdomain no ; listen-on { N1-IPv4; LocalHostRv4; } ; listen-on-
v6 { N1-IPv6; LocalHostRv6; }; rate- limit { ... }; };
” (remove quote symbols). We restricted recursion by allowing
only LocalHostR, not external, not BlockedNets.
• DNS server, for non-dnssec part of DNS related queries &
responses for domain(s), IPv4-adrs, IPv6-adrs, etc (forward
lookup/ resolve , subnet IP-adrs reverse resolve/lookup )
WORKING FINE , from n1 & n2 & n3 . Authoritative mode is
working for my domains . And "localhost" inside server can also
provide website- name/domain- name To IP-address resolve
response, to the the local software/ daemons/clients that are
running inside server.
• To ENABLE DNSSEC : i add "dnssec-validation auto;" inside
"options" inside "named.conf.options" file , i add "key-
directory "/mnt/vol/v1/etc/bind/n1/keys" ; inline-signing yes;"
in "zone "example.com" { ... };" in "named.conf.local" file,
etc , ( changed the "n1" into "n2" for "n2" server, & similarly
in n3. )
• For "dnssec-policy" directive about KSK & ZSK cert+key
creation, usage period, signing, validity, verification, etc ,
i'm using shorter TTL period, etc , so-that dnssec/dns config
lines can be changed+applied quickly during DNSSEC setup
phase : dnssec-policy "opPolicy" { ksk lifetime P88D algorithm
RSASHA256 ; zsk lifetime 22D algorithm RSASHA256 ; dnskey-ttl
PT10M ; publish-safety P2D ; retire-safety P3D ; purge-keys
P3D ; signatures-refresh P5D ; signatures-validity
P10D ; signatures-validity-dnskey P11D ; max-zone-ttl
PT30M ; zone-propagation-delay PT1H ; parent- ds-ttl
PT1H ; parent-propagation-delay PT1H ; nsec3param iterations 0
optout yes salt-length 0 ; };
Now finally into the
QUESTIONS:
• How can i create 1 KSK key ( in "n1" server first ), for a
(single) domain ("example.com") and get the DS code from KSK
key and add that 1 DS in domain-provider ( to send to the
TLD ), & configure other 2 nameservers ( n2 , n3 ) to use that
1 DS record from TLD & use that same/common 1 KSK file from the
synced/ replicated directory, while "type master;" is set for
my domain/ zone in each nameserver ?
( Using 3 KSK & their 3 DS in domain-provider did not work,
created error indicators in DNSViz & in "DNSSEC-
Annalyzer.VerisignLabs” test sites, when each nameserver used
separate directories, files, etc.
• if i specify same/COMMON (replicated) dir "/mnt/vol/v1/etc/
bind/ keys" & "/mnt/vol/v1/etc/bind/zones/zonename" inside 3
nameserver's “named.conf.local” file domains/zones , Can BIND
DNS server add their own RRSIG response/lines for DNS records
(into same zone file) without removing earlier or other
nameserver's RRSIG lines (unless related ZSK key/period expired) ?
• How do i disable/clean/move/backup earlier DNSSEC keys/
usages, & setup DNSSEC completely as anew . ( Our zone TTLs are
short 7m to 1h , (during setup/test phase) , So within 7m to an
hour, all older-records should be discarded from caches. )
Thanks in advance for helpful responses.
Erik.
Erik T Ashfolk.
--
Visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe from
this list
ISC funds the development of this software with paid support subscriptions.
Contact us at https://www.isc.org/contact/ for more information.
bind-users mailing list
bind-users@lists.isc.org
https://lists.isc.org/mailman/listinfo/bind-users