cette page a pour but de présenter l'installation d'openvpn sur un système openwrt (sur un routeur notamment) afin d'utiliser le vpn de faimaison chez soi…

01) brancher le routeur nouvellement acquis et allez sur la page d'admin (192.168.1.1 généralement)

02) dans la section “mise à jour” uploader le fichier openwrt trouvé sur le site et correspondant à votre routeur : https://wiki.openwrt.org/toh/start

03) installer openvpn via l'interface LuCI : dans /System/Software/ penser à « update lists » puis dans /Available packages installer « nano » et « openvpn-openssl »

04) se connecter en ssh au routeur : ssh root@ip_local_du_routeur

05) dans /etc/openvpn/ créer un fichier appelé « faimaison.ovpn » (en utilisant nano) et coller la conf ci-dessous :

# ########################################################################### #
# FAImaison
# Fichier de configuration du client OpenVPN
# fma_client.ovpn
# ########################################################################### #

## Type de configuration
client

## Interface
dev tun

## Protocole utilisé (tcp/udp)
proto udp

## en UDP, décommentez cette ligne, le serveur sera alors notifié quand vous vous déconnecterez, ce qui permettra d'éviter de vous envoye$
## explicit-exit-notify

## Serveur (adresse et port)
remote vpn.faimaison.net 1194

## Verification du certificat du serveur
ns-cert-type server

## le Common Name du certificat doit être "vpn.faimaison.net" pour être accepté
verify-x509-name vpn.faimaison.net name

## Essayer de se connecter à l'infini, et au dela
resolv-retry infinite

## Pas besoin de se lier a un port local
nobind

## Configuration persistante au redemarrage
persist-key
#persist-tun

## MTU du lien (cas particulier d'un point d'accès avec un routeur 4g où la valeur '1380' fonctionne mieux)
link-mtu 1541
#link-mtu 1380

## Verbosité des logs
verb 3

## redirige tout le trafic vers ce vpn
redirect-gateway def1

## on ne stock pas les identifiants de l'utilisateur en mémoire
#auth-nocache

## Les identifiants de l'utilisateur (username + password) sont stockés dans un fichier "passFMA" à coté de ce fichier de config
## la premiere ligne sera le login, et la deuxieme le mot de passe
## Il est aussi possible de passer l'option '--auth-user-pass' au lancement de
## la commande openvpn, pour se voir demander ces informations  
auth-user-pass /etc/openvpn/passFMA

## compatibilité windows
route-method exe

## on attend un peut avant d'ajouter la route via le vpn, le temps que notre adresse IP soit récupérée
route-delay 2

## options rajoutés en s'inspirant de la conf de carlota pour éviter que le vpn ne se coupe (utile si serveur derrière la connexion)
#ping crée du traffic pour que le serveur soit actif toute les 10s envoie un paquet
ping 10
#ping-restart écoute le traffic et redémarre si il n'y a rien au bout de 30s
ping-restart 30

## avoir des logs
log-append /var/log/openvpn.log
status /var/log/openvpn-status.log

## Certificat de la CA de FAImaison
<ca>
-----BEGIN CERTIFICATE-----
MIIFBjCCA+6gAwIBAgIJAIY1ylYTFFj0MA0GCSqGSIb3DQEBCwUAMIGyMQswCQYD
VQQGEwJGUjEZMBcGA1UECBMQUGF5cyBkZSBsYSBMb2lyZTEPMA0GA1UEBxMGTmFu
dGVzMRIwEAYDVQQKEwlGQUltYWlzb24xEDAOBgNVBAsTB09wZW5WUE4xCzAJBgNV
BAMTAkNBMR0wGwYDVQQpExRGQUltYWlzb24gT3BlblZQTiBDQTElMCMGCSqGSIb3
DQEJARYWYWRtaW5zeXNAZmFpbWFpc29uLm5ldDAeFw0xNjA2MzAyMjQ2MTFaFw0y
NjA2MjgyMjQ2MTFaMIGyMQswCQYDVQQGEwJGUjEZMBcGA1UECBMQUGF5cyBkZSBs
YSBMb2lyZTEPMA0GA1UEBxMGTmFudGVzMRIwEAYDVQQKEwlGQUltYWlzb24xEDAO
BgNVBAsTB09wZW5WUE4xCzAJBgNVBAMTAkNBMR0wGwYDVQQpExRGQUltYWlzb24g
T3BlblZQTiBDQTElMCMGCSqGSIb3DQEJARYWYWRtaW5zeXNAZmFpbWFpc29uLm5l
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMKRZm+K1SEnvS6fNoSX
eHGjGl6CyTaQvC4NEMEEVA4bLSBoFnfPjmvFa9gVSN3l757id+KtIBjjJpsTjSSL
JT+uTv4w0ApS6JZssBIltSg1FGzIh0WAJbOBjlC1if8mHnAVRaFM7YzZGy/RUEp/
6dl6rvJW2zf+bLxHpFZV5mxHkAkmiHweEEv8BXcXbQK9UkTpWN4icU8IQpnkSnFV
JAb6308DRqmwz+5sSuAyqDtjmJx/+M2pOSPCCrK6eV9D5aJqOvVCXFQ2s5Q7qilQ
KUJ+GKLne3Z3yHI1WWIvUxLSfPtciOz2EGAuJWQ9WSJNu/3iQSzA191o/pGmNc4Q
qIMCAwEAAaOCARswggEXMB0GA1UdDgQWBBSp+ECuBVx9WGgao9xy+H6jgvWj2zCB
5wYDVR0jBIHfMIHcgBSp+ECuBVx9WGgao9xy+H6jgvWj26GBuKSBtTCBsjELMAkG
A1UEBhMCRlIxGTAXBgNVBAgTEFBheXMgZGUgbGEgTG9pcmUxDzANBgNVBAcTBk5h
bnRlczESMBAGA1UEChMJRkFJbWFpc29uMRAwDgYDVQQLEwdPcGVuVlBOMQswCQYD
VQQDEwJDQTEdMBsGA1UEKRMURkFJbWFpc29uIE9wZW5WUE4gQ0ExJTAjBgkqhkiG
9w0BCQEWFmFkbWluc3lzQGZhaW1haXNvbi5uZXSCCQCGNcpWExRY9DAMBgNVHRME
BTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAMcMCiOcB+HM8RI5Yq488yO8oghnmr
D/Cawtn+eOHh/j4TI8RqbgNiRCKybnOkloYsqg32iBB0DciPI2eq1OvgtZckUzqC
u84nNxiesaKALH84TJZtBf7zOjNsOX2b6b5FXP5Z0WtCrOwNbMhrWF9v4O9siuNj
aRFeEexeIyk3QNO5AmkjKQfA0h3BAd5ySLc2tbezTSyHTS0CSCNOsbArL8xU70oS
BWAJQPTFoCD/JGR1HhsMAU6t0odEVJ58bYyeZVaijoK3AlnqZ8BTCyqYK4Y0yZMJ
OixgAbQgwlZPLGOKci04jcPMMdOhesY46oyp5Gjy7+lNyAUqbXi/NzBu
-----END CERTIFICATE-----
</ca>

06) puis créer un fichier « passFMA » également dans /etc/openvpn/ contenant vos identifiants et mot de passe VPN fourni par FAImaison. Exemple :

pseudo
mot-de-passe

07) pour modifier les DNS et ne pas prendre ceux de la box :

[attention de prendre des DNS ouverts car sinon si le VPN se relance il ne pourra pas résoudre les noms de domaine si le DNS est fermé et on se coupe les pattes sur la branche sur laquelle on est assise].

uci set network.wan.peerdns='0'

uci delete network.wan.dns

uci add_list network.wan.dns='80.67.169.40'

uci add_list network.wan.dns='80.67.188.188'

uci commit

https://diyisp.org/dokuwiki/doku.php?id=technical:dnsresolver

fin de conf et historique extrait d'échange email :

8) Alors que ça avait bien roulé dans mon setup similaire (VPN pour une salle de formation, qui a tourné pendant trois mois), j'ai eu quelques petites déconvenues :

- si le tunnel crashait, il ne remontait pas tout seul (probablement dû au changement d'IP de SFR ?) - aucun log pour savoir ce qu'il se passe

Du coup j'ai amélioré un peu la chose :

Au lieu de la ligne dans /etc/rc.local, j'utilise un service propre. Pour utiliser le service openvpn (/etc/init.d/openwrt) :

Effectuer les commandes suivantes :

uci set openvpn.fma_client=openvpn

uci set openvpn.fma_client.enabled='1'

uci set openvpn.fma_client.config='/etc/openvpn/faimaison.ovpn'

uci commit

(le nom fma_client est arbitraire et peut être changé pour ce que vous voulez, le fichier /etc/openvpn/faimaison.ovpn est à remplacer par le bon chemin de fichier de conf openvpn).

/etc/init.d/openvpn enable

Un reboot plus tard, ça fonctionnait

9) De retour dans l'interface LuCI d'openwrt :

Dans Network/Interfaces éditer “lan” et changer l'adresse ip local (par exemple 192.168.2.1). Ainsi si vous branchez votre routeur à une box (avec généralement une ip local 192.168.1.1) les 2 n'entreront pas en conflit (sinon ça tourne en rond).

10) Dans l'onglet /Network/Interfaces/ cliquer sur « New Interface »

“name” : wanvpn

“Protocol of the new interface” : unmanaged

Dans “Cover the folowing interface” entrez la valeur “tun0”

cliquez sur “submit”. Une fois créé allez dans l'onglet “firewall settings” cliquez sur “unspecified -or- create:” et rentrer la valeur “wanvpn” puis appuyez sur entrée.

11) Dans l'onglet /Network/Firewall/General Settings/Zones

wanvpn doit être à input : reject ; outpout : accept ; forward : reject

cocher masquerading cocher mssclamping

si vous “éditer” wanvpn vérifier que “lan” est bien coché dans : Allow forward from source zones: lan

si vous “éditer” lan : décocher “wan” dans le Zones de “lan” et dans Allow forward to destination zones: wanvpn

[déjà intégré dans les étapes ci-dessus]

*Des logs !*

Pour suivre un peu ce qui se trame, j'ai ajouté des logs (et un fichier de statut). J'ai ajouté les fichiers suivants

log-append /var/log/openvpn.log
status /var/log/openvpn-status.log

à mon fichier .ovpn, il faut ensuite relancer openvpn /etc/init.d/openvpn restart

Ces logs m'ont permis de constater que le processus de redémarrage automatique du tunnel en cas de changement d'IP (ou tout autre problème réseau) fonctionnait, puisque ce matin vers 10h, les logs ont dit :

[…]
Tue Mar 28 10:07:34 2017 [vpn.faimaison.net] Inactivity timeout (–ping-restart

), restarting

Tue Mar 28 10:07:34 2017 SIGUSR1[soft,ping-restart] received, process restarting
[…]

… Et la connexion est remontée toute seule

Restent deux souci avec ce setup :

1) je pense que les requêtes DNS passent toujours par le DNS SFR. À vérifier et améliorer le cas échéant…

2) Même si ça fonctionne, j'ai toujours une erreur au redémarrage du tunnel :

Enter Auth Username:Tue Mar 28 10:07:42 2017 ERROR: could not read Auth username from stdin. En tombant sur ce sujet : https://sourceforge.net/p/openvpn/mailman/message/23742332/ j'ai tenté de commenter l'option “auth-nocache” pour voir si ça faisait le job. Réponse demain au changement d'IP

Cette doc m'a beaucoup aidé :

https://github.com/jlund/streisand/wiki/Setting-an-OpenWrt-Based-Router-as-OpenVPN-Client

… La doc sur le wiki opewrt n'étant pas top pour ce cas d'utilisation je trouve.