Projet

Général

Profil

Wiki » Historique » Version 15

sacha, 26/12/2022 14:34

1 5 sacha
{{>toc}}
2
3 9 sacha
# DNS récursif Ouvert DoH DoT & haute disponibilité
4 15 sacha
**45.67.81.23 - dns.aquilenet.fr**
5 14 sacha
6 1 sacha
7
Aquilenet propose deux serveurs DNS ouverts cf https://www.aquilenet.fr/services/dns/
8 4 sacha
On a mis aussi un DNS ouvert sur l'IP 45.67.81.23 car facile à retenir, avec l'adresse de dns.aquilenet.fr (voir [http://dns.aquilenet.fr](http://dns.aquilenet.fr)) . Nous en avons profité pour ajouter [DoH](https://fr.wikipedia.org/wiki/DNS_over_HTTPS) et [DoT](https://fr.wikipedia.org/wiki/DNS_over_TLS) et d'avoir cette adresse en IP Virtuelle partagée entre Gaia et Hades.
9
Cette IP virtuelle est portée par Keepalived sur Hades le primaire et Gaia le secondaire. Si le démon Keepalived est arrêté sur Hades, l'ip bascule sur Gaia. Si on redémarre le démon sur Hades, ce dernier reprend l'IP: pratique pour les mises à jour, le service continue à fonctionner.
10 1 sacha
11 7 sacha
Une configuration spécifique pour l'ip de ce vlan a été fait sur les switches et les hyperviseurs, ce qui permet au final à Hades et Gaia d'avoir une seconde interface qui porte l'IP virtuelle, elle n'est pas abordée dans ce document.
12 6 sacha
13 3 sacha
## Configurations communes à Gaia et Hades
14 1 sacha
15 3 sacha
### Apache2
16 6 sacha
17
* /etc/apache2/ports.conf
18
19
Pour que l'ip 45.67.81.23 puisse répondre en http sur le port 80 et que les autres sites fonctionnent en 443 sur l'ip de d'hades/gaia
20
~~~
21
Listen 80
22
NameVirtualHost 185.233.100.2:443
23
NameVirtualHost [2a0c:e300::2]:443
24
<IfModule ssl_module>
25
        Listen 185.233.100.2:443
26
        Listen [2a0c:e300::2]:443
27
</IfModule>
28
29
<IfModule mod_gnutls.c>
30
        Listen 185.233.100.2:443
31
        Listen [2a0c:e300::2]:443
32
</IfModule>
33
~~~
34 1 sacha
35
* /etc/apache2/sites-enabled/dns.aquilenet.fr.conf 
36
~~~
37
<VirtualHost *:80>
38
        ServerAdmin webmaster@aquilenet.fr
39
        ServerName dns.aquilenet.fr
40
        DocumentRoot /srv/www/dns.aquilenet.fr 
41
42
        ErrorLog ${APACHE_LOG_DIR}/dns.aqln.error.log 
43
        LogLevel warn
44
        CustomLog ${APACHE_LOG_DIR}/dns.aqln.access.log combined
45
46
        Alias /.well-known/acme-challenge /srv/letsencrypt/challenges/dns.aquilenet.fr
47
        <Directory /srv/letsencrypt/challenges/dns.aquilenet.fr>
48
            Require all granted
49
        </Directory>
50
        <Directory />
51
                Options FollowSymLinks 
52
                AllowOverride None
53
                Require all granted
54
        </Directory>
55
</VirtualHost>
56
~~~
57
58 3 sacha
### Bind9
59 1 sacha
60
BIND 9.17.10 implémente DoH, au jour de l'installation il n'est disponible que dans les backports bullseye (A changer quand il sera dans main).
61 9 sacha
https://www.isc.org/blogs/bind-implements-doh-2021/
62 1 sacha
63
* /etc/bind/named.conf.options
64
65
 Dans la catégorie "options {"
66
~~~
67
        listen-on-v6 { 2a0c:e300::101; };
68
        listen-on { 185.233.100.101; 45.67.81.23; };
69
        # DOH
70
        listen-on port 443 tls local-tls http default { 45.67.81.23; };
71
        # DoT
72
        listen-on port 853 tls local-tls { 45.67.81.23; };
73
        recursion yes;
74
        dnssec-validation auto;
75
~~~
76
77
~~~
78
# DoH DoT
79
tls local-tls {
80
    key-file "/etc/letsencrypt/live/dns.aquilenet.fr/privkey.pem";
81
    cert-file "/etc/letsencrypt/live/dns.aquilenet.fr/fullchain.pem";
82
    dhparam-file "/etc/bind/dhparam.pem";
83
    protocols { TLSv1.2; TLSv1.3; };
84
    prefer-server-ciphers yes;
85
    session-tickets no;
86
};
87
~~~
88
89 3 sacha
### AppArmor
90 1 sacha
91
*  /etc/apparmor.d/local/usr.sbin.named
92
93
~~~
94
/etc/letsencrypt/** r,
95
~~~
96
appliquer avec: `apparmor_parser -r /etc/apparmor.d/usr.sbin.named`
97 7 sacha
98
### Iptables
99
100
~~~
101
# Web
102
-A INPUT -p tcp --dport 80 -j ACCEPT
103
-A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
104
~~~
105
~~~
106
-A INPUT -d 45.67.81.23 -p tcp -m tcp --dport 53 -j dns_limit
107
-A INPUT -d 45.67.81.23 -p udp -m udp --dport 53 -j dns_limit
108
-A INPUT -d 45.67.81.23 -p tcp -m tcp --dport 443 -j dns_limit
109
-A INPUT -d 45.67.81.23 -p tcp -m tcp --dport 853 -j dns_limit
110
~~~
111 3 sacha
112
## Configurations spécifiques
113
114
### Génération du certificat SSL sur Hades
115
116
~~~
117
certbot --apache --agree-tos --email sysop@aquilenet.fr -d dns.aquilenet.fr
118
chgrp bind /etc/letsencrypt/live/dns.aquilenet.fr/privkey.pem
119
chmod 0640 /etc/letsencrypt/live/dns.aquilenet.fr/privkey.pem
120
openssl dhparam -out /etc/bind/dhparam.pem 4096
121
~~~
122
123
Copie du certificat sur gaia
124
125
* /etc/letsencrypt/renewal-hooks/post/sync-cert.sh
126
~~~
127
#!/bin/bash
128
rsync -aPHSA /etc/letsencrypt/archive/dns.aquilenet.fr gaia:/etc/letsencrypt/archive/
129
~~~
130
131
### Keepalived
132
133
#### Hades Master
134
135
* /etc/keepalived/keepalived.conf
136
137
~~~
138
global_defs {
139
  notification_email {
140
    sysop@aquilenet.fr
141
  }
142
  notification_email_from vrrp-dns@aquilenet.fr.fr
143
  smtp_server localhost
144
  smtp_connect_timeout 30
145
}
146
147
vrrp_instance DNS {
148
  state MASTER 
149
  interface eth0
150
  virtual_router_id 101 
151
  priority 100
152
  advert_int 2
153
  smtp_alert
154
  unicast_src_ip 185.233.100.16 
155
  unicast_peer {
156
    185.233.100.2
157
  }
158
  virtual_ipaddress {
159
    45.67.81.23/32 dev eth1 scope global # VIP
160
  }
161
}
162
~~~
163
164
#### Gaia Slave
165
166
* /etc/keepalived/keepalived.conf
167
168
~~~
169
global_defs {
170
  notification_email {
171
    sysop@aquilenet.fr
172
  }
173
  notification_email_from vrrp-dns@aquilenet.fr.fr
174
  smtp_server localhost
175
  smtp_connect_timeout 30
176
}
177
178
vrrp_instance DNS {
179
  state BACKUP
180
  interface eth0
181
  virtual_router_id 101
182
  priority 50
183
  advert_int 2
184
  smtp_alert
185
  unicast_src_ip 185.233.100.2
186
  unicast_peer {
187
    185.233.100.16
188
  }
189
  virtual_ipaddress {
190
    45.67.81.23/32 dev eth1 scope global # VIP
191
  }
192
}
193
194 1 sacha
~~~
195 4 sacha
196
## Validation
197
198
* test du service
199
~~~
200 1 sacha
dig +short dns.aquilenet.fr @45.67.81.23 
201 13 sacha
45.67.81.23
202
dig +https +short dns.aquilenet.fr @45.67.81.23      
203
45.67.81.23
204
dig +tls +short dns.aquilenet.fr @45.67.81.23      
205 8 sacha
45.67.81.23
206 4 sacha
~~~
207
208
* bascule keepalived
209 8 sacha
210
sur hades: `systemctl stop keepalived`
211 1 sacha
sur gaia: `ip a |grep /32`doit donner "inet 45.67.81.23/32 scope global eth1"
212 12 sacha
http://dns.aquilenet.fr/host permet de savoir quel est le serveur qui porte l'IP virtuelle
213 9 sacha
214
## Indexes de serveurs DNS ouverts:
215
216
https://github.com/curl/curl/wiki/DNS-over-HTTPS#publicly-available-servers <= fait
217 10 sacha
https://diyisp.org/dokuwiki/doku.php?id=technical:dnsresolver <= fait
218
https://diyisp.org/dokuwiki/doku.php?id=technical:dnsresolver <= fait
219 9 sacha
https://dnsprivacy.org/public_resolvers/