Une raspberry pi comme routeur 3g avec VPN passthrough
France Télécom ne disposant pas des moyens technologiques pour tirer une ligne jusqu'à chez moi en ce début de 21e siècle, il m'a fallu trouver une alternative pour accéder à internet. Un peu dans la cambrousse, on doit pas être assez rentables pour que monsieur Orange daigne utiliser du cuivre pour nous. Pas d'ADSL donc.
Voyons les autres solutions qui s'offrent Ă moi :
- Satellite : Avec du quota de bande passante par mois, une latence de homard et un investissement d'environ 300 € pour le matos.
- Wimax : L'antenne la plus proche est à 5km, autant dire qu'internet, c'est les jours de beau temps et pis c'est tout. Investissement matériel important également.
- 4G/3G : On est entouré par quatre antennes, toutes à 5Km.
Aucune de ces solutions n'offre de garantie quant à la qualité de ligne ou de débit. Quitte à investir dans du matériel me suis-je dis, autant qu'il soit réutilisable en cas de déménagement.
J'ai donc opté pour la solution 3G.
Le kit de connexion se compose donc de :
- une raspberry pi B+ ~40€
- une clé 3g Huawei E3131H ~40€
- une antenne YAGI avec connecteur CRC9 ~42€
Auxquels s'ajoutent un hub réseau, un hub USB alimenté de récup' pour l'alim de la rpi et de la clé 3g, plus une carte sd qui trainait par là . On s'en tire donc pour un budget de 150€.
Les manips décrites ici ne décrivent pas la sécurisation de la configuration. Pour bien faire, il faudrait aussi sécuriser ssh :
- Changer les login et mdp par défaut
- DĂ©sactiver le login root dans
/etc/ssh/sshd_config
- Utiliser l'identification par clé et désactiver le login par mot de passe sur ssh
- Lier le serveur SSH seulement à l'interface LAN, et sur un port différent du port 22
Base
On effectue toutes les manipulations en tant que root :
sudo su
On commence en installant une raspbian de base sur la carte SD, qu'on peut alléger de tous les logiciels liés à l'interface graphique vu qu'on en aura pas besoin.
On accède à la rpi branchée sur le réseau local en SSH.
Installation des logiciels nécessaires
apt-get install wvdial ppp dnsmasq usb-modeswitch
Configuration de la clé 3G huawei E3131H-2
Une fois le système démarré, un petit lsusb
doit retourner :
$ lsusb | grep Huawei
Bus 001 Device 007: ID 12d1:15ca Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard
On a donc une clé avec un VID de 12d1 et un PID de 15ca. La clé est en mode stockage, la faute au lecteur de carte SD intégré. Pour la switcher en mode modem, on utilise usb-modeswitch :
echo '"# Huawei E3131 (Variant) \
DefaultVendor= 0x12d1 \
DefaultProduct= 0x15ca \
TargetVendor= 0x12d1 \
TargetProduct= 0x1506 \
MessageContent="55534243123456780000000000000011062000000101000100000000000000" ' \
| sudo tee -a /etc/usb_modeswitch.d/12d1:15ca
On peut ensuite changer le mode de la clé avec :
sudo usb_modeswitch -v 12d1 -p 15ca -c /etc/usb_modeswitch.d/12d1:15ca
Un nouveau lsusb
nous donne:
$ lsusb | grep Huawei
Bus 001 Device 007: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard
Configuration de wvdial
$ cat /etc/wvdial.conf
; Si on doit entrer un code pin pour débloquer la SIM, on décommente les lignes suivantes et on change CPIN=xxxx
;[[Dialer pin]]
;Modem = /dev/ttyUSB0
;Baud = 115200
;Init1 = AT+CPIN=0000
[[Dialer Defaults]]
Init1 = ATZ
Init2 = ATE1
Init3 = AT+CGDCONT=1,"IP","ebouygtel.com"
Stupid Mode = 1
MessageEndPoint = "0x01"
Modem Type = Analog Modem
ISDN = 0
Phone = *99#
Modem = /dev/ttyUSB0
Username = { }
Password = { }
Baud = 460800
Auto Reconnect = on
Ici, ebouygtel.com est l'APN de Bouygues Telecom pour les connexions 4G/3G.
On lance la connexion ainsi :
wvdial & disown
Un petit ifconfig
nous montre la connexion active :
$ ifconfig ppp0 ppp0 Link encap:Point-to-Point Protocol
inet addr:10.85.xx.xx P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:312948 errors:1 dropped:0 overruns:0 frame:0
TX packets:220381 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:356761362 (340.2 MiB) TX bytes:38262825 (36.4 MiB)
Ajout de règles Iptables
Pour pouvoir accéder à internet, on doit activer l'ip forwarding et ajouter des règles entre l'interface ppp0 (3g/wan) et eth0 (Lan) :
echo "1" > /proc/sys/net/ipv4/ip_forward
# pour conserver ce réglage au démarrage
echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conf
#NAT eth0 <> ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
Pour que ces réglages se chargent au démarrage :
# on sauvegarde les regles dans un fichier
iptables-save > /etc/iptables.ipv4.nat
#on active l'execution de /etc/rc.local
chmod +x /etc/rc.local
On ajoute cette ligne dans /etc/rc.local
avant 'exit 0':
iptables-restore < /etc/iptables.ipv4.nat
On doit pouvoir pinger google.com depuis la rpi Ă ce stade.
Configuration de dnsmasq
Dnsmasq est un serveur dhcp/dns très léger, d'ou son intérêt. On doit simplement modifier ces valeurs dans /etc/dnsmasq.conf
interface=eth0
dhcp-range=192.168.0.2,192.168.0.20,12h
- dhcp-range* correspond Ă la plage d'adresses qu'on veut fournir au clients DHCP.
Ici, on aura 19 adresses Ă offrir.
Configuration de l'IP statique d'eth0
On doit indiquer Ă l'interface 'eth0' quelle sera son IP en local. On
Ă©dite donc /etc/network/interfaces
et on Ă©dite ainsi :
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 192.168.0.1
network 192.168.0.0
netmask 255.255.255.0
On ajoute tant qu'on y est de quoi lancer la connexon 'ppp0' au démarrage :
auto ppp0
iface eth0 inet wvdial
Redémarrage
On éteint la rpi et on la déconnecte du lan.
On connecte un ordi, en direct ou via un hub, sur le port rj45 de la
rpi, et on y accède désormais en SSH via l'IP définie plus tôt, ici
192.168.0.1
.
Normalement, l'ordi connecté à la rpi via le câble peut accéder à internet. Si ce n'est pas le cas vérifier que ppp0 est bien up et que les règles iptables sont en place :
ifconfig ppp0
iptables -S FORWARD
Openvpn Passthrough
On peux installer 'openvpn' pour faire passer tout le traffic de la rpi par un VPN. Pour 'proprifier' mon internet, moi, j'utilise du vpn FDN, parce que je suis sûr que des gens consciencieux et compétents sont derrières. (Pour l'histoire, FDN, c'est le plus vieux FAI de france encore en activité, et c'est une asso.)
apt-get install openvpn
On récupère les fichiers de config de son fournisseur VPN, et on les
mets dans /etc/openvpn
Ensuite, on ajoute d'autres règles 'iptables' pour forwarder via le VPN :
#openvpn
iptables -I OUTPUT -o tun+ -j ACCEPT
iptables -I INPUT -i tun+ -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I FORWARD -o tun+ -j ACCEPT
iptables -I FORWARD -i tun+ -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -I POSTROUTING -o tun+ -j MASQUERADE
On sauve tout ça :
iptables-save > /etc/iptables.ipv4.nat
et on lance le vpn :
openvpn /etc/openvpn/config.ovpn
Normalement, on a accès à internet, et on peut vérifier sur whoer.net qu'on a bien une IP du range du fournisseur VPN.
Bilan
Sans l'antenne
Le dongle 3g est collé à la fenêtre, le signal est de 8 sur 30.
$ comgt -d /dev/ttyUSB2 SIM ready
Waiting for Registration..(120 sec max)
Registered on Home network: "Bouygues Telecom",2
Signal Quality: 8,99
Avec l'antenne
L'antenne est reliée au dongle 3g, posée en extérieur, à une hauteur d'environ 2 mètres du sol, et orientée à la louche vers une antenne à 5 km. Le signal passe à 10.
$ comgt -d /dev/ttyUSB2 SIM ready
Waiting for Registration..(120 sec max)
Registered on Home network: "Bouygues Telecom",2
Signal Quality: 10,99
Installation définitive
C'est déjà un succès pour moi, car je retrouve un débit digne d'une ligne ADSL de base, bien suffisant pour du web/mail/ssh...
À terme, l'antenne sera installée sur le toit, et sera orientée plus minutieusement, avec une inclinaison de ~ 30°, ce qui devrait faire gagner encore quelques dB...
Ă€ suivre !
Sources
http://www.instructables.com/id/Raspberry-Pi-as-a-3g-Huawei-E303-wireless-Edima/?ALLSTEPS
http://www.raspberrypi.org/forums/viewtopic.php?t=92594&p=646656
https://www.alionet.org/showthread.php?22664-Cl%E9-3G-Bouygues-Comment-faire