Cet article décrit la mise en place d’un serveur OpenVPN configuré en mode routé (sous-réseau distinct) sous DD-WRT, build 13064.Cette build est assez ancienne, mais est la plus récente disponible pour mon WRT54GL. Les manips peuvent changer lors de versions plus récentes. Il ne couvrira que les aspects spécifiques à DD-WRT, et non la mise en place générale d’une structure PKI.
Il a pour but l’accès, à partir de l’extérieur, à tout l’intérieur d’un réseau LAN (pour l’accès aux ressources internes d’une entreprise par exemple). Il n’a PAS pour but la redirection complète du traffic réseau via VPN (usage en proxy). Par ailleurs, il part du principe qu’aucune de règle de pare-feu spécifique n’est déjà configuré.
Tout d’abord, sur un ordinateur, installer OpenVPN, Easy-RSA, et générer les clé et certificats pour le CA et le server, ainsi que les paramètres Diffie-Hellman.
Aller sur l’interface d’administration du routeur, Services -> VPN. Sous OpenVPN Daemon, cocher Enable. Pour le start-type, j’ai mis System car mon install est un peu particulière, et le routeur n’a pas de WAN (ce n’est qu’un bridge wifi). Il est toutefois souvent recommandé de cocher WAN Up.
Sous “Public Server Cert”, coller le ca.crt
généré auparavant.
Sous “Certificate Revoke List”, coller le crl.pem
.
Sous “Public Client Cert”, coller le server.crt
.
Sous “Private Client Key”, coller le server.key
.
Sous “DH PEM”, coller le dh2048.pem
généré auparavant.
Sous OpenVPN config, coller ce qui suit :
# if you want to add routes to your client
# typically for acessing the LAN from the VPN
push "route 192.168.1.0 255.255.255.0"
# definition of the VPN network
server 10.89.0.0 255.255.255.0
# tun for routed mode
dev tun0
# I always prefer UDP
proto udp
keepalive 10 120
dh /tmp/openvpn/dh.pem
ca /tmp/openvpn/ca.crt
cert /tmp/openvpn/cert.pem
key /tmp/openvpn/key.pem
# you can choose other values, but it has to be in adequation with your client's config
cipher AES-128-CBC
comp-lzo
# if you want VPN clients to be able to communicate together
client-to-client
# Only use crl-verify if you are using the revoke list
# otherwise comment it out
crl-verify /tmp/openvpn/ca.crl
# management parameter allows DD-WRT's OpenVPN Status web page
# to access the server's management port
# port must be 5001 for scripts embedded in firmware to work
management localhost 5001
Cliquer sur Save, puis “Apply Settings”. On devrait alors voir, sous Status -> OpenVPN, que le serveur a bien démarré. Normalement, les clients peuvent désormais tous communiquer avec le serveur et avec les autres clients. Pour que les clients puissent communiquer avec l’intérieur du LAN cible, il faut rajouter la règle de pare-feu suivante :
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
iptables -I INPUT 1 -p udp --dport 1194 -j ACCEPT
iptables -I FORWARD -i br0 -o tun0 -j ACCEPT
iptables -I FORWARD -i tun0 -o br0 -j ACCEPT
dans le cadre “Commands”, et cliquer sur Save Firewall.
Il n’y a ensuite plus qu’à configurer les clients. Voici un exemple de config fonctionnel avec les paramètres serveur ci-dessus :
client
dev tun
proto udp
remote my.domain 1194
resolv-retry infinite
nobind
persist-key
persist-tun
float
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
cipher AES-128-CBC
comp-lzo
verb 2