En China, el llamado GFW a menudo contamina los resultados de DNS 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
hay una IP falsa. Tenemos que usar el modo TCP para la consulta de 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 tenemos la IP real 207.241.224.2
.
En System Preferences-> Network, el Advanced...botón puede abrir una pestaña para configurar DNS. Sin embargo, solo puedo agregar las direcciones IP de los servidores DNS, pero no puedo hacer nada más. Entonces mi pregunta es: ¿cómo puedo forzar que la consulta de DNS predeterminada funcione en el modo TCP?
PD : no quiero modificar el /etc/hosts
archivo para evitar este problema, ya que es un inconveniente. Si hay algún método elegante que pueda resolver este problema, me ahorrará mucho tiempo :) Gracias.
AFAIK no es posible forzar a mDNSResponder a usar TCP en lugar de UDP.
Sin embargo, he encontrado una solución. El método descrito a continuación utiliza un proxy DNS local ( dnschef ) obligado a utilizar TCP para las solicitudes de DNS salientes.
Descargar y desarchivar IPy-0.76
cd
a la carpeta dnslib :
cd ~/Downloads/paulc-dnslib-04713cc4a9df
instalar dnslib :
sudo python ./setup.py install
cd
a la carpeta IPy :
cd ~/Downloads/IPy-0.76
instalar IPy :
sudo python ./setup.py install
Abra Preferencias del sistema -> Red, reemplace su(s) servidor(es) DNS actual(es) (por ejemplo, 8.8.8.8/8.8.8.4) por uno local con la IP 127.0.0.1 y aplique los cambios.
cd
a la carpeta dnschef e inícielo:
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 Terminal.app e iniciar el proxy DNS), puede mover dnschef.py e .ini a otra ruta y crear un demonio de lanzamiento para inicie el proxy DNS durante 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
copie y pegue el siguiente contenido en el archivo recién creado con un editor apropiado
(p. ej 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>
Cargue el archivo consudo launchctl load -w /Library/LaunchDaemons/local.dnschef.plist
Todos los archivos y carpetas creados deben ser propiedad de root:wheel.
gordon davisson
8.8.8.8#53#tcp
(en la versión de inicio interactiva; el archivo .plist se ve bien tal como está).klanomath
sudo ./dnschef.py --nameservers 8.8.8.8#53#tcp
comando funciona.gordon davisson
#
como un marcador de comentario; launchd no usa un shell, por lo que no se necesitan comillas allí (y, como usted dice, lo romperá porque no hay un shell para eliminarlas).Stan
lorenzo