Projet

Général

Profil

Wiki » Historique » Version 12

sacha, 26/12/2022 01:33

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