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
Vus : 7129
Publié par Marco : 47