Matériel requis : RPi3 B+ avec une adaptateur réseau USB/RJ45 externe (UGREEN adaptateur Gigabit USB 3.0 vers RJ45 - 19,99€) + carte SD 32Go + écran VGA connecté avec un adaptateur HDMI/VGA externe
1 / Installation de Raspberry Pi OS
On va sur https://www.raspberrypi.com/software - on récupére le Raspberry Pi Imager qui permet de télécharger une image en ligne de la distribution, et de l'envoyer directement sur la carte SD 32 Go qui doit bien entendu être connectée.
Code : Tout sélectionner
sudo bash
dpkg -i Téléchargements/imager_X.Y.Z_amd64.deb
Nous avons choisi l'image en 64 bits, en activant tout de suite le serveur SSH dans les options proposées, avec un accès client WiFi à la borne dans la salle de réunion de la Langmatt qui nous accueille dans nos réunions infos.
Une fois la carte prête, on la met dans le RPi, et on laisse se faire le démarrage...
2/ Configuration du réseau au démarrage
Installation du paquet bridge-utils
On ajoute dans le fichier /etc/network/interfaces les lignes :
Code : Tout sélectionner
auto eth0
allow-hotplug eth0
iface eth0 inet dhcp
auto eth1
allow-hotplug eth1
iface eth1 inet manual
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
auto br0
iface br0 inet static
address 192.168.200.1/24
bridge_ports eth1 wlan0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
Le bridge br0 sera quant à lui composé des interfaces wlan0 et eth1 destinées à nos usagers locaux.
On redémarre le réseau et on vérifie la config
Code : Tout sélectionner
# service networking restart
ip a
brctl show
3 / installation du serveur DNS et des deux zones (directe et inverse)
Code : Tout sélectionner
# apt install bind9
Code : Tout sélectionner
acl "goodclients" {
192.168.200.0/24;
localhost;
};
zone "toto.lan" {
type master;
file "zone.toto.lan";
allow-query { "goodclients"; };
allow-update { "none"; };
notify no;
};
zone "200.168.192.in-addr.arpa" {
type master;
file "zone.toto.lan.rev";
allow-query { "goodclients"; };
allow-update { "none"; };
notify no;
};
Code : Tout sélectionner
# cat /etc/bind/zone.toto.lan
$TTL 3D
@ IN SOA parefeu.toto.lan. root.toto.lan. (
202207301 ; serial, todays date + todays serial #
8H ; refresh, seconds
2H ; retry, seconds
4W ; expire, seconds
1D ) ; minimum, seconds
;
NS parefeu ; Inet Address of name server
;
ns A 192.168.200.1
parefeu A 192.168.200.1
# cat /etc/bind/zone.toto.lan.rev
$TTL 3D
@ IN SOA parefeu.toto.lan. root.toto.lan. (
202207301 ; Serial, todays date + todays serial
8H ; Refresh
2H ; Retry
4W ; Expire
1D) ; Minimum TTL
NS parefeu.toto.lan.
1 PTR parefeu.toto.lan.
Code : Tout sélectionner
# cat /etc/default/named
#
# run resolvconf?
RESOLVCONF=no
# startup options for the server
OPTIONS="-u bind -4"
Code : Tout sélectionner
# systemctl enable named
# systemctl start named
Par sécurité, on vire l'IPv6 qui ne sert à rien dans un réseau local familial... Sinon à passer les pare-feux dans le dos des usagers ! On ajouter l'option ipv6.disable=1 dans les options de démarrage du noyau :
Code : Tout sélectionner
# vi /boot/cmdline.txt
console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles ipv6.disable=1
Code : Tout sélectionner
# apt install isc-dhcp-server
Code : Tout sélectionner
# cat /etc/dhcp/dhcpd.conf
ddns-update-style none;
subnet 192.168.200.0 netmask 255.255.255.0 {
range 192.168.200.10 192.168.200.30;
option domain-name-servers 192.168.200.1;
option domain-name "toto.lan";
option routers 192.168.200.1;
default-lease-time 600;
max-lease-time 7200;
}
Code : Tout sélectionner
# cat /etc/default/isc-dhcp-server
# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server)
# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
DHCPDv4_CONF=/etc/dhcp/dhcpd.conf
#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf
# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPDv4_PID=/var/run/dhcpd.pid
#DHCPDv6_PID=/var/run/dhcpd6.pid
# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACESv4="br0"
INTERFACESv6=""
Code : Tout sélectionner
# systemctl enable isc-dhcp-server
# systemctl start isc-dhcp-server
Code : Tout sélectionner
# apt install hostapd
Code : Tout sélectionner
# cat /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=MONRESEAUWIFICLEPLUSBO
hw_mode=g
bridge=br0
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=totototo
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
Code : Tout sélectionner
# hostapd -d /etc/hostapd/hostapd.conf
Activation au démarrage :
Code : Tout sélectionner
# systemctl enable hostapd
# systemctl start hostapd
Dans /etc/sysctl.conf, on décommente :
Code : Tout sélectionner
net.ipv4.ip_forward=1
Code : Tout sélectionner
# sysctl -p
Code : Tout sélectionner
# apt install shorewall
Code : Tout sélectionner
# cp /usr/share/doc/shorewall/examples/two-interfaces/* /etc/shorewall
# rm /etc/shorewall/*.gz
Code : Tout sélectionner
# cat /etc/shorewall/interfaces
# Shorewall - Sample Interfaces File for two-interface configuration.
# Copyright (C) 2006-2017 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#------------------------------------------------------------------------------
# For information about entries in this file, type "man shorewall-interfaces"
###############################################################################
?FORMAT 2
###############################################################################
#ZONE INTERFACE OPTIONS
net NET_IF dhcp,tcpflags,nosmurfs,routefilter,logmartians,sourceroute=0,physical=eth0
loc LOC_IF tcpflags,nosmurfs,routefilter,logmartians,physical=br0
Code : Tout sélectionner
# cat /etc/shorewall/policy
# Shorewall - Sample Policy File for two-interface configuration.
# Copyright (C) 2006-2015 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#------------------------------------------------------------------------------
# For information about entries in this file, type "man shorewall-policy"
###############################################################################
#SOURCE DEST POLICY LOGLEVEL RATE CONNLIMIT
loc net ACCEPT
loc $FW ACCEPT
$FW all ACCEPT
net all DROP $LOG_LEVEL
# THE FOLOWING POLICY MUST BE LAST
all all REJECT $LOG_LEVEL
Code : Tout sélectionner
# cat /etc/shorewall/snat
# Shorewall - Sample SNAT/Masqueradee File for two-interface configuration.
# Copyright (C) 2006-2017 by the Shorewall Team
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# See the file README.txt for further details.
#------------------------------------------------------------------------------
# For information about entries in this file, type "man shorewall-snat"
#
# See http://shorewall.net/manpages/shorewall-snat.html for more information
###########################################################################################################################################
#ACTION SOURCE DEST PROTO PORT IPSEC MARK USER SWITCH ORIGDEST PROBABILITY
#
# Rules generated from masq file /home/teastep/shorewall/trunk/Shorewall/Samples/two-interfaces/masq by Shorewall 5.0.13-RC1 - Sat Oct 15 11:41:40 PDT 2016
#
MASQUERADE 192.168.200.0/24 NET_IF
Code : Tout sélectionner
# service shorewall restart
Code : Tout sélectionner
# iptables -L
Code : Tout sélectionner
startup=1
Code : Tout sélectionner
systemctl enable shorewall