如何让 Firefox 使用 TCP 作为 DNS

如何让 Firefox 使用 TCP 作为 DNS

我想使用 TCP 进行 DNS 传输,以绕过 ISP 缓慢且不稳定的 DNS 服务器。我没有使用(也不想使用)代理。

注意:我想通过 TCP 使用 DNS,因为如果我通过 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。

答案1

如果您正在使用 glibc,则可以使用未记录的use-vc选项(参见resolv/res_init.cglib 源代码),它强制 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”选项)。

答案2

安装未绑定,并在 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 连接传输所有内容。

答案3

解决 ISP 问题的一种方法是运行您自己的本地 DNS 服务器。这在 Linux 上并不特别困难。

之前有一个相关问题涵盖了一些相关观点: 当 ISP 拦截 NXDOMAIN 请求时该怎么办? 还有另一篇文章这里

DNSsec维基百科)应该能够从长远来看消除这个问题。此外DNS加密OpenDNS 修复了该问题,但仅适用于 Mac 和 Windows 工作站。

有许多关于如何设置您自己的 DNS 的优秀文章:

答案4

我遇到了同样的问题。结果发现这与 Firefox 中的任何设置、操作系统中的任何设置或 TCP 与 UDP 无关。问题实际上出在您的 ISP 的路由器上。它拦截全部“端口 53”流量并将其重新路由到您的 ISP 的 DNS 服务器。重新路由是通过重写发送和接收的数据包(类似于 NAT)来完成的,这样您就无法知道发生了什么(数据包中的 DNS 服务器地址看起来就是您想要的地址,即使数据包实际上发往 ISP 自己的 DNS 服务器)。

访问您的路由器(通常通过网页浏览到 192.168.1.1 并输入名称和密码),找到 DNS 服务器的位置,然后将该地址从 ISP 的 DNS 服务器更改为您真正想要使用的地址(OpenDNS?Google?...?)。

路由器配置几乎肯定会使该地址看起来只由路由器本身使用。它可能不会提及任何有关拦截或有关您的计算机的信息。不要相信它。路由器的 DNS 拦截旨在防止 SOHO 用户暂时绕过已过滤的 DNS 来查看非法网站,因此这是一个大秘密:记录非常少,通常似乎根本不存在。

相关内容