Bon alors.. la dernière fois que j’ai écrit un billet dans bloguelinux.ca, c’était le 22 octobre 2011 soit il y a 3 ans et 7 mois. Il faut dire que depuis l’arrivée de notre podcast, j’ai pu communiquer de vive voix ce que je voulais exprimer concernant mes bidouillages techniques. Mais cette fois-ci, considérant la complexité de ce que je veux démontrer, j’ai préféré écrire un billet décrivant la marche à suivre dans ses moindres détails.
Cela faisait littéralement des mois que je procrastinais à accomplir ceci. Jusqu’à il y a quelques jours, dès que mon serveur démarrait, le client OpenVPN démarrait automatiquement avec sa configuration par défaut. L’avantage de faire ceci est que tout le traffic réseau entrant et sortant de mon serveur CentOS est encrypté mais par contre mon serveur devient isolé dû à la connexion OpenVPN. Donc, il n’est pas possible de créer une règle sur mon routeur pour me permettre d’accèder à mon serveur de l’extérieur via SSH ou HTTP (en fait je peux très bien créer la règle mais elle ne permettra pas d’accéder à mon serveur). Et la seule raison pourquoi j’ai configuré OpenVPN ainsi est pour mon client Bittorrent, c’est en fait le seul traffic réseau que je désire voir obligatoirement encrypté.
Il y a tout prêt d’un an, j’ai fait des recherches pour trouver un façon de configurer OpenVPN et Transmission (mon client Bittorrent) pour que seulement le contenu de Transmission passe par OpenVPN, en faisant ceci, mon serveur redeviendrait accessible de l’extérieur. J’ai trouvé plusieurs articles et billets sur divers blog et forums qui expliquaient la marche à suivre mais plusieurs d’entres-eux semblaient se contredire et utilisaient des méthodes relativement différentes (qui sans doute fonctionnaient pour les auteurs). Une autre chose qui m’intimidait est que presque toutes ces méthodes demandaient l’utilisation de Netfilter/iptables. iptables a toujours été intimidant pour moi et je ne crois pas que je serais un jour vraiment à l’aise à utiliser cette commande en toute confiance.
J’abaisse mon chapeau bien bas pour le sérieux coup de pouce que Sandrine m’a donné afin de finalement faire fonctionner ceci. Elle avait déjà trouvé un billet de blog expliquant la marche à suivre, l’a adapté selon ses besoins et l’a fait fonctionner dans son environnement il y a plus de 6 mois. Tout ce que je fais ici est de documenter en détails les étapes que j’ai suivi pour arriver au même résultat que Sandrine (la seule différence étant que j’utilise CentOS et elle Debian).
Quelques détails avant d’entrer dans le vif du sujet. J’utilise les services de Private Internet Access (https://www.privateinternetaccess.com) pour mon accès VPN et je suis satisfait de leurs services depuis que je suis avec eux. Je ne peux que vous les recommander (Patrick en est aussi très satisfait, Sandrine est avec ProXPN, un autre excellent fournisseur de service VPN) . De plus, veuillez prendre note que cette marche à suivre est basée sur CentOS 6.6 (c’est ce que je roule sur mon serveur) que j’ai configuré avec une adresse IP statique. Puisqu’il s’agit de CentOS qui utilise SELinux et qui est activé par défaut, il faut s’assurer de le désactiver pour que cette marche à suivre fonctionne (j’ai passé 4 jours à sacrer avant de réaliser que j’avais oublié de le désactiver). Finalement, il y probablement 87 façons différentes d’arriver au même résultat (j’exagère un peu…) mais c’est de cette façon que je l’ai configuré sur mon serveur.
Une fois votre CentOS démarré et fonctionnel (configuré avec une adresse IP fixe et un compte d’utilisateur autre que root), vous êtes prêt à commencer:
Désactivé SELinux
Changer « net.ipv4.ip_forward = 0 » pour « net.ipv4.ip_forward = 1 »
Ajouter une nouvelle entrée dans le fichier de table de routage « rt_tables »
Redémarrer CentOS
Créer une nouvelle interface locale avec l’adresse IP 192.168.0.1 Note importante: Si vous utilisez déjà le sous-réseau 192.168.0.x dans votre environnement, changez 192.168.0.1 pour autre chose, par exemple: 10.0.0.1 et remplacez 192.168.0.1 par 10.0.0.1 dans les scripts « up.sh » et « down.sh » que vous verrez plus tard.
Créer un nouveau fichier /etc/sysconfig/network-scripts/ifcfg-lo:1 avec le contenu suivant
Installer openvpn
Télécharger les fichiers de configuration de Private Internet Access
Extraire le fichier openvpn.zip
Déplacer ca.crt et crl.pem dans /etc/openvpn
Créer un répertoire « locations » sous /etc/openvpn
Déplacer tous les fichiers *.ovpn du fichier openvpn.zip dans /etc/openvpn/locations
Créer un lien symbolique (symlink) du fichier ovpn que vous désirez utiliser pour votre connexion OpenVPN
Voici le contenu du fichier /etc/openvpn/client.conf
Créer un fichier « login.txt » dans /etc/openvpn avec votre nom d’utilisateur sur la première ligne et votre mot de passe sur la deuxième (Il s’agit ici de votre nom d’utlisateur et mot de passe qui vous a été donné par votre founisseur VPN).
Changer les permissions (mode) du fichier login.txt
Créer un répertoire client sous /etc/openvpn
Créer les 3 fichiers suivants dans /etc/openvpn/client
up.sh
down.sh
watchdog_openvpn.sh (ce script surveille si OpenVPN a cessé de fonctionner et le redémarre au besoin)
Donner les permissions (mode) rwx—— (700) à ces 3 nouveaux fichiers
Ajouter la ligne ci-dessous (avant la dernière ligne) au fichier rc.local pour faire démarrer watchdog_openvpn.sh au démarrage
Afin d’installer le client Bittorrent Transmission à partir de paquet RPM, vous devez activez le repo EPEL
Si la première de ces 2 dernières commandes vous donne une erreur roulez les commandes suivantes
Installer Transmission et Transmission Daemon (version avec interface de Web)
Créer le fichier de configuration « settings.json » pour Transmission Daemon avec le contenu ci-dessous sous /var/lib/transmission/.config/transmission/
Modifier lignes rpc-password et rpc-username selon vos préférences.
Créer 3 répertoires pour Transmission
Modifier les permissions de ce répertoire tel qu’indiqué
Assigner le groupe « users » à ces répertoires
Si ce n’est déjà fait, ajouter le groupe « users » à votre compte d’utilisateur
Configurer le service openvpn pour qu’il démarre automatiquement lors du démarrage de CentOS
Redémarrer CentOS