Sous macOS, les tunnels VPN reposent sur des interfaces réseau virtuelles appelées utun. Ces interfaces constituent des points d’interconnexion logiques entre la stack réseau du système et un mécanisme de tunnel fonctionnant en espace utilisateur. Elles permettent l’injection et l’extraction de paquets IP sans dépendre d’une interface réseau physique.
Contrairement aux interfaces physiques telles que en0 ou en1, les interfaces utun n’ont aucune correspondance matérielle. Elles sont créées dynamiquement par le système lorsqu’un tunnel est initialisé et supprimées lorsqu’il est fermé.
Les interfaces utun constituent le point central du routage VPN sous macOS.
Une interface utun est une interface réseau virtuelle point-à-point implémentée dans la stack réseau du kernel Darwin. Elle permet la transmission de paquets IP entre le système local et un endpoint distant via un mécanisme de tunnel.
Les interfaces utun présentent les caractéristiques suivantes :
Elles sont visibles via la commande :
ifconfig
Exemple :
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST>
inet 10.0.0.2 --> 10.0.0.1 netmask 0xffffffff
L’absence d’adresse MAC indique que l’interface n’est pas liée à une couche physique Ethernet.
Les interfaces utun sont créées automatiquement lorsque le système initialise un tunnel réseau via le Network Extension Framework ou un mécanisme compatible.
Le processus de création suit les étapes suivantes :
Chaque tunnel reçoit sa propre interface utun.
Plusieurs interfaces peuvent coexister :
utun0
utun1
utun2
Chaque interface correspond à un tunnel distinct.
Les interfaces utun sont intégrées directement dans la stack réseau BSD du kernel macOS. Elles se comportent comme des interfaces réseau standard du point de vue du routage.
Lorsqu’un paquet est transmis par une application :
Application
↓
Socket API
↓
Kernel Network Stack
↓
Interface utun
Le paquet est injecté dans l’interface utun, où il peut être capturé par le mécanisme de tunnel associé.
Le paquet n’est pas transmis directement sur le réseau physique.

Les interfaces utun permettent deux opérations fondamentales :
Flux sortant :
Application
↓
Kernel
↓
Interface utun
↓
Capture par tunnel
↓
Encapsulation
↓
Transmission réseau
Flux entrant :
Réseau distant
↓
Réception tunnel
↓
Décapsulation
↓
Injection dans utun
↓
Kernel
↓
Application
Ce mécanisme permet une transparence complète pour les applications.
Chaque interface utun reçoit une adresse IP virtuelle.
Exemple :
inet 10.0.0.2 --> 10.0.0.1 netmask 0xffffffff
Cette configuration indique :
Le masque 255.255.255.255 indique une liaison point-à-point.
Les interfaces utun deviennent actives dans la table de routage.
Observation :
netstat -rn
Exemple :
default 10.0.0.1 utun0
Cela signifie que l’interface utun devient la route par défaut.
Tout le trafic est redirigé vers le tunnel.
Le trafic peut être observé avec :
sudo tcpdump -i utun0
Exemple :
IP 10.0.0.2 > 8.8.8.8: ICMP echo request
IP 8.8.8.8 > 10.0.0.2: ICMP echo reply
Cela confirme que l’interface transporte des paquets IP standard.
Chaque interface utun est isolée.
Elle possède :
La suppression du tunnel entraîne la suppression de l’interface.
| Interface utun | Interface physique |
| virtuelle | matérielle |
| pas d’adresse MAC | adresse MAC physique |
| créée dynamiquement | présente en permanence |
| utilisée pour tunnel | utilisée pour transmission physique |
Les interfaces utun constituent le mécanisme permettant :
Elles permettent au tunnel de fonctionner comme une interface réseau standard du point de vue du système.
Ce modèle garantit la compatibilité avec l’ensemble des applications utilisant la stack réseau macOS.