題 如何讓Firefox使用TCP進行DNS


我想使用TCP進行DNS,以繞過我的ISP緩慢而破壞的DNS服務器。我沒有使用(也不想使用)代理。

注意:我想使用DNS over TCP,因為如果我在udp上使用它,無論我設置什麼服務器,我都會從我的ISP的DNS獲得答案。

請注意,無論誰暗示,我都會狠狠地投票:

  • 程序通過DNS進行TCP,
  • 設置 about:config 使DNS也通過代理:我沒有使用代理,
  • 使用另一個DNS:我已經將Google設置為我的DNS,但是我被截獲了。

攔截時我的意思是:

$ dig @8.8.8.8 thepiratebay.se

; <<>> DiG 9.8.1 <<>> @8.8.8.8 thepiratebay.se
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24385
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;thepiratebay.se.               IN      A

;; ANSWER SECTION:
thepiratebay.se.        28800   IN      A       83.224.65.41

;; Query time: 50 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Sep 16 22:51:06 2012
;; MSG SIZE  rcvd: 49

$ dig +tcp @8.8.8.8 thepiratebay.se

; <<>> DiG 9.8.1 <<>> +tcp @8.8.8.8 thepiratebay.se
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15131
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;thepiratebay.se.               IN      A

;; ANSWER SECTION:
thepiratebay.se.        436     IN      A       194.71.107.15

;; Query time: 61 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Sep 16 22:51:10 2012
;; MSG SIZE  rcvd: 49

如果重要的話,我在Gentoo Linux上使用Firefox 14。


4
2017-09-16 19:27


起源


這是來自固定網絡嗎?例如。家庭網絡?如果是這樣,你試過運行自己的 DNS? - Julian Knight
對你來說不是一個真正的答案,所以我會留下評論。 OpenDNS提供Windows和Mac客戶端 DnsCrypt 應該解決這個問題 - Julian Knight
@JulianKnight是的,是的。運行我自己的DNS可能是一個想法。如果你把它寫成一個答案,我會投票,如果沒有找到更好的想法,最終會接受答案 - miniBill
Firefox也可能使用OS'es套接字接口進行DNS解析,因此甚至可能無法控制DNS的完成方式。 - billc.cn
@JulianKnight:還有,在named.conf中有特定的設置嗎?因為使用默認配置它會被攔截... - miniBill


答案:


如果您使用的是glibc,則可以使用未記錄的文件 use-vc 選項(見 resolv/res_init.c 在glib源代碼中)強制libc解析器始終使用TCP。

在resolv.conf中全局設置它:

options use-vc nameserver 1.2.3.4

或者在環境中傳遞選項:

RES_OPTIONS=use-vc firefox

如果應用程序在不使用libc的情況下實現了自己對DNS的支持,它將無法工作 res_init/res_query/… 功能。它與Firefox一起工作(可能只要你沒有在SOCKS代理設置中使用“遠程DNS”選項)。


3
2018-02-12 09:03





安裝 不作承諾,並在unbound.conf配置文件中將“tcp-upstream:no”更改為“yes”。

# upstream connections use TCP only (and no UDP), "yes" or "no"
# useful for tunneling scenarios, default no.
# tcp-upstream: no

並且為了通過上游解析器解析所有內容,添加如下內容:

forward-zone:
    name: "."
    forward-addr: 213.154.224.3

你也可以使用 DNSSEC觸發,一個方便的Unbound用戶界面,它將其配置為通過SSL連接隧道傳輸所有內容。


7
2017-09-20 07:12



謝謝。最後,我可以通過使用opendns的5353端口(使用 forward-addr: 208.67.222.222@5353),用udp,但你的回答是我正在尋找的:) - miniBill


解決ISP問題的一種方法是運行您自己的本地DNS服務器。這在Linux上並不是特別困難。

之前的相關問題涵蓋了一些相關問題: 當ISP截獲NXDOMAIN請求時該怎麼辦? 另一篇文章 這裡

DNSSEC (維基百科)從長遠來看應該消除這個問題。也 DNSCrypt 來自OpenDNS解決了這個問題,但僅適用於Mac和Windows工作站。

有很多關於設置自己的DNS的好文章:


4
2017-09-16 20:28



但我的本地DNS服務器最終需要走出去並實際獲得已解析的名稱。現在,當發生這種情況時,我的ISP攔截了請求。僅授權技巧對我不起作用,或者我可能配置錯誤。 - miniBill
OpenDNS接受5353上的查詢。 - LawrenceC
@ultrasawblade現在很有意思。有沒有辦法直接使用它或我是否必須安裝本地DNS服務器? - miniBill
@ultrasawblade實際上,正如Frank建議的那樣使用Unbound,使用自定義端口,就可以了。謝謝。 - miniBill


讓Firefox使用TCP進行DNS?

你不能

Firefox沒有做出這個決定,它只是調用操作系統API gethostbyname()

操作系統解析器將其交給DNS服務器。

您可能認為可以設置自己的內部DNS服務器並將其配置為僅使用TCP。

這是一個 相關職位 從 有人 誰可能比其他任何人更了解DNS。

08-11-2008 03:20 AM

Re:是否可以強制BIND專門使用TCP?

“喬·巴普蒂斯塔”寫道:

是否可以對BIND進行任何配置更改以強制它     獨占使用TCP而不使用UDP?     可能?

沒有。

-
  Paul Vixie

可能無論如何

理論上,您可以查找,編寫或修改執行所需操作的DNS轉發器。

從理論上講,您可以找到或編寫一個截取並替換任何調用的Firefox插件 gethostbyname() 使用自定義DNS客戶端代碼 - 我不知道Firefox插件架構是否可以實現這一點,但它可能值得一看。


2
2017-09-17 10:04





我有同樣的問題。事實證明它與Firefox中的任何設置,操作系統中的任何設置或TCP與UDP無關。問題實際上是來自ISP的路由器。這是攔截 所有 “端口53”流量並將其重新路由到您的ISP的DNS服務器。重新路由是通過重寫發送和接收的數據包(類似於NAT)來完成的,這樣你就無法分辨發生了什麼(數據包中DNS服務器的地址似乎是你想要的,即使數據包真的去了ISP自己的DNS服務器)。

訪問您的路由器(通常通過Web瀏覽到192.168.1.1並輸入名稱和密碼),找到它說DNS服務器的地方,並將該地址從ISP的DNS服務器更改為您真正想要使用的地址(OpenDNS?Google ?......?)。

路由器配置幾乎肯定會使地址僅由路由器本身使用。它可能不會說任何關於攔截或關於您的計算機的事情。不要相信。路由器的DNS攔截旨在阻止SOHO用戶暫時繞過過濾的DNS來查看非法站點,因此這是一個很大的秘密:所以文檔記錄最少,通常看起來甚至不存在。


1
2018-01-29 18:07



不幸的是我的路由器是一個“沃達丰站”,這裡沒有DNS設置......無論如何你得到一個upvote ^^ - miniBill
Arrggghhhh。我是否正確理解您的LAN連接是通過手機連接?如果是這樣,我不知道任何答案。據我所知,在蜂窩網絡上使用任何替代DNS是一個尚未解決的問題,甚至沒有任何好的黑客攻擊。作為來自ISP的DHCP響應的一部分,DNS服務器的地址被提供給蜂窩電話。黑客攻擊 可以 可以使用“root”手機和“靜態”IP配置的某種組合......但可能不是。我沒有在網絡上使用TCP DNS的經驗,所以不確定它不會工作...... :-( - Chuck Kollars
手機繫繩僅作為後備,通過常規DSL正常連接,所以不,你的觀察不適用:) - miniBill
哎呀,我說“路由器”為了清楚起見我應該說“調製解調器”,因為現在兩個設備通常是組合在一起的。對於由DSL調製解調器支持的外置路由器,該設置將在DSL調製解調器中。 (想到這一點的另一種方法是設置將在您的電話公司必須“批准”的部分:-) - Chuck Kollars


使用dnscrypt + unbound。默認情況下,dnscrypt在443 / udp上向OpenDNS發送dns查詢。

我還沒有找到一種方法將這個DNS服務隧道傳輸到我局域網上的其他機器。沒有mothod工作,不是netcat,socat或udptunnel。


1
2018-03-23 18:17





使用Google的公共DNS服務器。它們快速可靠。這是 方向 在各種操作系統上使用它們。


0
2017-09-16 19:35



如果我使用dns而不是udp我會被我的ISP攔截。我將編輯問題以反映這一點 - miniBill
OOC,誰是你的ISP? - Keltari
這是沃達丰的IT - miniBill
嗯,不熟悉他們。 - Keltari
沃達丰是英國的手機供應商。 - Julian Knight


嘗試使用iptables阻止傳出的UDP DNS請求:

iptables -A OUTPUT -p udp --dport 53 -j REJECT

UDP的查找失敗,然後(希望)使用TCP重試。


0
2017-09-17 08:27



如果我這樣做,查找只會失敗,並且firefox不會重試TCP - miniBill
每 RFC 1035 DNS查詢通常是UDP。使查詢在TCP上工作需要將解析器設置為以這種方式發送查詢,並將DNS服務器設置為以這種方式接收查詢。 - dafydd


最終,您可以像許多TPB用戶一樣去使用 TOR 或VPN服務。


0
2017-09-17 13:38



TPB只是一個具體的例子。問題清楚地表明我不想使用代理[並且TOR和VPN有資格作為此問題的代理] ... - miniBill