Projet

Général

Profil

ConfigWifiEvenement » Historique » Version 26

Matthieu Herrb, 05/06/2024 21:42
isc-dhcp-server default

1 1 Matthieu Herrb
h1. Configuration d'un routeur pour un événement
2 1 Matthieu Herrb
3 13 Matthieu Herrb
{{>toc}}
4 13 Matthieu Herrb
5 1 Matthieu Herrb
Exemple du THSF 2023
6 1 Matthieu Herrb
7 1 Matthieu Herrb
h2. Matériel 
8 1 Matthieu Herrb
9 1 Matthieu Herrb
# 1 PC avec 2 interfaces réseau (ou alors faire avec des vlans sur un switch)
10 1 Matthieu Herrb
# 2 Bornes Unifi UAC-M-Pro de Tetaneutral.net
11 1 Matthieu Herrb
# 1 switch PoE (802.11af)
12 1 Matthieu Herrb
# câbles RJ45
13 1 Matthieu Herrb
# multiprise
14 1 Matthieu Herrb
15 1 Matthieu Herrb
h2. Logiciel
16 1 Matthieu Herrb
17 24 Matthieu Herrb
# Ubuntu server 20.04 sur le PC
18 17 Matthieu Herrb
# Paquets : @openssh-server emacs-nox  nftables isc-dhcp-server unbound wireguard resolvconf radvd borgbackup iftop@# Unifi Controler 7 
19 17 Matthieu Herrb
# Unifi Controller
20 1 Matthieu Herrb
21 1 Matthieu Herrb
h2. Configuration
22 1 Matthieu Herrb
23 1 Matthieu Herrb
PC : 2 interfaces : 
24 1 Matthieu Herrb
25 1 Matthieu Herrb
* lan : @enp0s31f6@
26 1 Matthieu Herrb
* wan : @enp2s0@
27 1 Matthieu Herrb
28 1 Matthieu Herrb
On fera un VPN wiregard vers tetaneutral sur l'interface wan, et sur le LAN on met un serveur DHCP pour IPv4, et un serveur radvd pour autoconf IPv6, ainsi que unbound pour le DNS et une config nftables pour faire le NAT vers l'IPv4 unique de la config wireguard.
29 1 Matthieu Herrb
30 1 Matthieu Herrb
A noter que l'IP wireguard se retrouve codée en dur à plusieurs endroits, pas cool mais bon.
31 1 Matthieu Herrb
32 1 Matthieu Herrb
Dans l'exemple THSF 2023:
33 1 Matthieu Herrb
34 6 Matthieu Herrb
* IPv4 : 185.119.170.12 et on prend 10.23.0.0/16 pour le LAN
35 1 Matthieu Herrb
* IPv6 : 2a03:7220:8087:c00::/56 ; on prend 2a03:7220:8087:c01::/64 pour le LAN
36 1 Matthieu Herrb
37 1 Matthieu Herrb
h3. Config réseau : netplan
38 1 Matthieu Herrb
39 1 Matthieu Herrb
* @/etc/netplan/00-installer-config.yaml@ :
40 1 Matthieu Herrb
<pre>
41 1 Matthieu Herrb
network:
42 1 Matthieu Herrb
  ethernets:
43 1 Matthieu Herrb
    enp0s31f6:
44 1 Matthieu Herrb
      addresses:
45 1 Matthieu Herrb
      - 10.23.0.1/16
46 1 Matthieu Herrb
      - 2a03:7220:8087:c01::1/64
47 1 Matthieu Herrb
      nameservers:
48 1 Matthieu Herrb
        addresses: []
49 1 Matthieu Herrb
        search: []
50 1 Matthieu Herrb
    enp2s0:
51 1 Matthieu Herrb
      dhcp4: true
52 1 Matthieu Herrb
  version: 2
53 1 Matthieu Herrb
</pre>
54 1 Matthieu Herrb
55 1 Matthieu Herrb
h3. Config réseau : wireguard
56 1 Matthieu Herrb
57 16 Matthieu Herrb
On alloue d'abord un service wireguard dans le SI (ici avec l'IP 185.119.170.12) Cf la page [[VPN]] et le wiki des bénévoles pour la config coté SI et serveurs. 
58 16 Matthieu Herrb
 
59 14 Matthieu Herrb
* Générer une clé privée
60 14 Matthieu Herrb
<pre>
61 14 Matthieu Herrb
# umask 077
62 25 Matthieu Herrb
# wg genkey > /etc/wireguard/private
63 15 Matthieu Herrb
</pre>
64 14 Matthieu Herrb
65 14 Matthieu Herrb
* Voir la clé publique pour la mettre dans le SI :
66 14 Matthieu Herrb
<pre>
67 14 Matthieu Herrb
# wg pubkey < /etc/wireguard/private
68 14 Matthieu Herrb
</pre>
69 1 Matthieu Herrb
70 1 Matthieu Herrb
* @/etc/wireguard/wg0.conf@ :
71 1 Matthieu Herrb
<pre>
72 1 Matthieu Herrb
[Interface]
73 1 Matthieu Herrb
Address = 185.119.170.12/32,2a03:7220:8087:c00::/56
74 1 Matthieu Herrb
DNS = 91.224.148.10,91.224.149.254
75 1 Matthieu Herrb
PrivateKey = <mettre ici la clé privée>
76 1 Matthieu Herrb
77 1 Matthieu Herrb
[Peer]
78 1 Matthieu Herrb
Publickey = DsIeOCRs/5uYdi8rLiBzRNmN4zUzKCQRqY3Sbl8NS0A=
79 1 Matthieu Herrb
AllowedIPs = 0.0.0.0/0,::/0
80 1 Matthieu Herrb
EndPoint = 89.234.156.116:51820
81 1 Matthieu Herrb
PersistentKeepalive = 25
82 1 Matthieu Herrb
</pre>
83 2 Matthieu Herrb
84 2 Matthieu Herrb
* Activier le service : 
85 2 Matthieu Herrb
<pre>
86 2 Matthieu Herrb
# systemctl enable wg-quick@wg0.service
87 2 Matthieu Herrb
# systemctl start wg-quick@wg0.service
88 2 Matthieu Herrb
</pre>
89 2 Matthieu Herrb
90 19 Matthieu Herrb
h3. NAT : nftables
91 3 Matthieu Herrb
92 3 Matthieu Herrb
On fait du NAT sur l'interface wan et sur wireguard + MSS Clamping pour TCP au MTU de l'interface wireguard. 
93 3 Matthieu Herrb
94 11 Matthieu Herrb
* @/etc/nftables.conf@ :
95 3 Matthieu Herrb
<pre>
96 3 Matthieu Herrb
#!/usr/sbin/nft -f
97 3 Matthieu Herrb
98 3 Matthieu Herrb
table inet filter {
99 3 Matthieu Herrb
        chain input {
100 3 Matthieu Herrb
                        type filter hook input priority filter; policy accept;
101 3 Matthieu Herrb
        }
102 3 Matthieu Herrb
103 3 Matthieu Herrb
        chain forward {
104 3 Matthieu Herrb
                        type filter hook forward priority filter; policy accept;
105 3 Matthieu Herrb
                                        tcp flags syn tcp option maxseg size set rt mtu
106 3 Matthieu Herrb
        }
107 3 Matthieu Herrb
108 3 Matthieu Herrb
        chain output {
109 3 Matthieu Herrb
                        type filter hook output priority filter; policy accept;
110 3 Matthieu Herrb
        }
111 3 Matthieu Herrb
}
112 3 Matthieu Herrb
113 3 Matthieu Herrb
table ip nat {
114 3 Matthieu Herrb
      chain prerouting {
115 3 Matthieu Herrb
           type nat hook prerouting priority dstnat; policy accept;
116 3 Matthieu Herrb
      }
117 3 Matthieu Herrb
118 3 Matthieu Herrb
      chain postrouting {
119 3 Matthieu Herrb
           type nat hook postrouting priority srcnat; policy accept;
120 3 Matthieu Herrb
           oifname "wg0" masquerade
121 3 Matthieu Herrb
           oifname "enp2s0" masquerade
122 3 Matthieu Herrb
      }
123 3 Matthieu Herrb
}
124 3 Matthieu Herrb
</pre>
125 3 Matthieu Herrb
126 10 Matthieu Herrb
* Activation :
127 10 Matthieu Herrb
<pre>
128 10 Matthieu Herrb
# systemctl enable nftables.service
129 10 Matthieu Herrb
# nft -f /etc/nftables.conf
130 10 Matthieu Herrb
</pre>
131 10 Matthieu Herrb
132 23 Matthieu Herrb
h3. Serveur DHCP IPv4 : isc-dhcpd
133 4 Matthieu Herrb
134 5 Matthieu Herrb
Remarque : baux de 24h pour faciliter l'exploitation des logs si besoin. nécessite un /16 pour le LAN pour ne pas avoir besoin de réutiliser des IPs.
135 5 Matthieu Herrb
136 26 Matthieu Herrb
* @/etc/default/isc-dhcp-server@ :
137 26 Matthieu Herrb
<pre>
138 26 Matthieu Herrb
INTERFACESv4="enp1s16"
139 26 Matthieu Herrb
# INTERFACESv6=""
140 26 Matthieu Herrb
</pre>
141 26 Matthieu Herrb
142 4 Matthieu Herrb
* @/etc/dhcp/dhcpd.conf@ :
143 4 Matthieu Herrb
<pre>
144 4 Matthieu Herrb
option domain-name "tetaneutral.net";
145 4 Matthieu Herrb
option domain-name-servers 10.23.0.1;
146 4 Matthieu Herrb
147 4 Matthieu Herrb
default-lease-time 86400;
148 4 Matthieu Herrb
max-lease-time 172800;
149 4 Matthieu Herrb
150 4 Matthieu Herrb
ddns-update-style none;
151 4 Matthieu Herrb
authoritative;
152 4 Matthieu Herrb
log-facility local7;
153 4 Matthieu Herrb
154 4 Matthieu Herrb
subnet 10.23.0.0 netmask 255.255.0.0 {
155 4 Matthieu Herrb
     range 10.23.1.0 10.23.255.254;
156 4 Matthieu Herrb
     option routers 10.23.0.1;
157 4 Matthieu Herrb
}
158 4 Matthieu Herrb
</pre>
159 4 Matthieu Herrb
160 4 Matthieu Herrb
* activation :
161 4 Matthieu Herrb
<pre>
162 4 Matthieu Herrb
# systemctl restart isc-dhcp-server
163 4 Matthieu Herrb
</pre>
164 2 Matthieu Herrb
165 22 Matthieu Herrb
h3. Serveur autoconfiguration IPv6 : radvd
166 2 Matthieu Herrb
167 7 Matthieu Herrb
Diffuse les adresses de serveurs DNS local (unbound) + un recursif ttnn en secours.
168 7 Matthieu Herrb
169 7 Matthieu Herrb
* `/etc/radvd.conf`
170 7 Matthieu Herrb
<pre>
171 7 Matthieu Herrb
interface enp0s31f6
172 7 Matthieu Herrb
{
173 7 Matthieu Herrb
    AdvSendAdvert on;
174 7 Matthieu Herrb
    prefix 2a03:7220:8087:c01::/64
175 7 Matthieu Herrb
    {
176 7 Matthieu Herrb
        AdvOnLink on;
177 7 Matthieu Herrb
        AdvAutonomous on;
178 7 Matthieu Herrb
    };
179 7 Matthieu Herrb
    RDNSS 2a03:7220:8087:c01::1 2a03:7220:8081:fe00::1 {
180 7 Matthieu Herrb
        AdvRDNSSLifetime 1200;
181 7 Matthieu Herrb
        FlushRDNSS on;
182 7 Matthieu Herrb
    };
183 7 Matthieu Herrb
};
184 7 Matthieu Herrb
</pre>
185 7 Matthieu Herrb
186 9 Matthieu Herrb
* Activation:
187 9 Matthieu Herrb
<pre>
188 9 Matthieu Herrb
# systemctl restart radvd.service
189 9 Matthieu Herrb
</pre>
190 9 Matthieu Herrb
191 20 Matthieu Herrb
h3. Résolveur DNS : Unbound
192 8 Matthieu Herrb
193 8 Matthieu Herrb
Autorise les requêtes depuis le LAN et bloque le reste.
194 8 Matthieu Herrb
195 8 Matthieu Herrb
* @/etc/unbound/unbound.conf.d/server.conf@ :
196 8 Matthieu Herrb
<pre>
197 8 Matthieu Herrb
server:
198 8 Matthieu Herrb
    interface: 10.23.0.1
199 8 Matthieu Herrb
    interface: ::
200 8 Matthieu Herrb
    interface: 127.0.0.1
201 8 Matthieu Herrb
202 8 Matthieu Herrb
    access-control: 0.0.0.0/0 refuse
203 8 Matthieu Herrb
    access-control: 10.23.0.0/16 allow
204 8 Matthieu Herrb
    access-control: ::0/0 refuse
205 8 Matthieu Herrb
    access-control: fe80::/16 allow
206 8 Matthieu Herrb
    access-control: 2a03:7220:8087:c01::/64 allow
207 8 Matthieu Herrb
208 8 Matthieu Herrb
    hide-identity: yes
209 8 Matthieu Herrb
    hide-version: yes
210 8 Matthieu Herrb
211 8 Matthieu Herrb
    aggressive-nsec: yes
212 8 Matthieu Herrb
    qname-minimisation: yes
213 8 Matthieu Herrb
</pre>
214 8 Matthieu Herrb
215 8 Matthieu Herrb
* Activation
216 8 Matthieu Herrb
<pre>
217 8 Matthieu Herrb
# systemctl restart unbound.service
218 8 Matthieu Herrb
</pre>
219 12 Matthieu Herrb
220 21 Matthieu Herrb
h2. Controleur des bornes Wifi : Unifi
221 12 Matthieu Herrb
222 12 Matthieu Herrb
Téléchargement : https://ui.com/download/unifi/default/default/unifi-network-application-7383-unifi-os-consoles-and-debianubuntu
223 12 Matthieu Herrb
224 12 Matthieu Herrb
(Downloads -> unifi -> software)
225 12 Matthieu Herrb
226 12 Matthieu Herrb
h3. Installer le controleur
227 12 Matthieu Herrb
228 12 Matthieu Herrb
* Définir un compte admin + mot de passe
229 12 Matthieu Herrb
* Configurer le reseau 'default' avec les adresses IPv4 et IPv6 du lan
230 12 Matthieu Herrb
* Définir un (ou plusieurs) réseaux wifi SSID + mot de passe WPA2 
231 12 Matthieu Herrb
232 12 Matthieu Herrb
h3. Adopter les bornes 
233 12 Matthieu Herrb
234 12 Matthieu Herrb
# connecter une borne au switch PoE du LAN
235 12 Matthieu Herrb
# faire un reset de la borne (connecter en maintenant le bouton RESET appuyé jusqu'à flash bleu/blanc)
236 1 Matthieu Herrb
# Attendre config DHCP de la borne, puis déconnecter/reconnecter -
237 14 Matthieu Herrb
# Adopter la borne dans l'interface.