Tuto Client OpenVPN

De Wiki LDN
Aller à : navigation, rechercher


TODO,

  • kill switch

Configuration de base

Page dédiée

Voir la page Ajouter un compte VPN.

Limitations et problèmes

Choses non gérées dans cette configuration (et à améliorer):'

  • IPv6 natif (il est préférable de couper l'IPv6 natif);
  • gestion du DNS (à faire !);
  • bypass-dns et bypass-dhcp ne marchent que sous Windows :/, il faut le faire à la main.

Problèmes :

  • ne marche pas avec IPv6 pour le transport parce qu'il n'ajoute pas la route spécifique IPv6 de access pour ne pas se couper l'herbe sous le pied (alors qu'il le fait en IPv4).

Meilleure configuration sous Linux

Décommenter dans la configuration :

script-security 2
route-up client-handler 
down client-handler

Placer "client-handler" dans le même répertoire que le fichier de configuration OpenVPN. Ce script configure l'utilisation des serveurs de noms du VPN:

#!/bin/sh

# env > env-$script_type.txt

# This interface has precedence over most interaces
# in openresolv/resolvconf:
rdev=lo

# ##### Routing

keep_routes() {
   local ip
   for ip in "$@"; do
       ip route add $(ip route get "$ip" | head -n1)
   done
}

drop_routes() {
   local ip
   for ip in "$@"; do
       ip route del $(ip route get "$ip" | head -n1)
   done
}

# ##### DHCP

# Write foreign options to stdout:
foreign_options() {
   local i
   while true; do
       local varname=foreign_option_$i
       local value="$(eval echo \$$varname)"
       if [ -z "$value" ]; then
           return
       fi
       i=$((i+1))
   done
}

# Get resolvconf configuration:
create_resolvconf() {
   foreign_options | grep "^dhcp-option DNS " | sed "s/^dhcp-option DNS /nameserver /"
}

# ##### Eventss

route_up() {
   # Append nameservers to resolvconf (it would be better to override them):
   create_resolvconf | resolvconf -a $rdev
   # keep_routes $trusted_ip6
}

down() {
   resolvconf -d $rdev
   # drop_routes $trusted_ip6
}

# TODO, support for http-proxy

case "$script_type" in
   route-up) route_up "$@" ;;
   down) route_pre_down "$@" ;;
esac

TODO, il existe un script "standardisé" (distribué dans Debian) pour la gestion des options DHP (/etc/openvpn/update-resolve-conf) qui peut être utilisé en préférence de ce code mais comme il utilise bash plutôt que sh, je recommande de ne pas l'utiliser pour le moment…

Ces deux scripts ajoutent les serveurs de nom plutôt de les remplacer. On peut remplacer la configuration avec openresolv en passant le paramètre -x (resvolconf -a $rdev -x).

Warning.png Attention

Ce script (ainsi que celui distribué dans debian) nécessite le paquet resolvconf (et openvpn ne sortira pas d'erreur si celui-ci manque).

Accéder au VPN dans un réseau très filtré

À essayer dans l'ordre :

  1. rester en UDP mais essayer un autre port (...) ;
  2. essayer de passer en TCP sur un des ports 80, 443, 8080 ;
  3. essayer de passer en TCP via un proxy HTTP.

Utilisation d'un proxy HTTP

Dans un réseau extrèmement filté mais avec un proxy HTTP, il est possible d'utiliser ce dernier :

 http-proxy 1.2.3.4 80

Utiliser le VPN en TCP probablement sur un des ports 80, 443, 8080. Les autres seront probablement bloqués au niveau du proxy.

Notes

« ifconfig-ipv6 » autorise uniquement des subnet /64 ou plus petit, pas plus grand : « Options error: ifconfig-ipv6: /netbits must be between 64 and 124, not '/56' ». Pénalisant dans le cas où l'on cherche à ne pas utiliser de subnet d'interco mais uniquement le préfixe délégué à l'utilisateur et que ce dernier est plus grand que /64 ... sauf à avoir recours à un script « up ».

Config ARN

Configuration ARN (un peu différente de la nôtre) :

# CONFIGURATION DE BASE - VOUS NE VOULEZ PROBABLEMENT PAS TOUCHER A CA
# GENERIQUE
daemon ovpn-arn				; Demon et loguera avec ID ovpn-arn


# OPTIONS CLIENT
client
remote vpn.arn-fai.net
nobind
 
dev tun					; Type d'interface
 
 
# TLS
ca /etc/openvpn/ca.crt
cert /etc/openvpn/$login.crt
key /etc/openvpn/$login.key
 
remote-cert-tls server
 
 
# DIVERS
; Logs
verb 3
mute 10					; On ne log pas plus de 10 messages consecutif de la meme categorie
 
; Compression dans le tunnel
comp-lzo
 
; Le client doit se signaler toutes les 10 secondes. Si rien au bout de 30 secondes, il doit
; restart sa session. Si rien au bout de 60 secondes, le serveur l'oubli
keepalive 10 30
 
 
# CONFIGURATION PERSONNALISABLE
# GENERIQUE

; Reduction des privileges
; Ne marche pas sous Windows !
; user openvpn
; group openvpn
 
; persist-key				; Ne pas relire les clés lors d'un ping-restart (pb de reduction des privileges)
; persist-tun				; Ne pas fermer la TUN, ne pas relancer les scripts up/down lors d'un ping-restart


# OPTIONS CLIENT
; UDP (v4 ou v6) doit etre privilegie sur TCP
proto udp
;proto udp6
;proto tcp-client
;proto tcp6-client
 
; LES DEUX OPTIONS SUIVANTES FONCTIONNENT SEULEMENT AVEC UDP
fragment 1300				; Pour contrer les encapsulations (ADSL, ...) et l'absence de MTU disco
mssfix
 
; Changer de port peut servir a contourner la politique de securite d'un réseau ... 
; port 1194
 
; Éventuellement, on peut avoir besoin de passer par un proxy http, décommenter cette ligne en mettant l'adresse et le port du proxy.
; http-proxy 192.0.2.1 8080
 
 
# CONFIG RESEAU
; IPv4
; Décommenter cette ligne pour faire passer tout le trafic IPv4 via le VPN
redirect-gateway def1
 
; On peut vouloir plutôt faire passer seulement quelques destinations IPv4 par le tunnel, par
; exemple ici tout LDN
; route 80.67.188.0 255.255.255.0
 
 
; IPv6
; IPv6 dans le tunnel
tun-ipv6
 
; Bloc delegue. Aucun moyen de gérer ici (le ifconfig-ipv6 d'interco pushé par le serveur sera le seul pris en compte).
; De plus, OpenVPN autorise seulement bloc <= 64. Ajout manuel ou script.
 
; Décommenter cette ligne pour faire passer tout le trafic IPv6 via le VPN
route-ipv6 ::/0
 
; ATTENTION : utiliser l'option precedente depuis un reseau disposant d'IPv6 en natif ne fonctionnera pas.
; Decommenter plutôt la ligne suivante
; route-ipv6 2000::/3
 
; ATTENTION : si vous établissez le tunnel au dessus d'IPv6 (proto udp6 ou tcp6-client), les deux lignes
; précédentes ne fonctionneront pas. Utiliser plutôt les commandes suivantes (dans un shell, pas en décommentant !)
; ip -6 route add $IPv6_SERVEUR_OPENVPN via $GATEWAY_NATIVE_v6
; ip -6 route replace default via $IP_INTERCO_VPN_v6
 
; On peut vouloir plutôt faire passer seulement quelques destinations IPv6 par le tunnel, par
; exemple ici tout LDN
; route-ipv6 2001:913::/36
 
 
; DNS
; Si vous redirigez tous votre trafic (IPv4 ou IPv6 ou les deux), vous pouvez rencontrer des problèmes pour
; résoudre les noms de domaine. Dans ce cas, utilisez, si votre réseau d'accès le permet, le serveur récursif
; d'ARN en décommentant les deux lignes suivantes :
; script-security 2
; route-up client-handler
 
; Ne plus utiliser le DNS récursif d'ARN lorsque le VPN est demonté. La deuxième ligne permet de combiner
; avec la reduction des privileges.
; route-pre-down /etc/openvpn/client-handler
; plugin /usr/lib/openvpn/openvpn-plugin-down-root.so "script_type=route-pre-down /etc/openvpn/client-handler"
 
 
; Le client previent de son depart (EN UDP UNIQUEMENT, c'est automatique en TCP)
explicit-exit-notify