9 votes

Comment puis-je forcer la requête DNS par défaut à fonctionner en mode TCP ?

En Chine, le soi-disant GFW contamine souvent les résultats des DNS comme

$ dig @8.8.8.8 archive.org 

;; QUESTION SECTION:
;archive.org.           IN  A

;; ANSWER SECTION:
archive.org.        2662    IN  A   159.106.121.75

Ici 159.106.121.75 est une fausse IP. Nous devons utiliser le mode TCP pour les requêtes DNS :

$ dig @8.8.8.8 +tcp archive.org

;; QUESTION SECTION:
;archive.org.           IN  A

;; ANSWER SECTION:
archive.org.        237 IN  A   207.241.224.2

Maintenant nous avons la vraie IP 207.241.224.2 .

Sur System Preferences -> Network le Advanced... permet d'ouvrir un onglet pour la configuration du DNS. Cependant, je ne peux qu'ajouter les adresses IP des serveurs DNS, mais je ne peux rien faire d'autre. Ma question est donc la suivante : Comment puis-je forcer la requête DNS par défaut à fonctionner en mode TCP ?

PS : Je ne veux pas modifier le /etc/hosts pour contourner ce problème, car il n'est pas pratique. S'il y a une méthode élégante qui peut résoudre ce problème, cela me fera gagner beaucoup de temps :) Merci.

5voto

klanomath Points 63400

A priori, il n'est pas possible de forcer le mDNSResponder à utiliser TCP au lieu de UDP.

J'ai trouvé une solution de contournement. La méthode décrite ci-dessous utilise un proxy DNS local ( dnschef ) forcé d'utiliser TCP pour les requêtes DNS sortantes.

  • Téléchargez et décompressez dnschef-0.3 .

  • Téléchargez et décompressez dnslib

  • Télécharger et désarchiver IPy-0.76

  • cd à la dnslib dossier :

    cd ~/Downloads/paulc-dnslib-04713cc4a9df 
  • installer dnslib :

    sudo python ./setup.py install
  • cd à la IPy dossier :

    cd ~/Downloads/IPy-0.76 
  • installer IPy :

    sudo python ./setup.py install
  • Ouvrez Préférences Système -> Réseau, remplacez votre ou vos serveurs DNS actuels (par exemple 8.8.8.8/8.8.8.4) par un serveur local avec l'adresse IP 127.0.0.1 et appliquez les changements.

  • cd à la dnschef et le démarrer :

    cd ~/Downloads/dnschef-0.3 
    sudo ./dnschef.py --nameservers 8.8.8.8#53#tcp

Si la dernière commande est trop gênante ou laide (enfin, elle est laide parce que vous devez ouvrir Terminal.app et démarrer le proxy DNS), vous pouvez déplacer les fichiers dnschef.py et .ini vers un autre chemin et créer un démon de lancement pour démarrer le proxy DNS lors du démarrage.

Exemple :

  • sudo mkdir /usr/local/python

  • sudo cp ~/Downloads/dnschef-0.3/dns* /usr/local/python/

  • sudo rm /usr/local/python/dnschef.exe

  • sudo touch /Library/LaunchDaemon/local.dnschef.plist

  • copier et coller le contenu suivant dans le fichier nouvellement créé avec un éditeur approprié
    (par exemple sudo nano /Library/LaunchDaemon/local.dnschef.plist ) :

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>local.dnschef</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/python/dnschef.py</string>
            <string>--nameservers</string>
            <string>8.8.8.8#53#tcp</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
    </plist>
  • Chargez le fichier avec sudo launchctl load -w /Library/LaunchDaemons/local.dnschef.plist

    Tous les fichiers et dossiers créés doivent être la propriété de Root:wheel.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X