9 votos

¿Cómo puedo fuerza de DNS por defecto la consulta para que funcione en modo TCP?

En China, el llamado GFW a menudo contamina DNS resultados como

$ dig @8.8.8.8 archive.org 

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

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

Aquí 159.106.121.75 es una IP falsa. Tenemos que usar el modo TCP para la consulta 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

Ahora podemos obtener la IP real 207.241.224.2.

En Preferencias del Sistema -> Red, la Avanzada... botón puede abrir una ficha para la configuración de DNS. Sin embargo, sólo puedo agregar las direcciones IP de los servidores DNS, pero no puede hacer nada más. Así que mi pregunta es: ¿cómo puedo forzar el defecto de consulta DNS de trabajo en el modo TCP?

PS: no quiero modificar el /etc/hosts archivo para evitar este problema como es inconveniente. Si hay alguna elegante método que puede resolver este problema, se me va a ahorrar mucho tiempo :) Gracias.

5voto

klanomath Puntos 19587

AFAIK no es posible forzar el mDNSResponder el uso de TCP en lugar de UDP.

He encontrado una solución, aunque. El método que se describe a continuación, utiliza un DNS local-proxy (dnschef) obligados a usar TCP para la salida del DNS-las solicitudes.

  • Descargar y descomprimir dnschef-0.3.
  • Descargar y descomprimir dnslib
  • Descargar y descomprimir IPy-0.76

  • cd a la dnslib carpeta:

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

    sudo python ./setup.py install
    
  • cd a la IPy carpeta:

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

    sudo python ./setup.py install
    
  • Abra Preferencias del Sistema -> Red, reemplazar el actual servidor DNS(s) (por ejemplo 8.8.8.8/8.8.8.4) por un local de uno con la IP 127.0.0.1 y aplicar los cambios.

  • cd a la dnschef carpeta y empezar:

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

Si el último comando es demasiado problemático o feo (bueno, es feo porque tiene que abrir la Terminal.aplicación y comenzar el DNS, proxy), puede mover el dnschef.py y .ini a otro camino y crear un lanzamiento demonio para iniciar el DNS, proxy, mientras que el arranque.

Ejemplo:

  • 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
  • copia y pega el siguiente contenido en el archivo recién creado con un editor adecuado
    (e.g 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>
    
  • Carga el archivo con sudo launchctl load -w /Library/LaunchDaemons/local.dnschef.plist

    Todos los archivos y carpetas creadas deben ser propiedad de root:wheel.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X