Une passerelle HotSpot, TOR ou VPN avec un Raspberry
Page mise à jour le 06-01-2026 à 23:21
Le Raspberry Pi posséde deux interfaces réseau qui pernettent d'en faire un HotSpot, une passerelle TOR ou ou une passerelle VPN.
Son interface Ethernet sera connectée au réseau local tandis que son interface Wlan sera configurée en point d'accès pour les clients.
Avant de commencer

Notez que vous devrez choisir parmis les trois options proposées plus bas sachant qu'elles sont incompatibles entre elles.

Fiche technique du Raspberry Pi 3B+
Type de produit Nano-ordinateur
Marque Raspberry
Modèle Pi 3B+
Type de stockage Carte Micro-SD
Processeur (CPU) Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz
Mémoire vive (RAM) 1GB LPDDR2 SDRAM
Processeur graphique (GPU) VideoCore IV
Ports USB 4 x USB 2.0
Port Ethernet Gigabit Ethernet over USB 2.0 (maximum throughput 300 Mbps)
Wireless 2.4GHz and 5GHz IEEE 802.11.b/g/n/ac wireless LAN, Bluetooth 4.2, BLE
Ports GPIO / MPI DSI / MPI CSI Extended 40-pin GPIO header / CSI camera port / DSI display port
Port HDMI Full-size HDMI
Audio 4 poles stereo output and composite video port
Alimentation micro USB (5V – 2.5A)
POE Power-over-Ethernet (PoE) support (requires separate PoE HAT)
Dimensions 85mm x 56mm

Prérequis
Un Raspberry Pi 3B+
Une carte microSD (8Go mini, 64Go maxi, 16Go conseillé)
La version de Raspberry Pi OS Lite x64 Debian 11 Bullseye qui est disponible ici ou sa dernière version depuis le site officiel
Dans tous les cas l'archive est à décompresser avec 7zip

Conventions
Considérons le réseau local configuré comme suit :
ID réseau 192.168.1.0
Masque de sous-réseau 255.255.255.0
Adresse IP du routeur 192.168.1.1
Passerelle 192.168.1.1
Serveur DNS 192.168.1.1
Le Raspberry sera configuré comme suit :
Nom du Raspberry raspi-gateway
IP Ethernet 192.168.1.250
SSID du Raspberry raspi-access
IP Wlan 10.10.10.1/24
Etendue DHCP 10.10.10.50-10.10.10.60
Il vous appartient d'adapter ces paramètres à votre environnement.
Les clients TOR se connecteront en DHCP à l'interface WiFi du Raspberry.

Administration
Nous administrerons le serveur à distance et j'utilise pour cela un poste client Microsoft doté du sous-système Windows pour Linux.
Vous trouverez ici comment installer Debian sous Windows 10 ainsi que les deux excellents outils que sont Windows Terminal et WinSCP.
(passez cette étape si vous préférez utiliser une autre méthode).

A savoir :
Sur un Raspberry, le nom d'utilisateur par défaut est pi et le mot de passe par défaut est raspberry
Le mot de passe devra être orthographié rqspberry si le clavier est reconnu en tant que QWERTY

Premier démarrage du Raspberry

Formatez la carte microSD avec SD Card Formatter (facultatif)
Flashez sur la carte microSD l’image iso raspios-xxxxxx-arm64-lite.img avec Win32DiskImager

Insérez la carte microSD et connectez l’alimentation.

Si vous n'obtenez pas d’affichage au démarrage du Raspberry (problème constaté avec certains convertisseurs HDMI/VGA)
Insérez la carte microSD dans un lecteur USB, et depuis un PC éditez le fichier /boot/config.txt
Décommentez les lignes suivantes en appliquant ces paramètres.
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=81
hdmi_drive=2

Configuration du Raspberry

Le système Raspberry Pi OS s'installe puis démarre sur un assistant.

Configurez le clavier azerty
Generic 105-key PC (intl.) -> Other -> French -> The default for the keyboard layout -> No compose key

L'assistant vous demandera ensuite de créer votre compte utilisateur.

Configurez les autres options régionales
sudo raspi-config
    5 Localisation Options
        L1 Locale       -> fr_FR.UTF-8 UTF-8 -> fr_FR.UTF-8
        L2 Timezone     -> Europe -> Paris

Exécutez une à une les commandes suivantes
# changement du mot de passe root
sudo passwd root

# mise à jour du cache des dépôts
sudo apt-get update

# mappages IP / noms d’hôtes
sudo nano /etc/hosts
    127.0.0.1 raspi-gateway
    192.168.1.250 raspi-gateway

# nom d’hôte de la machine
sudo nano /etc/hostname
    raspi-gateway

# configuration TCP/IP
sudo nano /etc/dhcpcd.conf

    interface eth0
    static ip_address=192.168.1.250/24
    static routers=192.168.1.1
    static domain_name_servers=192.168.1.1

    interface wlan0
    static ip_address=10.10.10.1/24
    nohook wpa_supplicant

# application des nouveaux paramètres TCP/IP
sudo /etc/init.d/networking restart

# activation du protocole SSH
sudo systemctl enable ssh

# autoriser le compte root à se connecter en SSH
sudo nano /etc/ssh/sshd_config
    PermitRootLogin yes

# démarrage du service SSH
sudo systemctl start ssh

# redémarrage du système
sudo reboot

Configuration du point d'accès wi-fi

Il est plus pratique de poursuivre les opérations depuis un poste client.

Initiez une connexion SSH vers le Raspberry
ssh <utilisateur>@192.168.1.250

Paramétrez les services réseau sur l'interface WiFi
# vérifier que wlan0 n'est pas bloqué
sudo rfkill list
    0: phy0: Wireless LAN
    Soft blocked: yes
    Hard blocked: no

# débloquer wlan0 si nécessaire
sudo rfkill unblock 0

# activer les interfaces réseau
sudo ifconfig eth0 up
sudo ifconfig wlan0 up

# installer le serveur DHCP et le cache DNS
sudo apt-get install dnsmasq

# faire une copie du fichier de configuration par défaut
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak

# éditer le fichier de configuration
sudo nano /etc/dnsmasq.conf
    # interface, étendue et durée du bail
    interface=wlan0
    dhcp-range=10.10.10.50,10.10.10.60,255.255.255.0,24h

Paramétrez le Raspberry en point d'accès WiFi sécurisé
# installer le point d'accès
sudo apt-get install hostapd

# créer le fichier de configuration du point d'accès (sans commentaires ni indentation)
sudo nano /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=raspi-access
auth_algs=1
wpa=2
wpa_passphrase=KeyForAccess
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
hw_mode=g
channel=6

# déclarer le fichier de configuration
sudo nano /etc/default/hostapd
    DAEMON_CONF="/etc/hostapd/hostapd.conf"

# activer les services
sudo systemctl restart dnsmasq
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

# redémarrage du système
sudo reboot
Le fichier /etc/hostapd/hostapd.conf n'accepte pas les commentaires ni les indentations
Voici donc pour information sa version commentée :
    interface=wlan0# interface WiFi
    driver=nl80211# drivers nl80211 et mac80211
    ssid=raspi-access# SSID à personnaliser
    auth_algs=1# active la sécurité
    wpa=2# type de clé
    wpa_passphrase=KeyForAccess# clé WPA à personnaliser
    wpa_key_mgmt=WPA-PSK# mode de sécurité
    wpa_pairwise=TKIP# mode de sécurité
    rsn_pairwise=CCMP# mode de sécurité
    hw_mode=g# mode WiFi (a = IEEE 802.11a 5GHz, b = IEEE 802.11b 2.4GHz, g = IEEE 802.11g 2.4GHz)
    channel=6# canal de fréquence WiFi (1-14)

Connectez un client au point d'accès et depuis lequel vous devez pouvoir effectuer un ping vers les interfaces Wlan0 et Eth0

Contrôlez le fonctionnement des services hostapd et dnsmasq
cat /var/log/syslog
    Feb 23 08:52:05 raspi-gateway hostapd: wlan0: STA e0:ce:c3:82:8e:18 IEEE 802.11: associated
    Feb 23 08:52:05 raspi-gateway hostapd: wlan0: STA e0:ce:c3:82:8e:18 RADIUS: starting accounting session
    Feb 23 08:52:05 raspi-gateway hostapd: wlan0: STA e0:ce:c3:82:8e:18 WPA: pairwise key handshake completed
    Feb 23 08:52:08 raspi-gateway dnsmasq-dhcp[962]: DHCPDISCOVER(wlan0) e0:ce:c3:82:8e:18
    Feb 23 08:52:08 raspi-gateway dnsmasq-dhcp[962]: DHCPOFFER(wlan0) 10.10.10.54 e0:ce:c3:82:8e:18
    Feb 23 08:52:08 raspi-gateway dnsmasq-dhcp[962]: DHCPREQUEST(wlan0) 10.10.10.54 e0:ce:c3:82:8e:18
    Feb 23 08:52:08 raspi-gateway dnsmasq-dhcp[962]: DHCPACK(wlan0) 10.10.10.54 e0:ce:c3:82:8e:18 SATELLITE
Le service hostapd a associé le périphérique dont l'adresse MAC est e0:ce:c3:82:8e:18 et le nom netbios SATELLITE
Le service dnsmasq a répondu à la demande du client en lui offrant l'adresse IP 10.10.10.54

Affichez les baux DHCP du point d'accès WiFi
cat /var/lib/misc/dnsmasq.leases
    1677228728 e0:ce:c3:82:8e:18 10.10.10.54 SATELLITE 01:e0:ce:c3:82:8e:18
1677228728expiration du bail en temps unix
e0:ce:c3:82:8e:18adresse MAC du client
10.10.10.54adresse IP du client
SATELLITEnom NetBios du client
01:e0:ce:c3:82:8e:18ID du client suivi de l'adresse MAC du client

Pour résilier un bail il suffit de supprimer la ligne correspondante dans ce fichier.

Les clients n'ont pour l'instant aucun accès et vous devez maintenant construire un pont entre les deux interfaces.
Vous avez le choix entre trois options proposées ci-dessous selon ce que vous souhaitez obtenir.
A ce stade il est conseillé de réaliser, avec Win32DiskImager, une image ISO de la carte microSD avant de poursuivre.

Connectez-vous en local sur le Raspberry car certaines opérations à venir bloqueront la liaison SSH

Option 1 - HotSpot

Cette première option fait du Raspberry un simple point d'accès WiFi vers le réseau local et vers Internet.

Activez l'IP Forwarding en décommentant une ligne dans le fichier /etc/sysctl.conf
sudo nano /etc/sysctl.conf
    net.ipv4.ip_forward=1

Ajoutez une règle de pare-feu et rendez-la persistante
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

Editez le fichier /etc/rc.local pour ajouter une ligne juste au dessus de la ligne exit 0
sudo nano /etc/rc.local
    iptables-restore < /etc/iptables.ipv4.nat
    exit 0

Construisez le pont entre les deux interfaces
sudo apt-get install bridge-utils
sudo brctl addbr br0
sudo brctl addif br0 eth0

Ajoutez le pont dans la configuration TCP/IP
sudo nano /etc/network/interfaces
    auto br0
    iface br0 inet manual
    bridge_ports eth0 wlan0

Editez le fichier /etc/hostapd/hostapd.conf pour ajouter une ligne juste en dessous de la ligne interface=wlan0
sudo nano /etc/hostapd/hostapd.conf
    interface=wlan0
    bridge=br0

Redémarrez le système
sudo reboot

Connectez un client au point d'accès.
Vous ne devez plus pouvoir effectuer de ping vers les interfaces Wlan0 et Eth0
Vous devez pouvoir effectuer un ping vers la passerelle et Internet et avoir une résolution DNS sur Internet

Option 2 - Passerelle TOR

TOR, acronyme de The Onion Router (le routage en oignon), est un réseau garantissant l’anonymat de ses utilisateurs.
Chaque connexion transite par un nombre plus ou moins important de noeuds, chacun d’entre eux relayant l’information au noeud suivant
jusqu’à la destination en empêchant de relier cette information au client qui a émis la requête.

Ouvrez les ports 9001 et 9030 (TCP et UDP) sur le routeur et dirigez-les vers l'IP Ethernet du Raspberry

Installez TOR
sudo apt-get install tor

Créez un utilisateur pour TOR en ignorant les informations Full name, Room number, etc.
sudo adduser tor

Autorisez l’utilisateur TOR à exécuter toutes les commandes en mode sudo
sudo nano /etc/sudoers
    tor ALL=(ALL) ALL

Configurez TOR en tant que passerelle en décommentant les lignes indiquées
sudo nano /etc/tor/torrc
    Log notice file /var/log/tor/notices.log# emplacement du fichier log
    RunAsDaemon 1 # TOR fonctionne en tâche de fond
    ORPort 9001# port pour les échanges de connexions
    Nickname incognitonode# nom du noeud (caractères alphanumériques uniquement)
    RelayBandwidthRate 100 KBytes# limite le trafic à 100KB/s (800Kbps)
    RelayBandwidthBurst 200 KBytes# en cas de forte demande autorise 200KB/s (1600Kbps)
    DirPort 9030# port de référencement du noeud
    ExitPolicy reject *:*# politique de rejet des sorties
    SocksPort 0# pas de port local ouvert pour créer un relais
Si on souhaitait utiliser TOR en local depuis le Raspberry on laisserait la ligne SocksPort 0 commentée.

Appliquez les règles de routage au démarrage dans cron
sudo crontab -e -u pi
    @reboot sudo sysctl -w net.ipv4.ip_forward=1
    @reboot sudo iptables -A FORWARD -i wlan0 -s 10.10.10.0/255.255.255.0 -o eth0 -j
    @reboot sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Redémarrez le Raspberry
sudo reboot

Connectez un client au point d'accès.
Vous devez pouvoir effectuer un ping vers la passerelle et Internet et avoir une résolution DNS sur Internet

Vérifiez la configuration de TOR
tor --verify-config

Vérifiez l’état du service TOR
service tor status

Suivez le fonctionnement de TOR
cat /var/log/tor/notices.log

Feb 2 11:45:26.000 [notice] Bootstrapped 80%: Connecting to the Tor network
Feb 2 11:45:26.000 [notice] Signaled readiness to systemd
Feb 2 11:45:26.000 [notice] Opening Socks listener on /var/run/tor/socks
Feb 2 11:45:26.000 [notice] Opening Control listener on /var/run/tor/control
Feb 2 11:45:27.000 [notice] Bootstrapped 85%: Finishing handshake with first hop
Feb 2 11:45:27.000 [notice] Guessed our IP address as 90.55.57.148 (source: 183.42.189.12).
Feb 2 11:45:27.000 [notice] Bootstrapped 90%: Establishing a Tor circuit
Feb 2 11:45:27.000 [notice] Tor has successfully opened a circuit. Looks like client functionality is working.
Feb 2 11:45:27.000 [notice] Bootstrapped 100%: Done
Feb 2 11:45:27.000 [notice] Now checking whether ORPort 90.55.57.148:9001 and DirPort 90.55.57.148:9030 are reachable... (this may take up to 20 minutes -- look for log messages indicating success)
Feb 2 11:45:28.000 [notice] Self-testing indicates your DirPort is reachable from the outside. Excellent.
Feb 2 11:45:29.000 [notice] Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.
Feb 2 11:45:32.000 [notice] Performing bandwidth self-test...done.
TOR indiquera en continu son uptime et le volume de données qu’il a fait transiter.
Cela peut être vérifié en entrant le nom du noeud dans la base de données tenue à jour par TOR.

Option 3 - Passerelle VPN

Un lien VPN garantit la sécurité des données qui transitent de point à point.
Vous devez disposer d'un compte auprès d'un fournisseur VPN et nous allons choisir Windscribe qui propose un accès gratuit limité à un volume de 2Go par mois en restant anonyme, ou 10Go par mois en acceptant d'ouvrir un compte chez eux.
Vous devez également télécharger depuis leur site le paquet Debian que vous placerez dans le répertoire home/<utilisateur>/

Installez les paquets requis (adaptez le nom de fichier windscribe)
sudo apt-get install openvpn
sudo dpkg -i windscribe-cli_1.4-51_armhf.deb

Initialisez Windscribe
windscribe login# entrer le login et le mot de passe du compte Windscribe
windscribe firewall off# facultatif : auto par défaut
windscribe port 443# facultatif : 443 par défaut
windscribe protocol tcp# obligatoire à chaque nouvelle connexion
windscribe connect XX# XX étant le serveur ou meilleur emplacement si non spécifié
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -A FORWARD -i wlan0 -s 10.10.10.0/255.255.255.0 -o tun0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
Les serveurs disponibles avec un compte gratuit sont : US-C, US, US-W, CA, CA-W, FR, DE, NL, NO, RO, CH, GB, HK

Ajoutez les règles de routage au démarrage dans le cron
sudo crontab -e -u pi
    @reboot sudo sysctl -w net.ipv4.ip_forward=1
    @reboot sudo iptables -A FORWARD -i wlan0 -s 10.10.10.0/255.255.255.0 -o tun0 -j ACCEPT
    @reboot sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Redémarrez le système, la connexion à Windscribe est conservée après un reboot soft ou hard
sudo reboot

Vérifiez de fonctionnement
windscribe status
    windscribe -- pid: 556, status: running, uptime: 1m, %cpu: 0.0, %mem: 2.0
    IP: 194.59.249.250
    CONNECTED -- FR tcp (443)

Connectez un client au point d'accès.
Il est préférable d'utiliser des DNS tels que OpenDNS 208.67.222.222 et 208.67.220.220
Vous devez pouvoir effectuer un ping vers la passerelle et Internet et avoir une résolution DNS sur Internet
Vérifiez depuis le client connecté au wlan que l'IP donnée par www.mon-ip.com est identique à l'IP donnée par windscribe status

Toutes les commandes Windscribe
statusCheck status of Windscribe and connection
accountOutput current account details
connectConnect to Windscribe (default best location)
disconnectDisconnect from VPN
examplesShow usage examples
firewallView/Modify Firewall mode (default auto)
lanbypassView/Modify Firewall LAN bypass (default on)
locationsOutput list of all available server locations
loginLogin to Windscribe account
logoutLogout and disconnect
portView/Modify default Port (default 443)
protocolView/Modify default Protocol (default udp)
proxyView/Modify Proxy Settings (default off)
sendlogSend the debug log to Support
speedtestTest the connection speed (non fonctionnel)
viewlogView the debug log

Mise à jour de Windscribe (adaptez le nom de fichier)
sudo apt-get purge windscribe-cli
sudo dpkg -i windscribe-cli_1.4-51_armhf.deb

# si apparition du message /etc/resolv.conf is not a symlink, this may break DNS
# appliquer les options par défaut pour une résolution dynamique
sudo apt-get install resolvconf
sudo dpkg -reconfigure resolvconf

# le fichier /etc/resolv.conf devrait ensuite ressembler à ceci :
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.255.255.2
nameserver 208.67.222.222
nameserver 208.67.220.220
search home

Pour conclure voici un script de diagnostic
#!/bin/bash

file="/home/pi/diag.log"

echo "------------------------------ Journal du statut VPN --------------------------" > $file
echo "" >> $file
echo "== COMPTE WINDSCRIBE ==========================================================" >> $file
echo "" >> $file
windscribe account >> $file
echo "" >> $file
echo "== CONNEXION VPN ==============================================================" >> $file
echo "" >> $file
windscribe status >> $file
windscribe firewall >> $file
echo "== INTERFACES =================================================================" >> $file
echo "" >> $file
ifconfig eth0 >> $file
ifconfig wlan0 >> $file
ifconfig tun0 >> $file
echo "== ROUTAGE ====================================================================" >> $file
echo "" >> $file
sudo iptables -L >> $file
echo "" >> $file
echo "===============================================================================" >> $file
# nettoyage du journal
sed -i -e '/^Usage/d' $file
sed -i -e '/^Available modes:/d' $file
sed -i -e '/^auto (on/d' $file
sed -i -e '/^on (always on)/d' $file
sed -i -e '/^off (always off)/d' $file
sed -i -e '/^ ----/d' $file
sed -i -e '/^        inet6/d' $file
sed -i -e '/^        ether/d' $file
sed -i -e '/^        unspec/d' $file
sed -i -e '/^        RX/d' $file
sed -i -e '/^        TX/d' $file
# affichage du journal
leafpad $file
exit 0
Papy WinTux - Philippe DESLOGES - 2023-2026 - Powered by Debian - Apache 2.4.54 - PHP 7.4.33 - Last update 06-01-2026 23:21 - Page size 46 ko built in 1 ms
All trademarks, logos, images and documents on these pages belong exclusively to their respective owners.