5.6 KiB
Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.
Howto VPN IPsec sous OpenBSD
Il existe deux méthodes pour mettre en place un VPN IPsec sous OpenBSD. La première est de créer un fichier de configuration /etc/isakmpd/isakmpd.conf. La seconde est d'utiliser /etc/ipsec.conf et sa syntaxe "pf-like" et de laisser ipsecctl s'occuper des politiques de flux et de l'établissement de la SA (Security association).
Méthode isakmpd via isakmpd.conf
Recharger isakmpd
Pour recharger la configuration d'ISAKMPD, il suffit de lui envoyer un SIGHUP. Ceci ne provoque pas coupure VPN pour les phases 1 (IPSEC) mais un rechargement de toutes les phases 2 !
pkill -HUP isakmpd
Note : attention, on a déjà constaté un plantage peu après un rechargement. Il conviendra de surveiller attentivement qu'ISAKMPD tourne bien.
Redémarrer isakmpd
Attention cela interrompt tous les VPN pendant quelques instants.
pkill isakmpd
isakmpd -v
Consulter les logs
tail -f /var/log/messages | grep isakmpd
Voir les routes
route -n show
Si isakmpd est bien lancé, une section Encap: doit apparaître.
Voir les associations VPN
ipsecctl -s a
Envoyer des commandes au daemon
Cela se fait en écrivant dans le fichier fifo /var/run/isakmpd.fifo.
La liste des commandes est disponible dans la page de man.
Exemple pour obtenir un rapport de l'état interne du daemon :
# echo r >/var/run/isakmpd.fifo
# cat /var/run/isakmpd.result
Pour avoir l'état de tous les VPNs :
# echo S >/var/run/isakmpd.fifo
# cat /var/run/isakmpd.result
Pour recharger les VPNs (équivalent au pkill -HUP) :
# echo R >/var/run/isakmpd.fifo
Pour stopper proprement le démon :
# echo Q >/var/run/isakmpd.fifo
Pour stopper un VPN (phase 1 ou 2) :
# echo "t main peer-XXXX" >/var/run/isakmpd.fifo
# echo "t quick XXXX" >/var/run/isakmpd.fifo
Pour relance un VPN (phase 1 ou 2... ce n'est pas clair. cela semble fonctionner pour la phase 1... à voir pour la phase 2).
# echo "c XXXX" >/var/run/isakmpd.fifo
Note générale : attention, il peut un avoir un délai dans l'exécution des commandes
FAQ
Que veulent dire les messages suivants ?
isakmpd[7864]: dpd_handle_notify: bad R_U_THERE seqno 551411465 <= 2374875689
C'est un message relatif au DPD (Dead peer detection) qui est un mécanisme pour détecter des éventuels soucis avec VPN. Voir http://www.juniper.net/techpubs/software/erx/junose61/swconfig-routing-vol1/html/ipsec-config4.html#1329479
isakmpd[7864]: attribute_unacceptable: AUTHENTICATION_METHOD: got PRE_SHARED, expected RSA_SIG
isakmpd[7864]: message_negotiate_sa: no compatible proposal found
isakmpd[7864]: dropped message from 192.0.2.1 port 500 due to notification type NO_PROPOSAL_CHOSEN
Il s'agit d'un routeur VPN distant qui essaye de se connecter, mais n'a pas de configuration correspondante. Cela peut se produire typiquement si son adresse IP change, et qu'elle n'est plus présente dans la configuration d'ISAKMPD.
isakmpd[10418]: isakmpd: phase 1 done (as responder): initiator id 192.0.2.1, responder id 1.2.3.4, src: 1.2.3.4 dst: 192.0.2.1
isakmpd[10418]: dropped message from 192.0.2.1 port 500 due to notification type INVALID_ID_INFORMATION
isakmpd[10418]: message_validate_notify: protocol not supported
Cela signifie a priori que la configuration en face à un réseau "remote" incorrect (soit complètement faux, soit pas sous la forme ADRESSE RÉSEAU / MASQUE)
Voir http://www.thegreenbow.com/support_flow.html?page=12105C&lang=fr
Debuger
# isakmpd -L -v -DA=90
# tcpdump -n -vs 1440 -r /var/run/isakmpd.pcap
Méthode isakmpd via ipsec.conf
Mise en place d'un VPN "simple" entre 2 machines OpenBSD
On dispose de :
- 2 passerelles VPN OpenBSD gw1 et gw2 (192.0.2.254 et 198.51.100.254)
- 2 LAN net1 et net2 correspondants (192.0.2.0/24 et 198.51.100.0/24)
Sur gw1 :
Vérifier que les sysctl suivants sont actifs :
# sysctl net.inet.esp.enable
net.inet.esp.enable=1
# sysctl net.inet.ah.enable
net.inet.ah.enable=1
# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 1 -> 1
Activer l'interface enc0 :
# ifconfig enc0 up
# echo up >/etc/hostname.enc0
Dans /etc/pf.conf, positionner :
set skip on {lo0 enc0}
pass in on $ext_if proto esp from $addr_gw2 to ($ext_if)
pass in on $ext_if proto udp from $addr_gw2 to ($ext_if) port {isakmp, ipsec-nat-t}
Dans /etc/ipsec.conf, positionner :
local_ip="192.0.2.254"
local_network="192.0.2.0/24"
remote_ip="198.51.100.254"
remote_network="198.51.100.0/24"
ike passive esp from $local_network to $remote_network peer $remote_ip
ike passive esp from $local_ip to $remote_network peer $remote_ip
ike passive esp from $local_ip to $remote_ip
Récupérer la clé pré-générée de l'autre passerelle :
# scp gw2:/etc/isakmpd/local.pub /etc/isakmpd/pubkeys/ipv4/198.51.100.254
Tester la configuration :
# ipsecctl -n -f /etc/ipsec.conf
Démarrer le service :
# isakmpd -K
# ipsecctl -f /etc/ipsec.conf
Puis effectuer les mêmes actions sur l'autre passerelle.
On doit alors pouvoir pinger chaque réseau à partir de l'autre passerelle ou de l'autre réseau.
Pour relancer un VPN il suffit de récupérer le nom des variables isakmpd générées par ipsectl via la commande suivante puis d'utiliser la même méthode qu'avec isakmpd.
# ipsecctl -nvf /etc/ipsec.conf
Debug IPsec
Eteindre isakmpd :
# /etc/rc.d/isakmpd stop
Dans une console :
# isakmpd -d -DA=90 -K
Dans une autre console :
# ipsecctl -f /etc/ipsec.conf