Le fonctionnement d’un VPN sous macOS ne dépend pas uniquement de l’interface tunnel et de la table de routage IPv4. La résolution DNS et la gestion d’IPv6 constituent deux mécanismes distincts, pouvant suivre des chemins différents si le système n’est pas configuré de manière cohérente. La compréhension de ces mécanismes est essentielle pour analyser le comportement réel d’un tunnel VPN.
Sous macOS, la résolution DNS et le routage IPv6 sont gérés par des composants spécifiques du système, indépendants de la table de routage IPv4 standard.
Contrairement à de nombreux systèmes Unix, macOS ne repose pas uniquement sur le fichier /etc/resolv.conf. La résolution DNS est assurée par le service système mDNSResponder, qui agit comme résolveur central.
Ce service :
La configuration active peut être observée avec :
scutil --dns
Cette commande affiche :
Sous macOS, chaque interface réseau peut posséder sa propre configuration DNS.
Exemple :
Le système sélectionne le résolveur en fonction de :
Cette architecture permet le split DNS.
Le split DNS consiste à utiliser différents serveurs DNS selon la destination.
Exemple conceptuel :
Ce mécanisme est géré par mDNSResponder.
Il peut être observé via :
scutil --dns
Chaque resolver possède un identifiant et une interface associée.
Une requête DNS est un paquet IP standard. Son chemin dépend de la table de routage.
Pour vérifier le routage vers un serveur DNS :
route -n get 8.8.8.8
Exemple :
route to: 8.8.8.8
gateway: 10.0.0.1
interface: utun0
Dans ce cas, la requête DNS passe par le tunnel.
Si l’interface affichée est en0, la requête passe par l’interface physique.
Les requêtes DNS peuvent être observées avec tcpdump.
Sur l’interface tunnel :
sudo tcpdump -i utun0 port 53
Sur l’interface physique :
sudo tcpdump -i en0 port 53
Cette observation permet de déterminer le chemin réel des requêtes DNS.

IPv6 fonctionne indépendamment d’IPv4.
Le système maintient :
La table IPv6 peut être observée avec :
netstat -rn -f inet6
Exemple :
default fe80::1%en0 en0
Cette route indique que le trafic IPv6 passe par l’interface physique.
Une interface utun peut posséder une adresse IPv6.
Observation :
ifconfig utun0
Exemple :
inet6 fe80::1234:5678:abcd:ef01%utun0 prefixlen 64 scopeid 0x10
Si une route IPv6 par défaut est associée à utun, le trafic IPv6 passe par le tunnel.
Le système peut utiliser :
Ces deux routages sont indépendants.
La cohérence du tunnel dépend de la configuration des deux tables.
Les requêtes DNS peuvent retourner :
Le système choisit ensuite le protocole à utiliser.
Ce choix dépend de :
Pour analyser le comportement réel :
Vérifier les DNS :
scutil --dns
Vérifier le routage IPv4 :
netstat -rn
Vérifier le routage IPv6 :
netstat -rn -f inet6
Observer le trafic :
sudo tcpdump -i utun0
sudo tcpdump -i en0
Le comportement du tunnel dépend de la cohérence entre :
Ces composants fonctionnent indépendamment mais déterminent ensemble le chemin réel du trafic.
Le tunnel VPN agit au niveau de l’interface réseau et du routage, mais la résolution DNS et le routage IPv6 reposent sur des mécanismes séparés.
La compréhension de ces composants permet d’analyser précisément le comportement du système réseau sous macOS.
Ces mécanismes peuvent être observés directement via les outils système standard.