Outils pour utilisateurs

Outils du site


une_raspberry_pi_comme_routeur_3g_avec_vpn_passthrough

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 :

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)
TargetVendor= 0x12d1
TargetProductList="1506"
MessageContent="55534243123456780000000000000011062000000100000000000000000000"' > /etc/usb_modeswitch.d/12d1\:15ca

On peut ensuite changer le mode de la clé avec :

usb_modeswitch -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

2015/03/13