Reverse simple
Il peut arriver, pour une raison X ou Y, que vous ayez envie de servir des reverses DNS sur une grande plage d’adresses IP. Par exemple, admettons que votre FAI vous route tout un bloc, vous n’allez pas entrer chaque reverse pour chaque machine qui reçoit une IP.
knot a un module nommé mod-synth-record qui permet cela. Son utilisation est
relativement simple. On commence par définir deux zones basiques. Une pour
servir les PTR, et l’autre pour servir les A/AAAA associés. En effet, un
reverse doit marcher dans les deux sens.
Zone de résolution directe :
Zone de résolution inverse :
@ 864000 IN SOA tregon-grifon.swordarmor.fr. hostmaster.swordarmor.fr. (
2 3600 900 1209600 43200 )
864000 IN NS tregon-grifon.swordarmor.fr.
IN AAAA 2a00:5884:8316::1
A 89.234.186.16
Ensuite, nous expliquons à knot comment remplir ces deux zones
automatiquement :
@ 864000 IN SOA tregon-grifon.swordarmor.fr. hostmaster.swordarmor.fr. (
2 3600 900 1209600 43200 )
864000 IN NS tregon-grifon.swordarmor.fr.
Puis nous précisons à knot qu’il faut utiliser ces modules pour les deux
zones :
mod-synth-record:
- id: tregon-grifon
type: forward
prefix: ip6-
ttl: 400
network: 2a00:5884:8316::/48
mod-synth-record:
- id: tregon-grifon-reverse
type: reverse
prefix: ip6-
origin: tregon-grifon.swordarmor.fr
ttl: 400
network: 2a00:5884:8316::/48
Notre serveur DNS est maintenant en capacité de répondre au A et au PTR :
- domain: tregon-grifon.swordarmor.fr
file: tregon-grifon.swordarmor.fr.zone # Must exist
module: mod-synth-record/tregon-grifon
- domain: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa
file: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa.zone # Must exist
module: mod-synth-record/tregon-grifon-reverse
alarig@pikachu ~ % dig +short -x 2a00:5884:8316::1234 @tregon-grifon.swordarmor.fr
ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr.
alarig@pikachu ~ % dig +short -t AAAA ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. @tregon-grifon.swordarmor.fr
2a00:5884:8316::1234
Et nous pouvons même définir des reverses personnalisés en les mettant dans
le fichier de zone.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR tregon-grifon.swordarmor.fr.
6.2.4.c.f.6.5.5.d.7.4.d.0.4.d.f.3.5.6.2 IN PTR pika-tregon.swordarmor.fr.
alarig@pikachu ~ % dig +short -x 2a00:5884:8316::1 @tregon-grifon.swordarmor.fr
tregon-grifon.swordarmor.fr.
alarig@pikachu ~ % dig +short -x 2a00:5884:8316:2653:fd40:d47d:556f:c426 @tregon-grifon.swordarmor.fr
pika-tregon.swordarmor.fr.
Mettons maintenant un peu de DNSSEC
(parce que c’est très important d’avoir du DNSSEC sur un reverse)
Arrivé ici, nous pouvons nous dire que knot va, comme à son habitude, gérer
le DNSSEC comme un grand sans rien avoir besoin de toucher.
Alors oui et non. Il va générer les RRSIG pour les RRs que nous avons
entré dans notre zone (c’est à dire ici un A, un NS, un SOA, un AAAA, plus
le NSEC et le DNSKEY générés par knot), mais pas pour tout ce qui est généré
à la volée, nous avons un SERVFAIL au lieu d’une réponse.
alarig@pikachu ~ % dig -t RRSIG tregon-grifon.swordarmor.fr.
; <<>> DiG 9.10.4-P3 <<>> -t RRSIG tregon-grifon.swordarmor.fr.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53081
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;tregon-grifon.swordarmor.fr. IN RRSIG
;; ANSWER SECTION:
tregon-grifon.swordarmor.fr. 3600 IN RRSIG A 13 3 3600 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. YlT/vCMLDyGHwKLoMOdQqENwWTyhphrbBatKhhtvCteTubwBp9FCrf9b /jc0cRM07a321de7kw3cYPD3lfbPYA==
tregon-grifon.swordarmor.fr. 864000 IN RRSIG NS 13 3 864000 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. l6HiWFaqz3Hys7aknEHEG6woKJ9xdYqopxNUTOYmMk94733jMnDiH5bx fDKGPjgyVCkbQWfFsJCr/udwnelSaQ==
tregon-grifon.swordarmor.fr. 864000 IN RRSIG SOA 13 3 864000 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. OUWibAYe8oyRBWgGyPAxG0etUcGQe1ZEZ+1ywZIi1xQvhWMQy/0B+HNH RyQYYdJ9eXqXPP3uQRyXPTtsa+9KKQ==
tregon-grifon.swordarmor.fr. 3600 IN RRSIG AAAA 13 3 3600 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. NIEEeURn0/RH9IqWxGM9W74Gf8UqDh4Bqap0NlZ4XQ+95FpfylAQKxo0 KZUNCDCXCFQ4Rpg/dJH4EhpWw8Pxtw==
tregon-grifon.swordarmor.fr. 43200 IN RRSIG NSEC 13 3 43200 20161208210625 20161124210625 28440 tregon-grifon.swordarmor.fr. 6T2+GjrRU8qU/zGNmY8R9bmkNUFGPJuJQP2qkhakV0GeiyseEWA5yPDE /YIELH04KKAE3yrudo8S6xcaQ6DveQ==
tregon-grifon.swordarmor.fr. 864000 IN RRSIG DNSKEY 13 3 864000 20161208210625 20161124210625 57104 tregon-grifon.swordarmor.fr. F/jepDBqQriHFUSN8mnkiNZ6l3vP5K8ob44yuHkHBupimIo4S6hvuZXD F7AnbF5GtVsZPDdjA4qumkv1HaiTFQ==
;; Query time: 160 msec
;; SERVER: 2a00:5884:8218::1#53(2a00:5884:8218::1)
;; WHEN: Mon Nov 28 11:02:27 CET 2016
;; MSG SIZE rcvd: 794
alarig@pikachu ~ % dig -t RRSIG ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr.
; <<>> DiG 9.10.4-P3 <<>> -t RRSIG ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 27161
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr. IN RRSIG
;; Query time: 457 msec
;; SERVER: 2a00:5884:8218::1#53(2a00:5884:8218::1)
;; WHEN: Mon Nov 28 11:02:33 CET 2016
;; MSG SIZE rcvd: 100
Mais l’équipe de nic.cz a déjà pensé à tout en développant un autre module
qui permet de signer toute une zone à la volée. Il s’agît de
mod-online-sign.
Par contre, ce module n’a pas encore été mis à jour pour supporter la
nouvelle mouture de gestion DNSSEC, il faut toujours utiliser keymgr en mode
de compatibilité (option -l). Il est important de noter que le fichier de
zone référencé dans la configuration ne doit pas comporter de signatures
DNSSEC et que le système de signature classique doit être désactivé.
Nous avons donc une configuration comme ceci :
Et nous générons les clés comme à la bonne époque :
template:
- id: default
storage: "/var/lib/knot"
kasp-db: kasp
mod-online-sign:
- id: default
- domain: tregon-grifon.swordarmor.fr
file: tregon-grifon.swordarmor.fr.zone.nodnssec # Must exist
module: [mod-synth-record/tregon-grifon, mod-online-sign/default]
dnssec-signing: false
Pour finir, nous devons publier le DS dans la zone parente, ainsi que le NS
pour la délégation et le glue record, comme toujours en DNS.
eddy ~ # mkdir /var/lib/knot/kasp
eddy ~ # chown knot: /var/lib/knot/kasp/
eddy ~ # su - knot -s /bin/sh
No directory, logging in with HOME=/
$ cd /var/lib/knot/kasp/
$ keymgr -l init
$ keymgr -l zone add tregon-grifon.swordarmor.fr
$ keymgr -l zone key generate tregon-grifon.swordarmor.fr algorithm ecdsap256sha256 size 256
# je n’ai pas généré de clé pour 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. car
# 4.8.8.5.0.0.a.2.ip6.arpa. n’est pas encore signé
tregon-grifon.swordarmor.fr. 10800 A 89.234.186.16
tregon-grifon.swordarmor.fr. 10800 AAAA 2a00:5884:8316::1
tregon-grifon.swordarmor.fr. 10800 NS tregon-grifon.swordarmor.fr.
tregon-grifon.swordarmor.fr. 10800 DS (22942 13 2 E4E1B6EFF9D473905D0DA9C5C6CF43D9BC38E73D44E9579723748D8CD8AE3C1C)
Et maintenant, si nous demandons un AAAA autogénéré pour cette zone, nous
avons bien le flag ad pour Autentic Data, c’est à dire que la vérification
DNSSEC a fonctionné.
alarig@pikachu ~ % dig -t AAAA ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr.
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35285
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; ANSWER SECTION:
ip6-2a00-5884-8316-2653-fd40-d47d-556f-c427.tregon-grifon.swordarmor.fr. 400 IN AAAA 2a00:5884:8316:2653:fd40:d47d:556f:c427
Redondance
Si vous gérez les reverses d’un range IP un temps soit peu conséquent (on va
dire, un /24 d’un FAI par exemple), il est plus que probable que vous
vouliez un peu de redondance.
Sachez alors qu’il faudra soit utiliser un autre knot, soit utiliser un
autre système de reverse automatique si vous ne voulez pas avoir deux knot
pour cette zone. En effet, les enregistrements étant générés à la volée, il
n’est pas possible de faire un transfert de la zone complète comme nous en
avons l’habitude.
Cependant, il faudra tout de même commencer par avoir une réplication des
zones originales.
Sur le master :
remote:
- id: freebsd
address: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e
acl:
- id: acl_freebsd
address: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e
action: transfer
- domain: tregon-grifon.swordarmor.fr
file: tregon-grifon.swordarmor.fr.zone.nodnssec # Must exist
module: [mod-synth-record/tregon-grifon, mod-online-sign/default]
dnssec-signing: false
notify: freebsd
acl: acl_freebsd
- domain: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa
file: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa.zone.nodnssec # Must exist
module: [mod-synth-record/tregon-grifon-reverse, mod-online-sign/default]
dnssec-signing: false
notify: freebsd
acl: acl_freebsd
Par rapport à la configuration précédente, nous n’avons fait que ajouter une
machine, donner le droit la notifier de la mise à jour de la zone, puis de
l’assigner à nos deux zones.
Sur cette machine (le slave), nous allons donc configurer le knot :
remote:
- id: tregon
address: 2a00:5884:8316::1
acl:
- id: acl_tregon
address: 2a00:5884:8316::1
action: notify
template:
- id: default
storage: "/var/db/knot"
kasp-db: kasp
mod-synth-record:
- id: tregon-grifon
type: forward
prefix: ip6-
ttl: 400
network: 2a00:5884:8316::/48
mod-synth-record:
- id: tregon-grifon-reverse
type: reverse
prefix: ip6-
origin: tregon-grifon.swordarmor.fr
ttl: 400
network: 2a00:5884:8316::/48
mod-online-sign:
- id: default
- domain: tregon-grifon.swordarmor.fr
file: tregon-grifon.swordarmor.fr.zone
master: tregon
acl: acl_tregon
module: [mod-synth-record/tregon-grifon, mod-online-sign/default]
- domain: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa
file: 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa.zone
master: tregon
acl: acl_tregon
module: [mod-synth-record/tregon-grifon-reverse, mod-online-sign/default]
Nous voyons ici qu’il faut également répéter la configuration de
mod-synth-record et de mod-online-sign. En effet, tous les enregistrements
issus de ces modules sont générés à la volée, ils ne sont donc pas à
proprement parler dans la zone. Le daemon knot va les recalculer à chaque
requête, alors que pour une zone classique, il se contente d’aller lire le
fichier.
Aussi, pour que le DNSSEC soit disponible sur les deux serveurs, il faut
avoir une copie de la KSK sur chaque serveur : scp -r
/var/lib/knot/kasp/ root@freebsd.swordarmor.fr:/var/db/knot/
.
Ici j’ai copié tout le dossier car je n’ai pas d’autre clé, mais il est
plus sage de ne copier que les fichiers nécessaires.
Si nous testons, nous voyons que notre nouveau serveur répond bien les
résultats attendus, accompagnés de leur RRSIG :
alarig@pikachu ~ % dig +dnssec -x 2a00:5884:8316:2653:fd40:d47d:556f:c426 @freebsd.swordarmor.fr
; <<>> DiG 9.10.4-P4 <<>> +dnssec -x 2a00:5884:8316:2653:fd40:d47d:556f:c426 @freebsd.swordarmor.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59166
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;6.2.4.c.f.6.5.5.d.7.4.d.0.4.d.f.3.5.6.2.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. IN PTR
;; ANSWER SECTION:
6.2.4.c.f.6.5.5.d.7.4.d.0.4.d.f.3.5.6.2.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 3600 IN PTR pika-tregon.swordarmor.fr.
6.2.4.c.f.6.5.5.d.7.4.d.0.4.d.f.3.5.6.2.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 3600 IN RRSIG PTR 13 34 3600 20170114212255 20170113202255 3655 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 0YE68evOCjovGMoY8X/32mvWjAdEkEod/SjXPMTS5YGUvmH+gvo3R/hP H6yxOtMYygb+ZtXKakIVrIH65kV0GA==
;; Query time: 52 msec
;; SERVER: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e#53(2a01:cb08:898c:fc00:5054:ff:fe0e:b8e)
;; WHEN: Fri Jan 13 21:22:56 CET 2017
;; MSG SIZE rcvd: 268
alarig@pikachu ~ % dig +dnssec -x 2a00:5884:8316::1234 @freebsd.swordarmor.fr
; <<>> DiG 9.10.4-P4 <<>> +dnssec -x 2a00:5884:8316::1234 @freebsd.swordarmor.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13829
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;4.3.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. IN PTR
;; ANSWER SECTION:
4.3.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 400 IN PTR ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr.
4.3.2.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. 400 IN RRSIG PTR 13 34 400 20170114210829 20170113200829 3655 6.1.3.8.4.8.8.5.0.0.a.2.ip6.arpa. QxPtzxT62oilXha9Ns4EyfOtj8fCBqhCCxI0SfKb4Yol61c2Pjum/DcZ fBIiMWdN+7VT6/Q2vs6S8uKjd1THOA==
;; Query time: 55 msec
;; SERVER: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e#53(2a01:cb08:898c:fc00:5054:ff:fe0e:b8e)
;; WHEN: Fri Jan 13 21:08:29 CET 2017
;; MSG SIZE rcvd: 314
alarig@pikachu ~ % dig +dnssec -t AAAA ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. @freebsd.swordarmor.fr
; <<>> DiG 9.10.4-P4 <<>> +dnssec -t AAAA ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. @freebsd.swordarmor.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58686
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 4096
;; QUESTION SECTION:
;ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. IN AAAA
;; ANSWER SECTION:
ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. 400 IN AAAA 2a00:5884:8316::1234
ip6-2a00-5884-8316-0000-0000-0000-0000-1234.tregon-grifon.swordarmor.fr. 400 IN RRSIG AAAA 13 4 400 20170114212107 20170113202107 22942 tregon-grifon.swordarmor.fr. NpU/Q+vC3BzR1iLeqIWEWNlo0MMe+aUxDeVIkCd3Z5wUnwgmAsz9oXaS DjkGEfFvR3Wpbgp/RbjDlPNu7qhxqA==
;; Query time: 43 msec
;; SERVER: 2a01:cb08:898c:fc00:5054:ff:fe0e:b8e#53(2a01:cb08:898c:fc00:5054:ff:fe0e:b8e)
;; WHEN: Fri Jan 13 21:21:08 CET 2017
;; MSG SIZE rcvd: 251