Comment personnaliser la résolution DNS sur iOS, comme modifier le fichier hosts
J'ai été tourmenté par des problèmes de résolution DNS dans un précédent emploi.
Notre projet utilisait le même nom de domaine pour les environnements de production et de test. Pour rediriger le trafic de l'application vers l'environnement de test, il fallait modifier la résolution du domaine. Sur un ordinateur, c'est simple : il suffit de modifier le fichier hosts système. Mais sur iOS, à cause du sandboxing et des restrictions de sécurité, impossible de toucher directement aux hosts.
À l'époque, on contournait le problème en configurant le serveur DNS du Wi-Fi sur un serveur DNS personnalisé. Mais on se heurtait sans cesse aux problèmes suivants :
- Le cache DNS oblige à vider le cache et à redémarrer l'application après chaque modification.
- À cause de ce cache, le seul moyen de savoir si la nouvelle résolution DNS a pris effet est d'inspecter les réponses de l'API.
- Changer le serveur DNS du Wi-Fi à chaque fois est fastidieux.
- La modification peut perturber le fonctionnement normal des autres applications sur le téléphone.
Pour résoudre tous ces problèmes, nous avons intégré à ApiCatcher une fonctionnalité de spoofing DNS appelée « Mappage DNS », qui permet d'avoir un véritable "fichier hosts personnalisé" sur iOS — en redirigeant les domaines de votre choix vers les adresses IP que vous souhaitez.
Comment fonctionne le Mappage DNS
Puisqu'il est impossible de modifier le fichier hosts d'iOS, comment ApiCatcher parvient-il à changer le résultat de résolution d'un domaine ?
La magie opère pendant la phase d'établissement de la connexion TCP au niveau du proxy, par interception et redirection :
- Capture du trafic : Lorsque vous lancez la capture de paquets dans ApiCatcher, toutes les requêtes HTTP/HTTPS des applications passent par un tunnel VPN local, puis transitent par le serveur proxy local d'ApiCatcher.
- Interception de l'hôte au niveau du proxy : Quand une application tente de se connecter à un domaine cible (ex.
echo.apicatcher.net), le serveur proxy consulte d'abord sa table de règles de mappage DNS locales avant d'initier la véritable connexion TCP. - Substitution de l'IP physique : Si une règle correspond, le serveur proxy contourne entièrement la résolution DNS publique et établit la connexion TCP directement vers l'adresse IP que vous avez spécifiée.
- Transparent pour le handshake TLS : Comme la substitution d'IP n'a lieu qu'au niveau de la connexion TCP, l'en-tête
HostHTTP et l'information SNI (Server Name Indication) du handshake TLS restent inchangés. Ainsi, même avec un handshake HTTPS strict, la validation des certificats côté client s'effectue normalement — totalement transparent et imperceptible pour l'application.
Comment configurer
-
Ouvrez l'application ApiCatcher, appuyez sur le bouton 「+」 en haut de l'écran d'accueil, puis sélectionnez Mappage DNS dans le menu contextuel pour accéder à la page de configuration « Mappage DNS ».
-
Appuyez sur le bouton 「+」 en haut à droite pour créer une nouvelle règle :
- Domaine : Saisissez le domaine à mapper. Les caractères génériques sont pris en charge (ex.
*.apicatcher.netcorrespond à tous les sous-domaines). - Adresse IP : Saisissez l'adresse IP du serveur cible ou de votre machine locale.
- Domaine : Saisissez le domaine à mapper. Les caractères génériques sont pris en charge (ex.
-
Lancez la capture et c'est immédiat Revenez à l'écran d'accueil et démarrez la capture. Dès lors, toutes les requêtes correspondant aux règles seront automatiquement dirigées vers l'IP cible que vous avez configurée. Si vous souhaitez uniquement utiliser le mappage DNS sans capturer les paquets, vous pouvez configurer des règles de liste blanche/noire d'hôtes.
Les modifications des règles de Mappage DNS prennent effet instantanément, tant que la capture est active.
