Vous êtes sur la page 1sur 5

[Tuto] Configurer OpenWRT pour le VPN, le port forwarding et le proxy https://www.printfriendly.

com/p/g/DVYfLr

[Tuto] Configurer OpenWRT pour le VPN, le port forwarding et le proxy


freedom-ip.com/forum/viewtopic.php

dethegeek
Membre

Inscription : 2014-01-14

Messages : 43

Bonjour

Je propose un tutoriel pour configurer OpenWRT avec OpenVPN de manière à utiliser les services de Freedom-IP. Le début n'est
qu'introduction et présentation rapide d'OpenWRT (car il mérite à être connu et utilisé). Je suppose qu'OpenWRT 12.09 est installé sur un
routeur et possède une configuration permettant d'accéder à internet sans VPN.

Le 2e message de ce sujet contient des notes sur les corrections, améliorations, et limitations de ce tuto. Il est important de lire les
limitations avant de se lancer. A mesure que des améliorations serons faites, elles y seront historisées.

# Introduction
Je suis de plus en plus fâché avec les politiques de respect de la vie privée des grands de ce monde et des grands du monde virtuel (enfin..
d'internet). C'est d'ailleurs une des raisons qui nous rassemblent autour de Freedom-IP. Je n'utilisais le service VPN qu'occasionnellement et
j'estime qu'un usage en pointillé d'un VPN revient à ne pas en avoir du tout. J'ai donc cherché à profiter d'un VPN permanent, pour tous les
équipements ayant accès à internet chez moi. Je veux une solution à configurer et à oublier.

J'utilise OpenWRT sur un routeur grand public de chez Netgear depuis pas mal d'années (WNR854T). C'est donc l'endroit idéal pour
configurer en 1 seule fois la protection totale que je veux obtenir (du point de vue VPN, car le VPN n'est qu'une seule brique d'un grand
chantier que je mène pour rétablir mes droits fondamentaux sur la vie privée).

OpenWRT fonctionne si bien avec mon routeur que quand celui-ci a rendu l'âme il y a 2 mois, je l'ai remplacé à l'identique. C'est pourtant un
produit obsolète (facilement trouvable en occasion à moins de 30 euros; auxquels il faut rajouter l'achat d'une interface wifi mini-pci
compatible (Atheros idéalement).

# OpenWRT - c'est quoi ?


OpenWRT est un logiciel interne (firmware) alternatif, non officiel, mais en source ouvert (open source) et gratuit. Il remplace le firmware
d'un routeur afin d'ouvrir l'accès à une immense quantité de nouvelles fonctionnalités. De nombreux routeurs peuvent être mis à jour pour
fonctionner avec OpenWRT ( http://wiki.openwrt.org/toh/start ).

# Tutoriel
Ce tuto montre comment configurer OpenVRT de manière à utiliser le VPN sans avoir à configurer quoi que ce soir sur les ordinateurs du
réseau local. Cela est valable pour tout les équipements : PC, téléphones (en wifi), tablettes, consoles de jeu (donc attention aux
performances des jeux en ligne en terme de latence).

En supplément facultatif : ouverture du port 22 (SSH) pour une utilisation d'un serveur SSH depuis internet. Cela est transposable assez
facilement pour d'autres services.

Second supplément : Utilisation d'un proxy routé hors du VPN pour une utilisation des deux services principaux de FIP : économie de bande
passante soumise au quota mensuel.

# Prérequis
Un routeur sous OpenWRT 12.09 (attitude adjustment). La version précédente devrait fonctionner également
Un PC sous windows
le logiciel Putty http://www.putty.org/
le logiciel WinSCP http://winscp.net/eng/download.php

Ceux qui utilisent linux devraient être autonomes sur le choix et l'utilisation des outils requis. Sinon, le mieux est de poser la question.

# Installation d'OpenVPN
Se connecter à OpenWRT via son interface web Luci.

Aller dans le menu System > Software

Cliquer sur Update package lists. Dans Download and install package saisir openvpn et cliquer sur le bouton OK.

# Création d'une nouvelle interface


Aller dans le menu Network > Interfaces, cliquer sur Add new interface.

1 sur 5 01/07/2019 à 23:58


[Tuto] Configurer OpenWRT pour le VPN, le port forwarding et le proxy https://www.printfriendly.com/p/g/DVYfLr

Remplir le formulaire avec les informations suivantes :


Name of the new interface : vpn
Protocol of the new interface : Unmanaged
Create a bridge over multiple interfaces : décoché
Cover the following interface : Custom Interface : tun0
Cliquer sur Submit.

L'interface tun0 est maintenant créée et affichée. Cliquer sur l'onglet Firewall Settings. Choisir la zone rouge wan, puis cliquer sur Save and
apply.

# configuration d'OpenVPN
Pour l'instant OpenWRT 12.09 n'a plus d'interface graphique stable pour configurer OpenVPN. La configuration se fera donc à la main et de
manière simple.

Ouvrir WinSCP et ouvrir une nouvelle connexion vers le OpenWRT :


Protocole de fichiers : SCP
hôte : IP privée (côté LAN) d'OpenWRT
port : 22
utilisateur : root
mot de passe : <votre mot de passe>

Il est possible que des messages d'erreurs apparaissent après la connexion. Ils ne sont pas génants.
Dans le panneau de droite naviguer dans /etc/openvpn. Appuyer sur F7 pour créer un nouveau dossier nommé freedom-ip

Télécharger sur le site de Freedom-IP le ZIP contenant la configuration d'OpenVPN. Décompresser l'archive dans un dossier du PC. Copier
avec WinSCP les fichiers dans le dossier freedom-ip créé sur le routeur.

Avec WinSCP créer un nouveau fichier dans le dossier freedom-ip du routeur, nommé login.txt
Saisir sur la première ligne l'identifiant de connexion VPN de Freedom-IP
Saisir sur la seconde ligne le mot de passe de connexion VPN de Freedom-IP

cliquer sur un des fichiers .ovpn, le dupliquer en appuyant sur MAJ+F5. Dans le répertoire distant de destination conserver le chemin et
remplacer *.* par openvpn.ovpn. La configurationdu serveur est copiée dans un nouveau fichier et sera utilisé pour le tunnel permanent.

Cliquer droit sur openvpn.ovpn et modifier les lignes suivantes :

auth-user-pass /etc/openvpn/freedom-ip/login.txt

Eventuellement modifier la ligne remote pour utiliser na nouvelle fonction de selection automatique de serveur dans un pays donné. Exemple
:

remote nl1.freedom-ip.com

deviendra

remote nl-any.freedom-ip.com

Enregistrer les changements et fermer le fichier.

Dans WinSCP, se rendre dans le dossier du routeur /etc/config.

Sélectionner le fichier openvpn. Appuyer sur MAJ+F5 pour copier le fichier. Conserver le chemin et remplacer *.* par openvpn.stock

Editer le fichier openvpn et remplacer son contenu par le texte suivant

package openvpn
config openvpn 'freedom_ip'

# Set to 1 to enable this instance:


option enabled 1

# Include OpenVPN configuration


option config /etc/openvpn/freedom-ip/openvpn.ovpn
option verb '3'

Enregistrer les changements et fermer le fichier.

Ouvrir une session SSH sur le routeur OpenWRT

Tester la connexion el exécutant la commande suivante

/usr/sbin/openvpn --verb 3 --config /etc/openvpn/freedom-ip/openvpn.ovpn

OpenVPN s'exécute et affiche des lignes détaillant son démarrage.

2 sur 5 01/07/2019 à 23:58


[Tuto] Configurer OpenWRT pour le VPN, le port forwarding et le proxy https://www.printfriendly.com/p/g/DVYfLr

Si OpenVPN arrête d'aficher du texte et que la dernire ligne est similaire à la ligne suivante :

Jan 15 07:38:13 OpenWrt daemon.notice openvpn(custom_config)[5078]: Initialization Sequence Completed

alors la connexion a réussi. Si ce n'est pas le cas, utiliser les messages affichés pour diagnostiquer les problèmes.
Appuyer sur CTRL+C pour arrêter OpenVPN.

# Utilisation d'un service DNS dynamique


Si des services locaux doivent être accessibles depuis internet (serveur HTTP, SSH, ...) et qu'un hôte DNS dynamique doit être mis à jour, le
nom d'hôte sera mis à jour avec l'IP du serveur VPN du prestataire. Pour éviter cela, ll faut faire une requête HTTP à un service comme
checkip.dyndns.com pour connaitre son IP publique sur internet, mais sans passer par le tunnel VPN.

Identifier les adresses IP du service d'identification d'IP publique :

nslookup checkip.dyndns.com
Server: 127.0.0.1
Address 1: 127.0.0.1 localhost.

Name: checkip.dyndns.com
Address 1: 216.146.38.70 checkip-iad.dyndns.com
Address 2: 216.146.39.70 checkip-lax.dyndns.com
Address 3: 216.146.43.70 checkip.dyndns.com
Address 4: 91.198.22.70 checkip-ams.dyndns.com

Ce nom d'hôte retourne 4 adresses IP qu'il faudra router hors du VPN.

Ouvrir le fichier /etc/config/openvpn avec WinSCP et ajouter les lignes suivantes (une ligne par IP) :

list 'route' '216.146.38.70 255.255.255.255 net_gateway'


list 'route' '216.146.39.70 255.255.255.255 net_gateway'
list 'route' '216.146.43.70 255.255.255.255 net_gateway'
list 'route' '91.198.22.70 255.255.255.255 net_gateway'

Lancer le service OpenVPN :

/etc/init.d/openvpn start

Exécuter la commande suivante

logread -f

et attendre l'affichage de la ligne

Jan 15 07:38:13 OpenWrt daemon.notice openvpn(freedom_ip): Initialization Sequence Completed

Taper CTRL+C pour arrêter la lecture des journaux.

Après quelques secondes supplémentaires la table de routage devrait afficher des routes dédiées à ces 4 adresses IP :

route -n

Si ces routes n'apparaissent pas, ajouter dans /etc/config/openvpn la ligne suivante :

option verb '3'

Cela activera le mode verbeux au niveau 3 pour voir ce qu'il se passe dans le journal système. Ce journal filtré pour n'afficher que ce qui
concerne OpenVPN est lisible avec la comande :

logread | grep openvpn

Tester le routage :

root@OpenWrt:~# traceroute to yahoo.fr (87.248.120.148), 30 hops max, 38 byte packets


1 10.10.0.1 340.622 ms 126.808 ms 277.793 ms
2 37.187.56.252 194.858 ms * *
3 91.121.131.138 317.556 ms 184.116 ms 287.957 ms
4 ...
root@OpenWrt:~# traceroute 216.146.38.70 -n
traceroute to 216.146.38.70 (216.146.38.70), 30 hops max, 38 byte packets
1 192.168.1.1 2.194 ms 1.530 ms 2.301 ms
2 80.10.127.21 64.163 ms 33.192 ms 21.685 ms
3 10.123.199.138 21.307 ms 22.205 ms 23.421 ms
4 193.252.99.238 98.647 ms 56.943 ms 65.981 ms
5 81.253.184.10 71.747 ms 62.304 ms 47.402 ms

Une route qui n'emprunte pas le VPN affichera en ligne 1 l'adresse IP publique du routeur. Une route qui emprunte le VPN utilise une IP
différente (ici 10.10.0.1)

3 sur 5 01/07/2019 à 23:58


[Tuto] Configurer OpenWRT pour le VPN, le port forwarding et le proxy https://www.printfriendly.com/p/g/DVYfLr

Pour automatiser le démarrage du VPN au (re)démarrage du routeur taper la commande suivante

/etc/init.d/openvpn enable

Redirection de ports (port forwarding) hors VPN


Si le routeur est configuré pour rediriger des connexions entrantes vers un serveur du réseau local, ces services ne sont plus accessibles
une fois le VPN en fonctionnement. La cause est que les paquets IP envoyés par le serveur sont dirigés dans le tunnel VPN alors que la
connexion demandée depuis internet est acheminée via l'IP publique du routeur, autrement dit "hors VPN'. Cela produit une incohérence où
les réponses des services, du point de vie du client, semble venir d'un autre serveur. Les paquets sont donc généralement ignorés.

Exemple avec le port 22 utilisé pour un accès en SSH :

Ouvrir l'interface web d'OpenWRT, se rendre dans Network, Firewall, Custom rules.

Ajouter dans le fichier affiché le code suivant, en remplacant les 2 occurences de eth1 par le nom de l'interface côté WAN. Modifier
également l'IP 192.168.16.20 par l'IP (dans le LAN) du serveur SSH. si le routeur n'utilise pas br-lan comme interface côté LAN, changer
également ce nom en fonction de la configuration.

nonvpngw=`ip route show 0.0.0.0/0 dev eth1 | cut -d\ -f3`


echo nonvpngw $nonvpngw

ip route add default via $nonvpngw dev eth1 table 128


ip rule add fwmark 1 lookup 128

# Une commande par port à ouvrir


iptables -A PREROUTING -t mangle -i br-lan -s 192.168.16.20 -p tcp -m tcp --sport 22 -j MARK --set-mark 1

Explication : Le code crée une nouvelle table de routage numéro 128 contenant une route par défaut. La route par défaut utilise la passerelle
hors VPN. Quanf un paquet IP provient de l'interface côté LAN, et que l'IP émetrice du paquet est l'IP du serveur SSH, et provient du port 22
(et avec le protocole TCP) alors le paquet est marqué avec le nombre arbitraire 1. Au moment du routage, les paquets marqués avec ce
nombre 1 sont routés en utilisant la table 128. Les autres paquets utilisent le chemin "normal" (le tunnel VPN).

Attention cependant : le trafic ne passant pas par le VPN n'est pas masqué ! le Fournisseur d'Accès Internet peut collecter les adresses IP
qui communiquent par les ports ouverts de cette façon. Il faut donc bien réfléchir aux conséquences de l'ouverture de tel ou tel service. (le
cryptage est de rigueur).

Redémarrer le pare-feu d'OpenWRT pour appliquer ces changements :

/etc/init.d/firewall restart

# Routage hors VPN du proxy


De la même manière que l'ouverture de port, il est possible de configurer OpenWRT pour ne pas utiliser le VPN pour le trafic destiné à un
proxy.

# routage du proxy hors du VPN (uk.freedom-ip.com sur le port 3128)


# Pour trouver l'IP d'un autre serveur de proxy : nslookup nl1.freedom-ip.com
# le port est documenté par le fournisseur de proxy
iptables -A PREROUTING -t mangle -i br-lan -d 94.23.156.248 -p tcp -m tcp --dport 3128 -j MARK --set-mark 1

/etc/init.d/firewall restart

configurer un navigateur pour utiliser le proxy. Ouvrir une page web quelconque (une page qui affiche son IP par exemple)

Vérifier que le routage fonctionne comme prévu : le compteur de paquets concernés par cette nouvelle règle doit être supérieur à 0

iptables -nvL -t mangle

Le résultat ressemble à quelque chose comme ceci (la 2e ligne est celle qui nous intéresse, reconnaissable à l'IP destination et le port
destination) :

4 sur 5 01/07/2019 à 23:58


[Tuto] Configurer OpenWRT pour le VPN, le port forwarding et le proxy https://www.printfriendly.com/p/g/DVYfLr

Chain PREROUTING (policy ACCEPT 153 packets, 28234 bytes)


pkts bytes target prot opt in out source destination
1897K 440M MARK tcp -- br-lan * 192.168.0.20 0.0.0.0/0 tcp spt:22 MARK set 0x1
70 4245 MARK tcp -- br-lan * 0.0.0.0/0 94.23.145.69 tcp dpt:3128 MARK set 0x1

Chain INPUT (policy ACCEPT 40 packets, 3163 bytes)


pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 112 packets, 25039 bytes)


pkts bytes target prot opt in out source destination
72M 58G zone_wan_MSSFIX all -- * * 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy ACCEPT 25 packets, 2316 bytes)


pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 137 packets, 27355 bytes)


pkts bytes target prot opt in out source destination

Chain zone_wan_MSSFIX (1 references)


pkts bytes target prot opt in out source destination
41614 2176K TCPMSS tcp -- * wlan0-1 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU

La 2e ligne étant celle qui nous intéresse, les compteurs ne doivent plus être nuls si un navigateur configuré avec le proxy a chargé au
moins 1 page web. Cela prouve que le routage fonctionne comme attendu.

# Commandes utiles
Pour désactiver le démarrage automatique d'openVPN :

/etc/init.d/openvpn disable

Pour arrêter OpenVPN :

/etc/init.d/openvpn stop

5 sur 5 01/07/2019 à 23:58

Vous aimerez peut-être aussi