我想使用 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.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”选项)。
答案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
答案4
我遇到了同样的问题。结果发现这与 Firefox 中的任何设置、操作系统中的任何设置或 TCP 与 UDP 无关。问题实际上出在您的 ISP 的路由器上。它拦截全部“端口 53”流量并将其重新路由到您的 ISP 的 DNS 服务器。重新路由是通过重写发送和接收的数据包(类似于 NAT)来完成的,这样您就无法知道发生了什么(数据包中的 DNS 服务器地址看起来就是您想要的地址,即使数据包实际上发往 ISP 自己的 DNS 服务器)。
访问您的路由器(通常通过网页浏览到 192.168.1.1 并输入名称和密码),找到 DNS 服务器的位置,然后将该地址从 ISP 的 DNS 服务器更改为您真正想要使用的地址(OpenDNS?Google?...?)。
路由器配置几乎肯定会使该地址看起来只由路由器本身使用。它可能不会提及任何有关拦截或有关您的计算机的信息。不要相信它。路由器的 DNS 拦截旨在防止 SOHO 用户暂时绕过已过滤的 DNS 来查看非法网站,因此这是一个大秘密:记录非常少,通常似乎根本不存在。