---
categories: openbsd network vpn security ipsec
title: Howto IKED
...

Documentation :

* <http://man.openbsd.org/man5/iked.conf.5>
* <http://man.openbsd.org/man8/iked.8>

IKED est le démon utilisé sous OpenBSD pour mettre en place un VPN IPsec avec IKEv2.

## Configuration

On met en place un VPN entre 2 machines OpenBSD :

* GW1 avec l'IP publique 192.0.2.254 et le LAN 203.0.113.0/25 ;
* GW2 avec l'IP publique 198.51.100.254 et le LAN 203.0.113.128/25.

Sur GW1 :

Vérification de l'activation des paramètres sysctl :

~~~
# 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
~~~

Activation de l'interface enc0 :

~~~
# ifconfig enc0 up
# echo up >/etc/hostname.enc0
~~~

Configuration de /etc/pf.conf :

~~~
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}
~~~

Et application des modifications :

~~~
# pfctl -nf /etc/pf.conf && pfctl -f /etc/pf.conf
~~~

Configuration de /etc/iked.conf :

~~~
local_ip="192.0.2.254"
local_network="203.0.113.0/25"

remote_ip="198.51.100.254"
remote_network="203.0.113.128/25"

ikev2 active esp \
    from $local_network to $remote_network \
    local $local_ip peer $remote_ip \
    ikesa   auth hmac-sha2-256 enc aes-256 group modp4096 prf hmac-sha2-256 \
    childsa auth hmac-sha1     enc aes-256 group modp4096 \
    srcid $local_ip dstid $remote_ip \
    ikelifetime 86400 lifetime 3600 \
    psk "PSK-TO-CONFIGURE"
~~~

Les paramètres `ikesa` et `ikelifetime` correspondants à la phase 1, `childsa` et `lifetime` à la phase 2.

Test de la configuration :

~~~
# iked -nf /etc/iked.conf
configuration OK
~~~

Désactiver complètement le NAT-Traversal (il peut parfois être utilisé même si non configuré, pouvant causer des soucis) :

~~~
# rcctl set iked flags -T  
~~~

Activation et démarrage de iked :

~~~
# rcctl enable iked
# rcctl start iked
~~~

Puis effectuer les mêmes actions sur l'autre passerelle.

Dans le cas où l'on veut atteindre plusieurs réseaux locaux distants, il suffit d'ajouter une ligne `from $local_network to $remote_network_second \`, ce qui donne :

~~~
local_ip="192.0.2.254"
local_network="203.0.113.0/25"

remote_ip="198.51.100.254"
remote_network="203.0.113.128/26"
remote_network_second="203.0.113.192/26"

ikev2 active esp \
    from $local_network to $remote_network \
    from $local_network to $remote_network_second \
    local $local_ip peer $remote_ip \
    ikesa auth hmac-sha2-256 enc aes-256 prf hmac-sha2-256 group modp4096 \
    childsa auth hmac-sha1 enc aes-256 group modp4096 \
    ikelifetime 86400 lifetime 3600 \
    psk "PSK-TO-CONFIGURE"
~~~

> Note : Attention cependant, il y a visiblement des soucis avec OpenBSD lorsque l'on veut monter plusieurs sous-réseaux en IKEv2 : un seul sous-réseau est fonctionnel. Il vaut mieux pour ce cas passer à IKEv1.

## Administration

### Redémarrer les VPN

~~~
# ikectl reset all
# ikectl load /etc/iked.conf
~~~

### Consulter les logs

~~~
# tail -f /var/log/daemon | grep iked
~~~

### Voir les associations VPN

~~~
# ipsecctl -sa
~~~

### Debug

Couper iked et le relancer :

~~~
# rcctl stop iked
# iked -dvvv -f /etc/iked.conf
~~~


### FAQ

Que veulent dire les messages suivants ?

#### « sa_free: retransmit limit reached »

~~~
iked[73389]: spi=0x[…]: sa_free: retransmit limit reached
~~~

Un message a été retransmis à plusieurs reprises au peer, et la limite de retransmission de ce message a été atteinte sans recevoir de réponse. C'est lié au DPD (Dead Peer Detection), qu'il faut désactiver :

~~~
# cat iked.conf                                                                                                                                                                                                                                                                          
set dpd_check_interval 0
~~~