rss logo

Configuration d'un VPN IPsec multisite avec StrongSwan sur Debian

logo strongSwan

J'ai déjà détaillé dans un article précédent comment configurer un VPN IPsec multisite en combinant Racoon et strongSwan ici : Comment configurer un VPN IPsec multisite avec Racoon et strongSwan. Comme Racoon est désormais obsolète, je vais décrire ici comment configurer une architecture de VPN IPsec multisite, mais uniquement avec strongSwan.

Schéma réseau

Diagramme illustrant la configuration d'un VPN IPsec multisite avec StrongSwan sur Debian, connectant le siège et les agences avec des VLANs pour les utilisateurs, la VoIP, le WiFi et les serveurs.
Diagramme de configuration du VPN IPsec multisite

Site 1 - Headquarters

Commençons par la configuration du site principal. Pour rappel, il s'agit du site qui centralise les connexions VPN pour tous les autres sites, et c'est également le site qui "autorise" les connexions (le réseau VoIP dans cette configuration) entre Agence 1 et Agence 2.

Prérequis

  • Installer le paquet strongSwan :
root@host:~# apt update && apt install strongswan
  • Activer le démarrage automatique de nftables :
root@host:~# systemctl enable nftables.service

nftables

La configuration de nftables est ici ultra-simplifiée, permettant aux réseaux d'accéder à Internet et de communiquer entre eux. Dans un environnement de production, vous pouvez mettre en place un filtrage entre les VLANs.

  • Modifier le fichier /etc/nftables.conf :
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0; policy accept;
	}
        chain forward {
                type filter hook forward priority 0; policy accept ;
	}
	chain output {
                type filter hook output priority 0; policy accept;
        }
}

#NAT for outgoing traffic.
table ip my_nat {
        chain my_masquerade {
                type nat hook postrouting priority 100;
                ip daddr != { 10.1.0.1, 192.168.0.0/16 } oifname wan masquerade comment "output nat"
        }
}
  • Recharger la configuration de nftables :
root@host:~# nft -f /etc/nftables.conf

Configuration réseau

Configurer les interfaces réseau

Ici, nous configurons nos deux interfaces : lan et wan (Lisez cet article pour découvrir comment renommer les interfaces réseau sous Debian : Renommer les interfaces réseau sur Debian).

  • Modifier le fichier /etc/network/interfaces :
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# This is an autoconfigured IPv6 interface
allow-hotplug wan
iface wan inet static
        address 10.1.0.1
        netmask 255.255.255.0
	gateway 10.1.0.254

allow-hotplug lan
iface lan inet static
        address 192.168.1.254
        netmask 255.255.255.0
        up /usr/local/sbin/ipconf.sh
  • Redémarrez le système ou le service réseau :
root@host:~# systemctl restart networking

Script réseau

Le script /usr/local/sbin/ipconf.sh sera exécuté au démarrage. Il est utilisé pour configurer les interfaces VLAN.

  • Créer un fichier /usr/local/sbin/ipconf.sh :
#!/bin/sh

#SETTING UP VLANs ON THE lan INTERFACE
ip link add link lan name users type vlan id 2
ip link add link lan name voip type vlan id 3
ip link add link lan name wifi type vlan id 4
ip link add link lan name servers type vlan id 5
ip link set users up
ip link set voip up
ip link set wifi up
ip link set servers up
#VLAN INTERFACE IP ADDRESS SETTINGS
ip addr add 192.168.2.254/24 dev users
ip addr add 192.168.3.254/24 dev voip
ip addr add 192.168.4.254/22 dev wifi
ip addr add 192.168.5.254/24 dev servers

#ENABLE ROUTING
sysctl net.ipv4.ip_forward=1
  • Modifier les droits du fichier /usr/local/sbin/ipconf.sh pour le rendre exécutable :
root@host:~# chmod +x /usr/local/sbin/ipconf.sh

strongSwan

ipsec.conf

  • Modifier le fichier /etc/ipsec.conf et configurer les connexions entre les sites. L'objectif est de permettre aux réseaux VoIP de tous les sites de communiquer entre eux. Nous permettons également aux utilisateurs de l'Agence 1 et de l'Agence 2 d'accéder au réseau des serveurs du Siège :
#####################################
#Headquarters to Branch Office 1 setup#
#####################################
conn hq-b1
        authby = secret
        auto = route
        type = tunnel
        keyexchange = ikev2
        ike = aes256-sha256-modp1024!
        esp = aes256-sha256-modp1024!

        #DPD
        dpdaction=restart
        dpddelay=300s
        dpdtimeout=60s
        
        #headquarters
        leftfirewall = yes
        leftid = 10.1.0.1
        left = 10.1.0.1
        leftsubnet = 192.168.1.0/24

        #Branch Office 1
        rightfirewall = yes
        rightid = 10.10.0.1
        right = 10.10.0.1
        rightsubnet = 192.168.10.0/24

#VoIP - Headquarters and Branch Office 1
conn hq-b1-voip
        also=hq-b1
        leftsubnet = 192.168.3.0/24
        rightsubnet = 192.168.13.0/24

#Servers/Headquarters and Users/Branch Office 1
conn hq-b1-servers
        also=hq-b1
        leftsubnet = 192.168.5.0/24
        rightsubnet = 192.168.12.0/24

#VoIP/Branch Office 1 - Headquarters - VoIP/Branch Office 2
conn b1-hq-b2-voip
        also=hq-b1
        leftsubnet = 192.168.23.0/24
        rightsubnet = 192.168.13.0/24

#####################################
#Headquarters to Branch Office 2 setup#
#####################################
conn hq-b2
        authby = secret
        auto = route
        type = tunnel
        keyexchange = ikev2
        ike = aes256-sha256-modp1024!
        esp = aes256-sha256-modp1024!

        #DPD
        dpdaction=restart
        dpddelay=300s
        dpdtimeout=60s

        #Branch Office 2
        rightfirewall = yes
        rightid = 10.20.0.1
        right = 10.20.0.1
        rightsubnet = 192.168.20.0/24
        
        #headquarters
        leftfirewall = yes
        leftid = 10.1.0.1
        left = 10.1.0.1
        leftsubnet = 192.168.1.0/24

#VoIP - Headquarters and Branch Office 2
conn hq-b2-voip
        also=hq-b2
        leftsubnet = 192.168.3.0/24
        rightsubnet = 192.168.23.0/24

#Servers/Headquarters and Users/Branch Office 2
conn hq-b2-servers
        also=hq-b2
        leftsubnet = 192.168.5.0/24
        rightsubnet = 192.168.22.0/24

#VoIP/Branch Office 2 - Headquarters - VoIP/Branch Office 1
conn b2-hq-b1-voip
        also=hq-b2
        rightsubnet = 192.168.23.0/24
        leftsubnet = 192.168.13.0/24

Configurer la clé pré-partagée (PSK)

Nous allons configurer notre PSK (Pre-Shared Key), qui sera utilisée pour authentifier les routeurs des autres sites.

  • Modifier le fichier /etc/ipsec.secrets :
: PSK password_PSK4231
  • Redémarrer le service ipsec pour prendre en compte les modifications :
root@host:~# systemctl restart ipsec.service

Site 2 - Branch Office 1

Passons maintenant à la configuration de la première agence. La configuration est similaire à celle du site principal, car elle implique également la configuration des interfaces réseau et du service strongSwan.

Prérequis

  • Installer le paquet strongSwan :
root@host:~# apt update && apt install strongswan
  • Activer le démarrage automatique de nftables :
root@host:~# systemctl enable nftables.service

nftables

Comme pour le site principal, la configuration de nftables est ici simplifiée. Aucun filtrage ne sera effectué.

  • Modifier le fichier /etc/nftables.conf :
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0; policy accept;
	}
        chain forward {
                type filter hook forward priority 0; policy accept ;
	}
	chain output {
                type filter hook output priority 0; policy accept;
        }
}

#NAT for outgoing traffic.
table ip my_nat {
        chain my_masquerade {
                type nat hook postrouting priority 100;
                ip daddr != { 10.10.0.1, 192.168.0.0/16 } oifname wan masquerade comment "output nat"
        }
}
  • Recharger la configuration de nftables :
root@host:~# nft -f /etc/nftables.conf

Configuration Réseau

Configurer les Interfaces Réseau

Nous configurons nos deux interfaces : lan et wan.

  • Modifier le fichier /etc/network/interfaces :
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# This is an autoconfigured IPv6 interface
allow-hotplug wan
iface wan inet static
        address 10.10.0.1
        netmask 255.255.255.0
	gateway 10.10.0.254

allow-hotplug lan
iface lan inet static
        address 192.168.10.254
        netmask 255.255.255.0
        up /usr/local/sbin/ipconf.sh

Script Réseau

Le script /usr/local/sbin/ipconf.sh sera exécuté au démarrage. Il est utilisé pour configurer les interfaces VLAN.

  • Créer un fichier /usr/local/sbin/ipconf.sh :
#!/bin/sh

#SETTING UP VLANs ON THE lan INTERFACE
modprobe 8021q
ip link add link lan name users type vlan id 2
ip link add link lan name voip type vlan id 3
ip link add link lan name wifi type vlan id 4
ip link set users up
ip link set voip up
ip link set wifi up
#VLAN INTERFACE IP ADDRESS SETTINGS
ip addr add 192.168.12.254/24 dev users
ip addr add 192.168.13.254/24 dev voip
ip addr add 192.168.14.254/22 dev wifi

#ENABLE ROUTING
sysctl net.ipv4.ip_forward=1
  • Modifier les droits pour que le script /usr/local/sbin/ipconf.sh soit exécutable :
root@host:~# chmod +x /usr/local/sbin/ipconf.sh

strongSwan

ipsec.conf

  • Éditer le fichier de configuration /etc/ipsec.conf :
#####################################
#Branch Office 1 to Headquarters setup#
#####################################
conn b1-hq
        authby = secret
        auto = route
        type = tunnel
        keyexchange = ikev2
        ike = aes128-sha1-modp1024!
        esp = aes128-sha1-modp1024!

        #DPD
        dpdaction=restart
        dpddelay=300s
        dpdtimeout=60s

        #Branch Office 1
        leftfirewall = yes
        left = 10.10.0.1
        leftid = 10.10.0.1
        leftsubnet = 192.168.10.0/24

        #headquarters
        rightfirewall = yes
        rightid = 10.1.0.1
        right = 10.1.0.1
        rightsubnet = 192.168.1.0/24

#VoIP - Branch Office 1 and Headquarters
conn b1-hq-voip
        also=b1-hq
        leftsubnet = 192.168.13.0/24
        rightsubnet = 192.168.3.0/24

#Users/Branch Office 1 and Servers/Headquarters
conn b1-hq-servers
        also=b1-hq
        leftsubnet = 192.168.12.0/24
        rightsubnet = 192.168.5.0/24

#VoIP/Branch Office 1 - Headquarters - VoIP/Branch Office 2
conn b1-hq-b2-voip
        also=b1-hq
        leftsubnet = 192.168.13.0/24
        rightsubnet = 192.168.23.0/24

Configurer la clé pré-partagée (PSK)

Nous utiliserons la même PSK (Pre-Shared Key) que pour le site principal.

  • Modifier le fichier /etc/ipsec.secrets :
: PSK password_PSK4231
  • Redémarrer le service ipsec pour prendre en compte les modifications :
root@host:~# systemctl restart ipsec.service

Site 3 - Branch Office 2

Prérequis

  • Installer le paquet strongSwan :
root@host:~# apt update && apt install strongswan
  • Activer le démarrage automatique de nftables :
root@host:~# systemctl enable nftables.service

nftables.conf

  • Modifier le fichier /etc/nftables :
#!/usr/sbin/nft -f

flush ruleset

table inet filter {
        chain input {
                type filter hook input priority 0; policy accept;
	}
        chain forward {
                type filter hook forward priority 0; policy accept ;
	}
	chain output {
                type filter hook output priority 0; policy accept;
        }
}

#NAT for outgoing traffic.
table ip my_nat {
        chain my_masquerade {
                type nat hook postrouting priority 100;
                ip daddr != { 10.20.0.1, 192.168.0.0/16 } oifname wan masquerade comment "output nat"
        }
}
  • Recharger la configuration de nftables :
root@host:~# nft -f /etc/nftables.conf

Configuration Réseau

Configurer les Interfaces Réseau

Ici encore, nous configurons nos deux interfaces (lan et wan).

  • Modifier le fichier /etc/network/interfaces :
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug wan
iface wan inet static
        address 10.0.10.12
        netmask 255.255.255.0

allow-hotplug lan
iface lan inet static
        address 192.168.21.254
        netmask 255.255.255.0
        up /usr/local/sbin/ipconf.sh

Script Réseau

Le script /usr/local/sbin/ipconf.sh sera exécuté au démarrage. Il est utilisé pour configurer les interfaces VLAN.

  • Créer un fichier /usr/local/sbin/ipconf.sh :
#!/bin/sh

#SETTING UP VLANs ON THE lan INTERFACE
modprobe 8021q
ip link add link lan name users type vlan id 2
ip link add link lan name voip type vlan id 3
ip link add link lan name wifi type vlan id 4
ip link set users up
ip link set voip up
ip link set wifi up
#VLAN INTERFACE IP ADDRESS SETTINGS
ip addr add 192.168.22.254/24 dev users
ip addr add 192.168.23.254/24 dev voip
ip addr add 192.168.24.254/22 dev wifi

#ENABLE ROUTING
sysctl net.ipv4.ip_forward=1
  • Modifier les droits pour que le script /usr/local/sbin/ipconf.sh soit exécutable :
root@host:~# chmod +x /usr/local/sbin/ipconf.sh

strongSwan

ipsec.conf

  • Modifier le fichier /etc/ipsec.conf :
#####################################
#Branch Office 2 to Headquarters setup#
#####################################
conn b2-hq
        authby = secret
        auto = route
        type = tunnel
        keyexchange = ikev2
        ike = aes128-sha1-modp1024!
        esp = aes128-sha1-modp1024!

        #DPD
        dpdaction=restart
        dpddelay=300s
        dpdtimeout=60s

        #Branch Office 2
        leftfirewall = yes
        left = 10.20.0.1
        leftid = 10.20.0.1
        leftsubnet = 192.168.20.0/24

        #headquarters
        rightfirewall = yes
        rightid = 10.1.0.1
        right = 10.1.0.1
        rightsubnet = 192.168.1.0/24

#VoIP - Branch Office 2 and Headquarters
conn b2-hq-voip
        also=b2-hq
        leftsubnet = 192.168.23.0/24
        rightsubnet = 192.168.3.0/24

#Users/Branch Office 2 and Servers/Headquarters
conn b2-hq-servers
        also=b2-hq
        leftsubnet = 192.168.22.0/24
        rightsubnet = 192.168.5.0/24


#VoIP/Branch Office 2 - Headquarters - VoIP/Branch Office 1
conn b2-hq-b1-voip
        also=b2-hq
        leftsubnet = 192.168.23.0/24
        rightsubnet = 192.168.13.0/24

Configurer la clé pré-partagée (PSK)

Nous utilisons la même PSK (Pre-Shared Key) que pour les autres sites.

  • Modifier le fichier /etc/ipsec.secrets :
: PSK password_PSK4231
  • Redémarrer le service ipsec pour prendre en compte les modifications :
root@host:~# systemctl restart ipsec.service

Dépannage

  • Ping depuis le Siège :
root@host:~# ping 192.168.21.254 -I 192.168.1.254
  • Ping depuis Agence 1 :
root@host:~# ping 192.168.5.254 -I 192.168.12.254
  • Ping depuis Agence 2 :
root@host:~# ping 192.168.13.254 -I 192.168.23.254
  • Vérifier les logs :
root@host:~# journalctl --grep "ipsec|charon"
  • Vérifier les connexions IPsec et les associations de sécurité (SA) :
root@host:~# ipsec status
root@host:~# ipsec statusall