Outils pour utilisateurs

Outils du site


Panneau latéral

Mycélium

Documentation

Travaux

Membres

Wiki

travaux:technique:ipsec

IPsec

Introduction

Sur Debian 9 (Stretch) c'est strongSwan 5.5.1 qui est le logiciel pour l'IPsec

Description

Dans la documentation ci-dessous, on utilise IPsec sans les policies du Kernel, mais en utilisant une interface virtuelle (ipsec0).

L'avantage, est que trafic de la connexion VPN IPsec est bien identifiée dans cette interface. Il est aussi plus simple de voir le routage et les règles de firewall.

Une table de routage dédié sera utile pour avoir une gateway par défaut par interface. Voir: https://www.thomas-krenn.com/en/wiki/Two_Default_Gateways_on_One_System

Installation

Sur les deux serveurs qui vont s'interconnecter, installer le package strongswan

sudo apt-get install strongswan

Configuration

Les trois fichiers les plus importants sont:

  • /etc/ipsec.conf
  • /etc/ipsec.secrets
  • /etc/strongswan.d/charon.conf

Plan de connexion

Le serveur gitoyen est le côté Gitoyen

  • IP Publique: 80.67.163.55
  • IP tunnel point-to-point: 10.123.124.1/30

Le serveur mycelium est le côté de Mycélium. Particularité de ce serveur, il est derrière du NAT. Il faut ouvrir les ports UDP 500 et 4500 vers son IP privée.

  • IP Publique: 88.190.142.78
  • IP tunnel point-to-point: 10.123.124.2/30

La configuration souhaitée est du Site-to-Site PSK. Voir le scénario proposé: https://www.strongswan.org/testing/testresults/ikev2/net2net-psk/

Configuration de gitoyen

Sur le serveur gitoyen éditer le fichier /etc/network/interfaces et ajouter la configuration de l'interface ipsec0:

/etc/network/interfaces
# IPsec interco Gitoyen <-> Mycelium
auto ipsec0
iface ipsec0 inet static
  # Adresse IP et masque de sous-réseau
  address 10.123.124.1/30
 
  # Création du tunnel ipsec0 en mode VTI (Virtual Tunnel Interface)
  # sur la clé 999 (le flux du tunnel IPsec sera envoyé dans cette clé)
  # En local l'IP du serveur et remote n'importe qui. Nous sommes dans 
  # une configuration ou c'est le serveur distant derrier un NAT qui
  # se connecte.
  pre-up ip tunnel add ipsec0 local 80.67.163.55 remote 0.0.0.0 mode vti key 999
 
  # Desactivation des policy kernel pour ipsec0
  pre-up sysctl -w net.ipv4.conf.ipsec0.disable_policy=1
 
  # Montage de l'interface avec un MTU de 1436
  up ip link set up mtu 1436 dev ipsec0
 
  # Routage du bloc 80.67.162.0/24 dans l'interface ipsec0
  post-up ip route add 80.67.162.0/24 dev ipsec0
 
  # Démontage de l'interface (ifdown)
  down ip tunnel del ipsec0

Puis lancer la commande suivante pour monter l'interface.

ifup ipsec0

Maintenant il faut éditer le fichier /etc/ipsec.conf pour y mettre la configuration du VPN IPsec.

/etc/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file
 
# Configuration par défaut
config setup
 
conn %default
        # La clé IKE a une durée de 60 minutes avant renégociation
        ikelifetime=60m
 
        keylife=20m
        rekeymargin=3m
        keyingtries=1
 
        # Authentification par secret (PSK) qui se trouve dans /etc/ipsec.secrets
        authby=secret
 
        # Mode IKEv2
        keyexchange=ikev2
 
        mobike=no
 
# Configuration du tunnel Gitoyen <-> mycelium
conn gitoyen-to-mycelium
        # Nom local
        leftid=gitoyen
 
        # IP local
        left=80.67.163.55
 
        # Subnet partagé dans la phase 2. Ici tout passe, on gére le flux dans
        # l'interface ipsec0 et routage
        leftsubnet=0.0.0.0/0
 
        # Pas de firewall (NAT) de se côté
        leftfirewall=no
 
        # Nom distant
        rightid=mycelium
 
        # IP distantes
        right=88.190.142.78
 
        # Subnet partagé dans la phase 2. Ici tout passe, on gére le flux dans
        # l'interface ipsec0 et routage
        rightsubnet=0.0.0.0/0
 
        # Chiffrement
        esp=aes256-sha256-modp8192
        ike=aes256-sha256-modp8192
 
        # On envoie le flux dans l'interface ipsec0 avec la clé 999
        mark=999
 
        # Connexion auto au démarrage
        auto=start
 
include /var/lib/strongswan/ipsec.conf.inc

Editer le fichier /etc/ipsec.secrets pour y mettre la clé partagée

/etc/ipsec.secrets
gitoyen mycelium : PSK "<PRE SHARED KEY>"

Pour pouvoir gérer l'interface réseau ipsec0 et le routage, éditer le fichier /etc/strongswan.d/charon.conf mettre no aux options suivantes, décommenter si besoin.

/etc/strongswan.d/charon.conf
install_routes = no
install_virtual_ip = no    

Configuration de mycelium

Sur le serveur mycelium éditer le fichier /etc/network/interfaces et ajouter la configuration de l'interface ipsec0:

/etc/network/interfaces
# IPsec interco Mycelium <-> Gitoyen 
auto ipsec0
iface ipsec0 inet static
  # Adresse IP et masque de sous-réseau
  address 10.123.124.2/30
 
  # Création du tunnel ipsec0 en mode VTI (Virtual Tunnel Interface)
  # sur la clé 999 (le flux du tunnel IPsec sera envoyé dans cette clé)
  # En local n'importe quelle IP peut se connecter et remote IP distante.
  # Nous sommes dans une configuration ou c'est ce serveur qui se connecte à distance
  # car derriere un NAT
  pre-up ip tunnel add ipsec0 local 0.0.0.0 remote 80.67.163.55 mode vti key 999
 
  # Desactivation des policy kernel pour ipsec0
  pre-up sysctl -w net.ipv4.conf.ipsec0.disable_policy=1
 
  # Montage de l'interface avec un MTU de 1436
  up ip link set up mtu 1436 dev ipsec0
 
  # Ajout de la gateway par défaut pour les connexions provenants de l'interface ipsec0
  # dans la table dédiée routes-mycelium
  post-up ip route add default via 10.123.124.2 dev ipsec0 table routes-mycelium
 
  # Ajout d'une règle qui indique les connexions provenant du bloc 80.67.162.0/24
  # soit gérées par la table de routage routes-mycelium
  post-up ip rule add from 80.67.162.0/24 table routes-mycelium
 
  # Démontage de l'interface (ifdown)
  down ip tunnel del ipsec0

Avant de monter l'interface il faut ajouter un nouveau fichier pour iproute2 afin de déclarer une nouvelle table de routage dédié au routage mycélium. Éditer le fichier /etc/iproute2/rt_tables.d/mycelium et ajouter la ligne suivante:

1 routes-mycelium

Puis lancer la commande suivante pour monter l'interface.

ifup ipsec0

Maintenant il faut éditer le fichier /etc/ipsec.conf pour y mettre la configuration du VPN IPsec.

/etc/ipsec.conf
# ipsec.conf - strongSwan IPsec configuration file
 
config setup
 
conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1
        authby=secret
        keyexchange=ikev2
        mobike=no
 
conn mycelium-to-gitoyen
        leftid=mycelium
 
        # N'importe quel IP peut se connecter car NAT
        left=%any
        leftsubnet=0.0.0.0/0
 
        # Il y a un firewall NAT devant ce serveur
        leftfirewall=yes
 
        rightid=gitoyen
        right=80.67.163.55
        rightsubnet=0.0.0.0/0
        esp=aes256-sha256-modp8192
        ike=aes256-sha256-modp8192
        mark=999
        auto=start
 
include /var/lib/strongswan/ipsec.conf.inc

Editer le fichier /etc/ipsec.secrets pour y mettre la clé partagée

mycelium gitoyen : PSK "<PRE SHARED KEY>"

Pour pouvoir gérer l'interface réseau ipsec0 et le routage, éditer le fichier /etc/strongswan.d/charon.conf mettre no aux options suivantes, décommenter si besoin.

install_routes = no
install_virtual_ip = no    

Connexion

Démarrage du service

systemctl start ipsec

Status du service

systemctl status ipsec

Arrêt du service

systemctl stop ipsec

État de la connexion

ipsec statusall
Connections:
  mycelium-to-gitoyen:  %any...80.67.163.55  IKEv2
  mycelium-to-gitoyen:   local:  [mycelium] uses pre-shared key authentication
  mycelium-to-gitoyen:   remote: [gitoyen] uses pre-shared key authentication
  mycelium-to-gitoyen:   child:  0.0.0.0/0 === 0.0.0.0/0 TUNNEL
Security Associations (1 up, 0 connecting):
  mycelium-to-gitoyen[53]: ESTABLISHED 39 minutes ago, 192.168.1.210[mycelium]...80.67.163.55[gitoyen]
  mycelium-to-gitoyen[53]: IKEv2 SPIs: 1e4a14679360a74f_i* e01fdf36d2be6af0_r, pre-shared key reauthentication in 13 minutes
  mycelium-to-gitoyent[53]: IKE proposal: AES_CBC_256/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_8192
  mycelium-to-gitoyen{89}:  INSTALLED, TUNNEL, reqid 22, ESP in UDP SPIs: c6e7ce45_i c605ba7e_o
  mycelium-to-gitoyen{89}:  AES_CBC_256/HMAC_SHA2_256_128/MODP_8192, 806600 bytes_i (9295 pkts, 0s ago), 59527 bytes_o (269 pkts, 0s ago), rekeying in 3 minutes
  mycelium-to-gitoyen{89}:   0.0.0.0/0 === 0.0.0.0/0

Si aucune connexion

Security Associations (0 up, 0 connecting):
  none

Routage (forwarding)

Sur les deux serveurs

echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-ip-forward.conf
sysctl -w net.ipv4.ip_forward=1

Vu qu'il y a une interface ipsec0 pour la connexion VPN IPsec, il est possible d'activer le forwarding de manière habituelle

Sur le server OpenVPN

iptables -A FORWARD -i ipsec0 -o tunx -j ACCEPT
iptables -A FORWARD -o ipsec0 -i tunx -j ACCEPT

Sur le server Interco

iptables -A FORWARD -i ipsec0 -o ethx -j ACCEPT
iptables -A FORWARD -o ipsec0 -i ethx -j ACCEPT
travaux/technique/ipsec.txt · Dernière modification: 2018/12/16 15:14 par tyrben