Le but de ce petit tip sera d'utiliser au mieux les scripts de démarrage et la configuration d'OpenVPN sur une debian pour un serveur OpenVPN.
Il se trouve que vous êtes souvent en balade, chez des clients, et que vous ne savez pas toujours à l'avance quels seront les ports “ouverts” à travers lesquels vous pourrez vous connecter à votre serveur OpenVPN convivial et ainsi bénéficier pleinement de l'interweb sans filtrage.
Pour se faire, vous avez besoin que votre serveur OpenVPN écoute sur plusieurs ports, ce qui implique d'avoir plusieurs configurations spécifiant le protocole (udp vs tcp) et le port d'écoute mais cela devient très vite relou de gérer plusieurs configurations complètes alors que le but est d'utiliser exactement les mêmes certificats sur des ports d'écoute différents !
Ce fichier, appelé server.common, est le fichier d'origine (habituel) duquel il faut supprimer ou commenter tout ce qui est :
Voici le mien, purgé des commentaires (oui j'utilise un fichier de CRL ;P) :
local A.B.C.D dev tun ca certs/ca.crt cert certs/server.crt key certs/server.key # This file should be kept secret dh certs/dh1024.pem crl-verify certs/crl.pem ifconfig-pool-persist ipp.txt client-config-dir ccd client-to-client keepalive 10 120 tls-auth certs/ta.key 0 # This file is secret comp-lzo user nobody group nogroup persist-key persist-tun log openvpn.log log-append openvpn.log verb 4
Le but maintenant, est d'avoir un fichier de configuration des différents listeners d'OpenVPN le plus simple possible reprenant les éléments exclus du fichier server.common :
Le cas du fichier de status ne sera pas indiqué ici puisqu'il est géré automatiquement par les scripts OpenVPN de debian.
Pour plus de clareté, et parce que les noms des fichiers de configurations sont repris dans les logs, j'ai pris le parti d'appeler ces fichiers de la manière suivante :
{u(dp)|t(cp)}<port>.conf
ce qui donne u53.conf pour “port 53 en udp” contenant :
config server.common port 53 proto udp server 192.168.X.0 255.255.255.0
ou encore t443.conf pour “port 443 en tcp” contenant :
config server.common port 443 proto tcp server 192.168.Z.0 255.255.255.0
Dans mon cas, j'ai décidé d'avoir 4 listeners :
J'ai donc 4 fichiers de configurations :
Reprenant les 3 directives de configuration qui leur sont propres :
Et le source du fichier commun
Le script /etc/init.d/openvpn gère ce fichier de la manière suivante :
# prepare default status file STATUSARG="--status /var/run/openvpn.$NAME.status $STATUSREFRESH"
Donc chaque configuration trouvée dans /etc/openvpn/*.conf aura son propre fichier de status, dont le nom sera basé sur le nom de la configuration.
# /etc/init.d/openvpn start Starting virtual private network daemon: t443 t80 u1194 u53. # lsof openvpn 15207 nobody 6u IPv4 45949 TCP A.B.C.D:443 (LISTEN) openvpn 15218 nobody 6u IPv4 45973 TCP A.B.C.D:80 (LISTEN) openvpn 15228 nobody 6u IPv4 45995 UDP A.B.C.D:1194 openvpn 15238 nobody 6u IPv4 46017 UDP A.B.C.D:53 # ls -al /var/run -rw-r--r-- 1 root root 6 2009-08-16 16:16 openvpn.t443.pid -rw------- 1 root root 232 2009-08-16 17:08 openvpn.t443.status -rw-r--r-- 1 root root 6 2009-08-16 16:16 openvpn.t80.pid -rw------- 1 root root 232 2009-08-16 17:08 openvpn.t80.status -rw-r--r-- 1 root root 6 2009-08-16 16:16 openvpn.u1194.pid -rw------- 1 root root 232 2009-08-16 17:08 openvpn.u1194.status -rw-r--r-- 1 root root 6 2009-08-16 16:16 openvpn.u53.pid -rw------- 1 root root 232 2009-08-16 17:08 openvpn.u53.status
Un petit ifconfig vous confirmera que vous avez bien 4 interfaces tun, chacune en charge d'un réseau différent qu'il ne faudra pas oublier de natter correctement :D
Vous avez donc un serveur OpenVPN qui écoute sur plusieurs ports / protocoles différents mais utilisant exactement la même configuration de vos certificats, chacun de vos clients OpenVPN pourra se connecter sur n'importe lequel de ces ports via une adaptation minime de sa configuration.