241 lines
5.7 KiB
Markdown
241 lines
5.7 KiB
Markdown
**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
|
||
~~~
|
||
|
||
ou
|
||
|
||
~~~
|
||
# echo "c main peer-XXXX" >/var/run/isakmpd.fifo
|
||
# echo "c qucik 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
|
||
~~~
|