Utiliser une carte Raspberry comme point d’accès wifi avec connexion par VPN
Introduction
En ce moment je travaille à un endroit où certains ports sont bloqués. Du coup il n’est pas possible d’accéder par ssh à des machines distantes. De plus certaines pages sont bloquées car considérées comme suspectes, ce qui à le don de m’énerver. Pour contourner tout cela j’ai mis en place sur un serveur distant le logiciel OpenVPN. Sur ma machine j’ai ensuite configuré un client OpenVPN pour y accéder. Puis ces derniers jours en bricolant avec ma Raspberry PI je me suis dit qu’elle pourrait faire office de point d’accès wifi tout en étant connectée au serveur vpn distant. Ainsi d’autres personnes pourraient profiter de cet accès vpn. Donc il faut une clé wifi sur la Raspberry et la connecter au routeur internet par le port internet. Je n’expliquerai pas ici l’installation d’OpenVPN sur le serveur, il existe de nombreux tutoriels sur internet comme celui-ci ou celui-là. Pour rédiger ce tutoriel je me suis (fortement) inspiré de ce site. Voyons désormais comment configurer la Raspberry PI…
Connexion au VPN distant avec OpenVPN
- Installer le paquet :
sudo aptitude install openvpn
- Sur la machine hébergeant le serveur VPN, générer un certificat (nommé par ex. pi-mirelsol pour la Raspberry qui va se connecter).
- Sur la Raspberry, récupérer les fichiers ca.crt, pi-mirelsol.crt, pi-mirelsol.key et les copier dans le répertoire /etc/openvpn.
- Editer le fichier /etc/openvpn/client.conf et l’adapter : à noter qu’ici j’utilise le protocole TCP ce qui n’est pas recommandé, mais étant donné que les requêtes UDP sont bloquées, je n’avais pas le choix).
#pour signaler que c'est un client !
client
#type d'interface
dev tun
#protocole de communication
proto tcp
#adresse ip publique du réseau dans lequel le serveur est installé + port identique au serveur
remote 88.191.151.123 993
#tentative de connexion infinie
resolv-retry infinite
nobind
#pour rendre la connexion persistante
persist-key
persist-tun
#pour cacher les avertissements
mute-replay-warnings
#emplacement du master CA
ca /etc/openvpn/ca.crt
#emplacement du certificat client
cert /etc/openvpn/pi-mirelsol.crt
#emplacement de la clé privée du client
key /etc/openvpn/pi-mirelsol.key
#type d'encryptage des données
cipher AES-128-CBC
#activation de la compression
comp-lzo
#niveau de verbosité
verb 5
route-delay 2 - Redémarrer openvpn :
/etc/init.d/openvpn restart
- On peut vérifier le résultat avec
ifconfig tun0
qui doit afficher une adresse IP attribuée par le serveur VPN
Configuration de la Raspberry en mode point d’accès
L’idée est d’utiliser une clé USB wifi qui fera office de point d’accès. Pour réaliser cette opération je me suis fortement inspiré de ce tutoriel.
Le modèle de la clé utilisée est : RT5370 Wireless Adapter Ralink Technology Toutes les opérations décrites ci-dessous doivent être exécutées en tant que root
Installation des paquets nécessaires
- Installer le paquet hostapd qui permet d’utiliser la clé wifi en tant que point d’accès :
aptitude install hostapd
- Installer le paquet dnsmasq qui permettra à la raspberry d’avoir un serveur dhcp :
aptitude install dnsmasq
Configurer le point d’accès
- Editer le fichier /etc/network/interfaces pour attribuer une adresse statique à l’interface wlan0 :
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.100.1
netmask 255.255.255.0
iface default inet manual - Appliquer ces modifications :
ifdown wlan0; ifup wlan0
et vérifier que l’interface wlan0 a bien l’adresse IP 192.168.100.1 :ifconfig wlan0
- J’ai dû modifier le fichier /etc/default/ifplugd pour que l’adresse IP fixée soit bien attribuée (ici on effectue le montage automatique uniquement pour eth0 :
INTERFACES="eth0"
HOTPLUG_INTERFACES="eth0"
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop" - Configurer le point d’accès en éditant le fichier /etc/hostapd/hostapd.conf (adapter les paramètres ssid et wpa_passphrase :
interface=wlan0
# RT5370 Wireless Adapter
driver=nl80211
ssid=pi_mirelsol
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=***mon_mot_de_passe***
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP - Editer le fichier /etc/default/hostapd et mettre la ligne suivante :
DAEMON_CONF="/etc/hostapd/hostapd.conf"
- Redémarrer le service du point d’accès :
/etc/init.d/hostapd restart
. Il devrait désormais être visible
Configurer le serveur DHCP
- Editer le fichier /etc/dnsmasq.conf :
interface=wlan0
except-interface=eth0
dhcp-range=192.168.100.2,192.168.100.150,255.255.255.0,12h - Redémarrer le serveur DHCP :
/etc/init.d/dnsmasq restart
Routage
Il faut désormais créer les règles pour que les requêtes arrivant sur l’interface wlan0 soient rediriger vers l’interface du vpn (ici tun0) :
- Dans le fichier /etc/sysctl.conf, activer le routage en décommentant la ligne :
net.ipv4.ip_forward=1
- Appliquer les modifications :
sysctl -p
- Fixer les règles iptables :
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o tun0 -j ACCEPT - Sauvegarder ces règles de façon à ce qu’elles soient pris en compte au démarrage :
iptables-save > /etc/iptables.nat
echo '#!/bin/bash' > /etc/network/if-up.d/forwarding
echo 'iptables-restore < /etc/iptables.nat' >> /etc/network/if-up.d/forwarding
chmod +x /etc/network/if-up.d/forwarding