Come posso forzare il funzionamento della query DNS predefinita in modalità TCP?

6

In Cina, la cosiddetta GFW spesso contamina i risultati DNS come

$ dig @8.8.8.8 archive.org 

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

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

Qui 159.106.121.75 è un IP falso. Dobbiamo utilizzare la modalità TCP per la query 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

Ora otteniamo il% IP reale in% _.

In Preferenze di sistema - > Rete , il pulsante Avanzate ... può aprire una scheda per l'impostazione del DNS. Tuttavia, posso solo aggiungere gli indirizzi IP dei server DNS ma non posso fare altro. Quindi la mia domanda è: come posso forzare la query DNS predefinita in modalità TCP?

PS : non voglio modificare il file 207.241.224.2 per aggirare questo problema poiché è inopportuno. Se c'è qualche metodo elegante che può risolvere questo problema, mi farà risparmiare molto tempo :) Grazie.

    
posta Stan 16.12.2015 - 12:13
fonte

1 risposta

3

AFAIK non è possibile forzare mDNSResponder a utilizzare TCP anziché UDP.

Ho trovato una soluzione alternativa però. Il metodo descritto di seguito utilizza un proxy DNS locale ( dnschef ) obbligato a utilizzare TCP per le richieste DNS in uscita.

  • Scarica e decomprimi dnschef-0.3 .
  • Scarica e decomprimi dnslib
  • Scarica e disarchivia IPy-0.76

  • cd nella cartella dnslib :

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

    sudo python ./setup.py install
    
  • cd nella cartella IPy :

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

    sudo python ./setup.py install
    
  • Apri le Preferenze di Sistema - > Rete, sostituisci i tuoi attuali server DNS (ad es. 8.8.8.8/8.8.8.4) con uno locale con IP 127.0.0.1 e applica le modifiche.

  • cd nella cartella dnschef e avvialo:

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

Se l'ultimo comando è troppo fastidioso o brutto (beh, è brutto perché devi aprire Terminal.app e avviare il proxy DNS), puoi spostare dnschef.py e .ini in un altro percorso e creare un lancia il demone per avviare il proxy DNS durante l'avvio.

Esempio:

  • 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 e incolla il seguente contenuto nel file appena creato con un apposito editor
    (ad esempio 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>
    
  • Carica il file con sudo launchctl load -w /Library/LaunchDaemons/local.dnschef.plist

    Tutti i file e le cartelle creati devono essere di proprietà di root: wheel.

risposta data 16.12.2015 - 18:32
fonte

Leggi altre domande sui tag