J’avais évoqué dans un article précédent, comment utiliser un Raspberry Pi comme passerelle OpenVPN, mais le hic dans cette approche, c’est qu’il faut configurer chaque client (ordinateurs, consoles, etc.) pour utiliser le Raspberry Pi comme passerelle.
Pas pratique du tout d’aller mettre à jour la configuration réseau (IP, passerelle, DNS) – surtout si vous souhaitez changer de VPN à FAI fréquemment.
Dans cet article, j’explique comment configurer votre Raspberry Pi pour qu’il crée un point d’accès wifi (SSID) , qui routera les clients directement via le tunnel VPN (tun0) ou pas(eth0, pour rajouter dans votre logement un point d’accès wifi à votre réseau local) : il vous suffira alors de changer de réseau wifi pour vos retrouver (ou pas) connecté via VPN.
Pré-requis
J’assume dans cet article que :
- vous avez un Raspberry Pi (j’utilise un rpi 2b et un rpi B+ et même le rpi 3 avec wifi intégré) et un adapteur wifi sur usb (j’écris l’article en utilisant une Edimax 150Mbps EW-7811 UnR2, mais tout autre adapteur wifi usb, supportant Access Point (AP Mode) ferait l’affaire, j’ai aussi testé avec TP-Link TL-WN823N
- SOIT vous avez suivi l’article précédent et vous avez un Raspberry Pi sous Raspbian Jessie, avec une connexion OpenVPN configurée au démarrage sur tun0, et qu a les règles iptables pour autoriser le routage
- SOIT vous voulez simplement ajouter un point d’accès wifi à votre réseau local, avec votre Raspberry Pi (1 ou2 ) sous Raspbian Jessie
Paramétrage de l’interface Wifi
Si vous êtes connecté à votre Raspberry Pi par ethernet, vous devriez être capable de voir tun0 (le tunnel VPN) ou simplement etho et wlan0 (l’adaptateur wifi)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
pi@raspberrypi:~ $ ifconfig eth0 ... lo ... tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:192.168.255.6 P-t-P:192.168.255.5 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:56 errors:0 dropped:0 overruns:0 frame:0 TX packets:60 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:4256 (4.1 KiB) TX bytes:4560 (4.4 KiB) wlan0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:40 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) |
Pour l’instant, wlan0 n’est pas configuré; 2 options se présentent à vous pour la configuration réseau
a)Configurer le réseau pour point d’accès avec DHCP (pour tunnel VPN par exemple)
Il vous suffit, dans /etc/network/interfaces, d’enlever les défauts pour wlan0 (commentés avec un # devant) pour ajouter une configuration statique – j’utilise ici un subnet différent que celui de eth0 (qui était sur 192.168.1.x) – pour bien différencier les 2 réseaux.
1 2 3 4 5 6 7 8 |
auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 192.168.43.1 netmask 255.255.255.0 #iface wlan0 inet manual # wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf |
Configuration du serveur DHCP
Pour faciliter la configuration des clients, rien de mieux qu’un serveur DHCP ; d’abord on l’installe :
1 |
$ sudo apt-get install isc-dhcp-server |
et ensuite, on le paramètre , à travers le ficher /etc/dhcp/dhcpd.conf :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# ... # interim est le nouveau mode recommandé ddns-update-style interim; # ... # on veut que notre serveur dhcp soit le défaut de notre sous réseau authoritative; # ... # à la toute fin subnet 192.168.43.0 netmask 255.255.255.0 { range 192.168.43.10 192.168.43.50; option domain-name-servers 8.8.8.8 ; #le dns public de google option domain-name "vpn"; option routers 192.168.43.1; } |
et à travers le fichier /etc/default/isc-dhcp-server pour lui indiquer que wlan0 est l’interface réseau dont il devra être le serveur dhcp
1 2 |
# ... INTERFACES="wlan0" |
b) Configurer le réseau pour point d’accès sans DHCP (pour point d’accès wifi supplémentaire par exemple)
Je vous suggère de bridger wlan0 et eth0, sous br0 : comme celà, toutes les machines connectées sur l’AP wifi seront traitées comme tout autre membre de votre réseau local (et donc utiliseront les mêmes DNS, DHCP, etc.)
Il vous suffit alors de remplacer votre configuration /etc/network/interfaces avec la suivante :
1 2 3 4 5 6 7 8 9 10 11 |
# Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d auto lo iface lo inet loopback iface eth0 inet dhcp auto br0 iface br0 inet dhcp bridge_ports eth0 wlan0 |
Il vous faudra toutefois avoir installé bridge-utils :
1 |
sudo apt-get install bridge-utils |
C’est tout, mais ne redémarrez pas le réseau encore, wlan0 est toujours inactive pour le moment
Installation d’hostapd pour point d’accès wifi
On commence par l’installer :
1 |
$ sudo apt-get install hostapd |
et avant d’aller plus loin, on découvre quelle est précisément notre adaptateur wifi :
1 2 3 4 5 |
pi@raspberrypi:~ $ lsusb Bus 001 Device 004: ID 7392:7811 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS] Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub |
ok c’est bien 1 Edimax Technology Co., Ltd EW-7811Un 802.11n Wireless Adapter avec chipset Realtek RTL8188CUS, continuez la lecture de l’article avec RTL8188CUS / RTL8192CU
Par contre, si vous avez :
1 |
Bus 001 Device 004: ID 0bda:8178 Realtek Semiconductor Corp. RTL8192CU 802.11n WLAN Adapter |
et bien… c’est le même driver donc mêmes instructions !
Configuration du point d’accès hostapd, avec Realtek RTL8192CU ou Realtek RTL8188CUS
Si vous utilisez un raspberry pi 3, passez à la section suivante !
Malheureusement, hostapd, ne supporte pas ces chipsets; il faut ainsi soit télécharger 1 version d’hostapd avec support du chipset, soit compiler soit même hostapd avec support du chipset.
Soit vous me faites confiance et vous le téléchargez en suivant ce lien.
Ou alors, vous êtes plus courageux (et/ou n’avez pas confiance) et vous téléchargez les sources depuis Realtek, vous devriez obtenir une archive nommée 0001-RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip, une fois dézippée, rendez vous dans wpa_supplicant_hostapd, détarrez wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz, et envoyez son contenu sur votre pi :
1 |
$ scp -r wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/ pi@192.168.1.20: |
Retour sur votre pi, rendez vous vers : ~/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd afin de compiler hostpad et remplacer la version d’apt avec :
1 2 |
$ make $ sudo cp hostapd /usr/sbin/hostapd |
Retour à la configuration d’hostapd
On peut alors configurer hostapd, via /etc/hostapd/hostapd.conf (à créer):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
interface=wlan0 driver=rtl871xdrv ssid=MON_SSID country_code=CA # le n utilise la bande de frequence de g, voir 80211n=1 hw_mode=g channel=4 macaddr_acl=0 auth_algs=1 # juste wpa2, si wpa et wpa2, alors 3 wpa=2 ignore_broadcast_ssid=0 wpa_passphrase=MOT_DE_PASSE wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP # active n wme_enabled=1 # active n ieee80211n=1 ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40] |
Utilisateurs de Raspberry pi 3 , attention !
Le driver est différent, ainsi que les options de capabilité et le mode bridge doit être activé si vous avez bridgé wlan0 avec eth0 sur br0; voici les options qui différent :
1 2 3 4 |
driver=nl80211 ssid=pousson bridge=br0 ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40] |
Et on rajoute le chemin vers ce fichier /etc/default/hostapd
1 |
DAEMON_CONF="/etc/hostapd/hostapd.conf" |
On peut alors tester que tout va bien :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
pi@raspberrypi:~ $ sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf Configuration file: /etc/hostapd/hostapd.conf drv->ifindex=3 l2_sock_recv==l2_sock_xmit=0x0x141d638 +rtl871x_sta_deauth_ops, ff:ff:ff:ff:ff:ff is deauth, reason=2 rtl871x_set_key_ops rtl871x_set_key_ops rtl871x_set_key_ops rtl871x_set_key_ops Using interface wlan0 with hwaddr 74:da:38:68:63:4a and ssid 'MON_NETWORK_ID' rtl871x_set_wps_assoc_resp_ie rtl871x_set_wps_beacon_ie rtl871x_set_wps_probe_resp_ie rtl871x_set_key_ops rtl871x_set_beacon_ops rtl871x_set_hidden_ssid_ops |
Si vous avez à la place :
1 2 3 4 5 6 |
pi@raspberrypi:~ $ sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf Configuration file: /etc/hostapd/hostapd.conf Line 2: invalid/unknown driver 'rtl871xdrv' 1 errors found in configuration file '/etc/hostapd/hostapd.conf' Failed to set up interface with /etc/hostapd/hostapd.conf Failed to initialize interface |
C’est que votre binaire hostapd ne supporte pas votre chipset (ou que votre wlan0 nécessite un autre driver que rt1871xdr)
Touche finale
Il suffit de redémarrer tout le monde proprement :
1 2 3 |
$ sudo service isc-dhcp-server restart # si vous avez installé un server dhcp pour tun0 $ sudo service networking restart $ sudo service hostapd restart |
Et vous devriez être capable de connecter en wifi vos ordinateurs, consoles, directement à votre tunnel VPN !
Liens / inspirations
- http://www.knight-of-pi.org/setup-a-raspberry-pi-as-wireless-access-point-wap-with-the-logilink-wl0084b-nl80211/
- http://raspberry-at-home.com/hotspot-wifi-access-point/
- http://www.savagehomeautomation.com/raspi-edimax-ew-7811un
- http://www.daveconroy.com/turn-your-raspberry-pi-into-a-wifi-hotspot-with-edimax-nano-usb-ew-7811un-rtl8188cus-chipset/
- https://wireless.wiki.kernel.org/en/users/Documentation/hostapd#Wireless_Interface