Un VPN ne “protège” pas le trafic par magie : il modifie la topologie réseau locale en reconfigurant le routage du système. Sous macOS, ce basculement repose principalement sur la table de routage maintenue par le kernel, qui détermine à tout instant quelle interface doit être utilisée pour atteindre une destination donnée.
Lorsqu’un tunnel VPN est activé, le système introduit généralement une interface virtuelle (souvent utunX) puis modifie les routes afin que tout ou partie du trafic soit redirigé vers cette interface. Ce comportement peut être observé et vérifié à l’aide des outils système standard.
La table de routage associe des préfixes (destinations réseau) à des next hops (passerelles) et à une interface de sortie. Lorsqu’un paquet doit être envoyé, le kernel applique un principe de longest prefix match : la route la plus spécifique (masque le plus long) est choisie en priorité.
Dans un scénario simple sans VPN :
en0)default) est routée vers le routeur localLa table de routage peut être affichée avec :
netstat -rn
Sans VPN, la route par défaut ressemble souvent à :
default 192.168.1.1 en0
Après activation d’un VPN, cette route est fréquemment remplacée par une route pointant vers l’interface virtuelle :
default 10.0.0.1 utun0
Dans ce modèle, le VPN devient la sortie par défaut vers Internet.
La route default agit comme un fallback : elle est utilisée lorsque aucune route plus spécifique ne correspond à la destination.
Lorsqu’un VPN “prend la main” sur le trafic, il impose :
Le changement de route par défaut est l’opération la plus visible et la plus déterminante : il transforme immédiatement la topologie réseau du poste.
Deux modes principaux existent au niveau du routage :
Tout le trafic passe par le tunnel, ce qui correspond généralement à :
utunXen0 pour accéder au LANExemple conceptuel :
default 10.0.0.1 utun0
192.168.1/24 link#... en0
Seuls certains préfixes sont routés via le VPN. Dans ce cas, la route par défaut reste sur l’interface physique, et des routes spécifiques sont ajoutées vers utun.
Exemple conceptuel :
default 192.168.1.1 en0
203.0.113.0/24 10.0.0.1 utun0
198.51.100.0/24 10.0.0.1 utun0
Le split tunneling repose donc sur l’ajout de routes plus spécifiques que la route par défaut.

Les décisions de routage ne dépendent pas uniquement du préfixe. macOS maintient également des attributs influençant la sélection de routes en cas d’égalité ou de chemins multiples.
Sur certains systèmes, des notions de métriques ou de priorité entrent en jeu, notamment dans des scénarios multi-homing (Wi-Fi + Ethernet) ou lors de l’activation d’un tunnel qui coexiste avec d’autres interfaces virtuelles.
Pour vérifier la route utilisée pour une destination spécifique :
route -n get 8.8.8.8
Exemple de sortie attendue (conceptuelle) :
route to: 8.8.8.8
destination: default
gateway: 10.0.0.1
interface: utun0
Cette commande permet de valider empiriquement l’interface réellement utilisée pour une destination donnée.
Un point critique dans la configuration de routage VPN est la gestion du LAN. Beaucoup de configurations VPN cherchent à :
Pour cela, des routes spécifiques pointant vers l’interface physique restent en place pour les préfixes privés (RFC1918) :
Une implémentation peut volontairement modifier ce comportement, mais techniquement, c’est la présence ou l’absence de routes spécifiques qui détermine l’accès au LAN.
Le routage du trafic IP et la résolution DNS sont deux mécanismes distincts. Un VPN peut rediriger tout le trafic IP tout en laissant les requêtes DNS sortir via l’interface physique si la configuration DNS n’est pas modifiée.
Pour analyser le DNS sous macOS :
scutil --dns
Pour vérifier l’interface de sortie vers un résolveur DNS :
route -n get <IP_DU_RESOLVEUR>
Cette distinction est essentielle : un tunnel correctement routé n’implique pas automatiquement une résolution DNS cohérente avec le tunnel.
IPv6 dispose d’un routage indépendant d’IPv4. Un VPN peut rediriger IPv4 via utun tout en laissant IPv6 sortir via l’interface physique si le tunnel ne gère pas IPv6 ou si le routage IPv6 n’est pas modifié.
La table IPv6 peut être observée avec :
netstat -rn -f inet6
Un diagnostic complet du routage VPN exige donc d’observer :
Le routage observé dans netstat doit idéalement être corrélé à une observation du trafic.
Sur l’interface tunnel :
sudo tcpdump -i utun0
Sur l’interface physique :
sudo tcpdump -i en0
En configuration full tunnel, on doit observer :
La cohérence entre table de routage et observation du trafic est l’un des meilleurs moyens de valider qu’un tunnel est effectivement actif et utilisé.
Sous macOS, un tunnel VPN fonctionne parce que :
Sans cette reconfiguration de routage, le tunnel ne serait qu’un canal chiffré inactif du point de vue des applications.
La compréhension de la table de routage est donc indispensable pour analyser un VPN sous macOS, diagnostiquer une fuite de trafic (IPv6, DNS) ou comprendre les limites d’une configuration gratuite soumise à des contraintes opérationnelles.