Protocoles VPN sous macOS : architecture, implémentation et interaction avec le système

Le fonctionnement d’un VPN sous macOS repose sur deux éléments distincts mais complémentaires : l’interface tunnel virtuelle (souvent utun) et le protocole utilisé pour encapsuler et transporter les paquets entre le système local et une extrémité distante. Le protocole définit la manière dont les données sont encapsulées, chiffrées, authentifiées et transmises.

macOS ne dépend pas d’un protocole unique. Le système fournit une infrastructure permettant l’implémentation de différents protocoles, chacun ayant des caractéristiques spécifiques en matière de performance, d’intégration système et de surface d’attaque.

1. Rôle d’un protocole VPN dans l’architecture réseau

Un protocole VPN assure plusieurs fonctions fondamentales :

  • encapsulation des paquets IP
  • chiffrement du contenu
  • authentification des endpoints
  • gestion des sessions
  • transport des paquets sur le réseau physique

Le tunnel agit comme une interface logique :

Paquet IP original
↓
Encapsulation protocole VPN
↓
Chiffrement
↓
Transmission via réseau physique
↓
Réception distante
↓
Déchiffrement
↓
Décapsulation
↓
Transmission vers destination finale

Le protocole détermine la manière dont ces étapes sont réalisées.

2. Interaction entre protocole VPN et interface utun

Sous macOS, les protocoles VPN modernes fonctionnent généralement en espace utilisateur et interagissent avec le système via une interface utun.

Le protocole :

  • lit les paquets depuis utun
  • les encapsule et les chiffre
  • les transmet via une socket standard
  • reçoit les réponses
  • les injecte dans utun

Cycle complet :

Application
↓
Kernel Network Stack
↓
Interface utun
↓
Protocole VPN
↓
Socket réseau
↓
Internet
↓
Endpoint distant
↓
Protocole VPN
↓
Interface utun
↓
Kernel
↓
Application

Le protocole agit comme un intermédiaire entre la stack réseau et le réseau physique.

3. Implémentation userspace vs kernel space

Les protocoles VPN peuvent fonctionner dans deux contextes :

  • kernel space
  • user space

Kernel space

Dans ce modèle, le protocole s’exécute directement dans le kernel.

Avantages :

  • faible latence
  • moins de context switching
  • meilleures performances

Inconvénients :

  • risque de crash système
  • complexité de développement
  • surface d’attaque critique

User space

Dans ce modèle, le protocole fonctionne comme un processus standard.

Avantages :

  • isolation mémoire
  • stabilité du système
  • maintenance plus simple

Inconvénients :

  • overhead supplémentaire
  • context switching plus fréquent

macOS privilégie désormais ce modèle via le Network Extension Framework.

4. Encapsulation des paquets

L’encapsulation consiste à placer un paquet IP original dans un nouveau paquet transporté vers le serveur distant.

Structure conceptuelle :

Header externe
Header tunnel
Paquet IP original
Payload

Le paquet encapsulé est ensuite chiffré avant transmission.

Ce mécanisme permet de transporter le paquet original sans modification.

5. Gestion des sessions

Un protocole VPN doit maintenir un état de session permettant :

  • l’identification du tunnel
  • la gestion des clés cryptographiques
  • la validation des paquets
  • la prévention des attaques par rejeu

Cette session est généralement maintenue par un processus utilisateur associé au tunnel.

Ce processus peut être observé avec :

ps aux | grep tunnel

Ou :

lsof -i

6. Transport du tunnel

Le tunnel est transporté via une socket réseau standard :

  • UDP
  • TCP

Le protocole VPN agit comme une application réseau utilisant les primitives standards :

socket()
connect()
send()
recv()

Le système ne distingue pas ce trafic d’un trafic applicatif standard.

7. Overhead introduit par l’encapsulation

L’encapsulation ajoute des données supplémentaires à chaque paquet :

  • header tunnel
  • header transport
  • données d’authentification

Cet overhead réduit la capacité effective :

Taille paquet original : 1500 bytes
Overhead tunnel : 60 bytes
Payload utile : 1440 bytes

L’overhead dépend du protocole utilisé.

8. Cycle complet d’un paquet via un protocole VPN

Transmission :

Application génère paquet
↓
Kernel route paquet vers utun
↓
Protocole VPN lit paquet
↓
Encapsulation
↓
Chiffrement
↓
Transmission réseau
↓
Endpoint distant

Réception :

Endpoint distant envoie réponse
↓
Réception socket
↓
Déchiffrement
↓
Décapsulation
↓
Injection utun
↓
Kernel
↓
Application

9. Interaction avec le routage macOS

Le protocole VPN ne modifie pas directement le routage. Il utilise l’infrastructure existante :

  • interface utun
  • table de routage
  • stack réseau kernel

Le protocole agit uniquement sur les paquets transitant via utun.

Le routage détermine quels paquets seront capturés par le tunnel.

10. Rôle du protocole dans l’architecture globale

Le protocole constitue le mécanisme permettant :

  • l’encapsulation des paquets
  • le chiffrement
  • le transport sécurisé

Il fonctionne en complément :

  • de l’interface utun
  • du Network Extension Framework
  • de la table de routage

L’ensemble de ces composants constitue l’architecture complète du tunnel VPN sous macOS.