ConfigWifiEvenement » Historique » Version 26
Version 25 (Matthieu Herrb, 05/06/2024 20:37) → Version 26/27 (Matthieu Herrb, 05/06/2024 21:42)
h1. Configuration d'un routeur pour un événement
{{>toc}}
Exemple du THSF 2023
h2. Matériel
# 1 PC avec 2 interfaces réseau (ou alors faire avec des vlans sur un switch)
# 2 Bornes Unifi UAC-M-Pro de Tetaneutral.net
# 1 switch PoE (802.11af)
# câbles RJ45
# multiprise
h2. Logiciel
# Ubuntu server 20.04 sur le PC
# Paquets : @openssh-server emacs-nox nftables isc-dhcp-server unbound wireguard resolvconf radvd borgbackup iftop@# Unifi Controler 7
# Unifi Controller
h2. Configuration
PC : 2 interfaces :
* lan : @enp0s31f6@
* wan : @enp2s0@
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.
A noter que l'IP wireguard se retrouve codée en dur à plusieurs endroits, pas cool mais bon.
Dans l'exemple THSF 2023:
* IPv4 : 185.119.170.12 et on prend 10.23.0.0/16 pour le LAN
* IPv6 : 2a03:7220:8087:c00::/56 ; on prend 2a03:7220:8087:c01::/64 pour le LAN
h3. Config réseau : netplan
* @/etc/netplan/00-installer-config.yaml@ :
<pre>
network:
ethernets:
enp0s31f6:
addresses:
- 10.23.0.1/16
- 2a03:7220:8087:c01::1/64
nameservers:
addresses: []
search: []
enp2s0:
dhcp4: true
version: 2
</pre>
h3. Config réseau : wireguard
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.
* Générer une clé privée
<pre>
# umask 077
# wg genkey > /etc/wireguard/private
</pre>
* Voir la clé publique pour la mettre dans le SI :
<pre>
# wg pubkey < /etc/wireguard/private
</pre>
* @/etc/wireguard/wg0.conf@ :
<pre>
[Interface]
Address = 185.119.170.12/32,2a03:7220:8087:c00::/56
DNS = 91.224.148.10,91.224.149.254
PrivateKey = <mettre ici la clé privée>
[Peer]
Publickey = DsIeOCRs/5uYdi8rLiBzRNmN4zUzKCQRqY3Sbl8NS0A=
AllowedIPs = 0.0.0.0/0,::/0
EndPoint = 89.234.156.116:51820
PersistentKeepalive = 25
</pre>
* Activier le service :
<pre>
# systemctl enable wg-quick@wg0.service
# systemctl start wg-quick@wg0.service
</pre>
h3. NAT : nftables
On fait du NAT sur l'interface wan et sur wireguard + MSS Clamping pour TCP au MTU de l'interface wireguard.
* @/etc/nftables.conf@ :
<pre>
#!/usr/sbin/nft -f
table inet filter {
chain input {
type filter hook input priority filter; policy accept;
}
chain forward {
type filter hook forward priority filter; policy accept;
tcp flags syn tcp option maxseg size set rt mtu
}
chain output {
type filter hook output priority filter; policy accept;
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname "wg0" masquerade
oifname "enp2s0" masquerade
}
}
</pre>
* Activation :
<pre>
# systemctl enable nftables.service
# nft -f /etc/nftables.conf
</pre>
h3. Serveur DHCP IPv4 : isc-dhcpd
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.
* @/etc/default/isc-dhcp-server@ :
<pre>
INTERFACESv4="enp1s16"
# INTERFACESv6=""
</pre>
* @/etc/dhcp/dhcpd.conf@ :
<pre>
option domain-name "tetaneutral.net";
option domain-name-servers 10.23.0.1;
default-lease-time 86400;
max-lease-time 172800;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 10.23.0.0 netmask 255.255.0.0 {
range 10.23.1.0 10.23.255.254;
option routers 10.23.0.1;
}
</pre>
* activation :
<pre>
# systemctl restart isc-dhcp-server
</pre>
h3. Serveur autoconfiguration IPv6 : radvd
Diffuse les adresses de serveurs DNS local (unbound) + un recursif ttnn en secours.
* `/etc/radvd.conf`
<pre>
interface enp0s31f6
{
AdvSendAdvert on;
prefix 2a03:7220:8087:c01::/64
{
AdvOnLink on;
AdvAutonomous on;
};
RDNSS 2a03:7220:8087:c01::1 2a03:7220:8081:fe00::1 {
AdvRDNSSLifetime 1200;
FlushRDNSS on;
};
};
</pre>
* Activation:
<pre>
# systemctl restart radvd.service
</pre>
h3. Résolveur DNS : Unbound
Autorise les requêtes depuis le LAN et bloque le reste.
* @/etc/unbound/unbound.conf.d/server.conf@ :
<pre>
server:
interface: 10.23.0.1
interface: ::
interface: 127.0.0.1
access-control: 0.0.0.0/0 refuse
access-control: 10.23.0.0/16 allow
access-control: ::0/0 refuse
access-control: fe80::/16 allow
access-control: 2a03:7220:8087:c01::/64 allow
hide-identity: yes
hide-version: yes
aggressive-nsec: yes
qname-minimisation: yes
</pre>
* Activation
<pre>
# systemctl restart unbound.service
</pre>
h2. Controleur des bornes Wifi : Unifi
Téléchargement : https://ui.com/download/unifi/default/default/unifi-network-application-7383-unifi-os-consoles-and-debianubuntu
(Downloads -> unifi -> software)
h3. Installer le controleur
* Définir un compte admin + mot de passe
* Configurer le reseau 'default' avec les adresses IPv4 et IPv6 du lan
* Définir un (ou plusieurs) réseaux wifi SSID + mot de passe WPA2
h3. Adopter les bornes
# connecter une borne au switch PoE du LAN
# faire un reset de la borne (connecter en maintenant le bouton RESET appuyé jusqu'à flash bleu/blanc)
# Attendre config DHCP de la borne, puis déconnecter/reconnecter -
# Adopter la borne dans l'interface.
{{>toc}}
Exemple du THSF 2023
h2. Matériel
# 1 PC avec 2 interfaces réseau (ou alors faire avec des vlans sur un switch)
# 2 Bornes Unifi UAC-M-Pro de Tetaneutral.net
# 1 switch PoE (802.11af)
# câbles RJ45
# multiprise
h2. Logiciel
# Ubuntu server 20.04 sur le PC
# Paquets : @openssh-server emacs-nox nftables isc-dhcp-server unbound wireguard resolvconf radvd borgbackup iftop@# Unifi Controler 7
# Unifi Controller
h2. Configuration
PC : 2 interfaces :
* lan : @enp0s31f6@
* wan : @enp2s0@
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.
A noter que l'IP wireguard se retrouve codée en dur à plusieurs endroits, pas cool mais bon.
Dans l'exemple THSF 2023:
* IPv4 : 185.119.170.12 et on prend 10.23.0.0/16 pour le LAN
* IPv6 : 2a03:7220:8087:c00::/56 ; on prend 2a03:7220:8087:c01::/64 pour le LAN
h3. Config réseau : netplan
* @/etc/netplan/00-installer-config.yaml@ :
<pre>
network:
ethernets:
enp0s31f6:
addresses:
- 10.23.0.1/16
- 2a03:7220:8087:c01::1/64
nameservers:
addresses: []
search: []
enp2s0:
dhcp4: true
version: 2
</pre>
h3. Config réseau : wireguard
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.
* Générer une clé privée
<pre>
# umask 077
# wg genkey > /etc/wireguard/private
</pre>
* Voir la clé publique pour la mettre dans le SI :
<pre>
# wg pubkey < /etc/wireguard/private
</pre>
* @/etc/wireguard/wg0.conf@ :
<pre>
[Interface]
Address = 185.119.170.12/32,2a03:7220:8087:c00::/56
DNS = 91.224.148.10,91.224.149.254
PrivateKey = <mettre ici la clé privée>
[Peer]
Publickey = DsIeOCRs/5uYdi8rLiBzRNmN4zUzKCQRqY3Sbl8NS0A=
AllowedIPs = 0.0.0.0/0,::/0
EndPoint = 89.234.156.116:51820
PersistentKeepalive = 25
</pre>
* Activier le service :
<pre>
# systemctl enable wg-quick@wg0.service
# systemctl start wg-quick@wg0.service
</pre>
h3. NAT : nftables
On fait du NAT sur l'interface wan et sur wireguard + MSS Clamping pour TCP au MTU de l'interface wireguard.
* @/etc/nftables.conf@ :
<pre>
#!/usr/sbin/nft -f
table inet filter {
chain input {
type filter hook input priority filter; policy accept;
}
chain forward {
type filter hook forward priority filter; policy accept;
tcp flags syn tcp option maxseg size set rt mtu
}
chain output {
type filter hook output priority filter; policy accept;
}
}
table ip nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname "wg0" masquerade
oifname "enp2s0" masquerade
}
}
</pre>
* Activation :
<pre>
# systemctl enable nftables.service
# nft -f /etc/nftables.conf
</pre>
h3. Serveur DHCP IPv4 : isc-dhcpd
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.
* @/etc/default/isc-dhcp-server@ :
<pre>
INTERFACESv4="enp1s16"
# INTERFACESv6=""
</pre>
* @/etc/dhcp/dhcpd.conf@ :
<pre>
option domain-name "tetaneutral.net";
option domain-name-servers 10.23.0.1;
default-lease-time 86400;
max-lease-time 172800;
ddns-update-style none;
authoritative;
log-facility local7;
subnet 10.23.0.0 netmask 255.255.0.0 {
range 10.23.1.0 10.23.255.254;
option routers 10.23.0.1;
}
</pre>
* activation :
<pre>
# systemctl restart isc-dhcp-server
</pre>
h3. Serveur autoconfiguration IPv6 : radvd
Diffuse les adresses de serveurs DNS local (unbound) + un recursif ttnn en secours.
* `/etc/radvd.conf`
<pre>
interface enp0s31f6
{
AdvSendAdvert on;
prefix 2a03:7220:8087:c01::/64
{
AdvOnLink on;
AdvAutonomous on;
};
RDNSS 2a03:7220:8087:c01::1 2a03:7220:8081:fe00::1 {
AdvRDNSSLifetime 1200;
FlushRDNSS on;
};
};
</pre>
* Activation:
<pre>
# systemctl restart radvd.service
</pre>
h3. Résolveur DNS : Unbound
Autorise les requêtes depuis le LAN et bloque le reste.
* @/etc/unbound/unbound.conf.d/server.conf@ :
<pre>
server:
interface: 10.23.0.1
interface: ::
interface: 127.0.0.1
access-control: 0.0.0.0/0 refuse
access-control: 10.23.0.0/16 allow
access-control: ::0/0 refuse
access-control: fe80::/16 allow
access-control: 2a03:7220:8087:c01::/64 allow
hide-identity: yes
hide-version: yes
aggressive-nsec: yes
qname-minimisation: yes
</pre>
* Activation
<pre>
# systemctl restart unbound.service
</pre>
h2. Controleur des bornes Wifi : Unifi
Téléchargement : https://ui.com/download/unifi/default/default/unifi-network-application-7383-unifi-os-consoles-and-debianubuntu
(Downloads -> unifi -> software)
h3. Installer le controleur
* Définir un compte admin + mot de passe
* Configurer le reseau 'default' avec les adresses IPv4 et IPv6 du lan
* Définir un (ou plusieurs) réseaux wifi SSID + mot de passe WPA2
h3. Adopter les bornes
# connecter une borne au switch PoE du LAN
# faire un reset de la borne (connecter en maintenant le bouton RESET appuyé jusqu'à flash bleu/blanc)
# Attendre config DHCP de la borne, puis déconnecter/reconnecter -
# Adopter la borne dans l'interface.