Views - bind
Dans le cas d'une infrastructure multi-sites, il est parfois intéressant d'utiliser les views des NS.
Pourquoi ?
Pour un même record DNS, il est possible d'avoir 2 ou plusieurs zones avec des pointages IPs différents, appelés en fonction de l'ip source.
Exemple
Ici, nous avons :
-
le premier site en production avec ces subnets :
- 10.1.0.0/24
- 10.1.1.0/24
- 10.1.2.0/24
-
le second de secours avec ces subnets :
- 10.2.0.0/24
- 10.2.1.0/24
- 10.2.2.0/24
Les utilisateurs, via leur VPN SSL se connectent depuis des subnets différents selon le site :
- pour la production : 192.168.0.0/24
- pour le secours : 192.168.1.0/24
Le point commun entre les 2 ?
Nous avons une contrainte : les pointages DNS doivent être identiques ! Peu importe l'origine de la demande (production ou secours)
Pour cela, bind permet de le faire via ses views (vues).
Mise en application
Nous avons l'environnement suivant :
- 1 ns master sur la production (10.1.3.10 - ns1.dyndata.fr)
- 1 ns slave sur la production (10.1.3.2 - n2.dyndata.fr)
- 2 ns slave sur le secours (10.10.3.10 et 10.10.3.20 - ns3.dyndata.fr et ns4.dyndata.fr)
Configuration du master
/etc/bind/named.conf :
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
/etc/bind/named.conf.local :
view "infra_prod" {
match-clients {192.168.0.0/24; }; # le subnet vpn ssl production
zone "dyndata" {
type secondary;
masters { 10.1.3.10; }; # le ns master
file "/etc/bind/zones/db.dyndataprod";
};
view "infra_secours" {
match-clients {192.168.1.0/24; }; # le subnet vpn ssl secours
zone "dyndata" {
type secondary;
masters { 10.1.3.10; }; # le ns master
file "/etc/bind/zones/db.dyndatasecours";
};
La zone /etc/bind/zones/db.dyndataprod :
$TTL 604800
@ IN SOA dyndata. admin.dyndata.fr. (
1702464222
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; name servers - NS records
IN NS ns1.dyndata.fr.
IN NS ns2.dyndata.fr.
IN NS ns3.dyndata.fr.
IN NS ns4.dyndata.fr.
; name servers - A records
ns1.dyndata.fr. IN A 10.1.3.10
ns2.dyndata.fr. IN A 10.1.3.20
ns3.dyndata.fr. IN A 10.10.3.10
ns4.dyndata.fr. IN A 10.10.3.20
smtp.dyndata.fr. IN A 10.1.0.10
web.dyndata.fr IN A 10.1.1.10
mysql.dyndata.fr IN A 10.1.2.10
La zone /etc/bind/zones/db.dyndatasecours :
$TTL 604800
@ IN SOA dyndata. admin.dyndata.fr. (
1702464222
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; name servers - NS records
IN NS ns1.dyndata.fr.
IN NS ns2.dyndata.fr.
IN NS ns3.dyndata.fr.
IN NS ns4.dyndata.fr.
; name servers - A records
ns1.dyndata.fr. IN A 10.1.3.10
ns2.dyndata.fr. IN A 10.1.3.20
ns3.dyndata.fr. IN A 10.10.3.10
ns4.dyndata.fr. IN A 10.10.3.20
smtp.dyndata.fr. IN A 10.2.0.10
web.dyndata.fr IN A 10.2.1.10
mysql.dyndata.fr IN A 10.2.2.10
La configuration sera synchronisée sur les slaves, si le bind est correctement configuré.
Conséquence
Si j'ai l'IP 192.168.0.10 et que je réalise une résolution DNS :
# host web.dyndata.fr
10.1.1.10
Si j'ai l'IP 192.168.1.10 et que je réalise une résolution DNS :
# host web.dyndata.fr
10.2.1.10
J'ai un même record (web.dyndata.fr) qui pointe sur 2 IPs, bind me répond en fonction de ma propre ip source. Nous avons pris l'exemple d'une ip source du vpn SSL d'un utilisateur, mais cela s'applique aussi pour les services sur l'infrastructure. Il suffit d'adapter le "match-clients".