关于 SOCKS 代理的远端 DNS 解析

经常使用 SOCKS 代理服务器的同志们会发现一种现象,即使 SOCKS 代理服务器设置正确,某些网站仍然无法访问,比如某著名微博网站。其一般原因都是 DNS 污染 (DNS cache poisoning)。

值得庆幸的是 SOCKS 5 协议增加了对 UDP 数据包的支持,DNS 查询是通过 UDP 传输的,所以我们可以使 DNS 查询数据包也走 SOCKS 5 代理来进行远端 DNS 解析(Remote DNS Lookup)。 SOCKS 5是通过将域名直接提交给 SOCKS 服务器来进行远端 DNS 解析的,即 Address Type 0x03,而非上述所说使用 UDP 通道解析。DNS 服务是 Internet 的基础服务,要求 DNS 解析应当尽量地快,所以浏览器默认不会使用远端 DNS 解析。在目前的常用浏览器中,貌似只有 Firefox 支持可选的远端 DNS 解析,方法见这里

我没有找到 IE 和 Chrome 支持远端 DNS 解析的方法,从讨论来看似乎是不支持的,Opera 则根本没有 SOCKS 代理支持。

即便是 Firefox,对远端 DNS 解析的支持也是有一些问题的。我的经验是:Firefox 只有在设置里面写死 SOCKS v5 的代理服务器设置时,才会支持远端 DNS 解析;当使用自动代理设置脚本(.pac )时,即使返回 SOCKS 代理,Firefox 也不会进行远端 DNS 解析。

结论是,如果想要远端 DNS 解析,只能手动切换 SOCKS 代理,不能使用自动代理配置脚本。

网友 forkei 的重要评论

chrome 的 Proxy Switchy 1.4.2 版本插件可以很好的解决这个问题。Firefox 的 FoxyProxy 插件也可以很好的解决 DNS 污染。支持插件扩展功能的浏览器功能就是强大。IE 内核浏览器和 opera 只有通过 polipo 或者 privoxy 将 socks 代理转为 http 代理才行,麻烦。

分类: IT 标签: , , , ,
  1. forkei
    2010年1月23日12:53 | #1

    chrome 的Proxy Switchy 1.4.2 版本插件可以很好的解决这个问题。

    Firefox 的FoxyProxy 插件也可以很好的解决DNS 污染。

    支持插件扩展功能的浏览器功能就是强大。

    IE 内核浏览器和opera 只有通过polipo 或者 privoxy 将socks 代理转为http 代理才行,麻烦。

  2. 2010年1月23日13:30 | #2

    firefox的foxyproxy支持socks解释dns

  3. 2010年1月23日13:35 | #3

    @forkei
    的确,前几天测试了一下,Chrome的Proxy Switchy插件只要选择了Socket 5代理就可以支持远程DNS解析了

  4. 2010年1月23日16:57 | #4

    @forkei
    谢谢您提供的信息。

  5. flytwokites
    2010年1月24日15:25 | #5

    ff的这个pac文件不支持remote dns真是要命!只能改hosts文件才行。

  6. 2010年1月24日17:12 | #6

    firefox 还要pac干嘛, 直接上 autoproxy 阿.

  7. 2010年1月24日20:09 | #7

    about:config
    把network.proxy.socks_remote_dns设为true.

  8. 2010年1月25日15:45 | #8

    forkei :
    chrome 的Proxy Switchy 1.4.2 版本插件可以很好的解决这个问题。
    Firefox 的FoxyProxy 插件也可以很好的解决DNS 污染。
    支持插件扩展功能的浏览器功能就是强大。
    IE 内核浏览器和opera 只有通过polipo 或者 privoxy 将socks 代理转为http 代理才行,麻烦。

    在Chrome浏览器下使用了proxy switchy扩展设置还是唯独访问不了Twitter,其他的YouTube、facebook等等其他墙外都正常啊,想请教下关于switchy有没有哪里特殊的设置呢? 以下是自己的配置信息
    Proxy Profiles ProfilesName:Yousri
    Manual Configuration
    SOCKS Host 127.0.0.1 Port 7070 SOCKS v5
    Switch Rules
    Enable Switch Rules
    RuleName URL Pattern PatternType ProxyProfile
    Twitter *://twitter.com/* Wildcard Yousri
    Other (twitter|facebook|bullogger) RegExp Yousri

    可是终究还是无法实现,不知道有么有联系方式可以请教下呢?

  9. 2010年1月25日18:11 | #9

    @Yousri
    也许不能使用 Rules,至少从我这来看是这样...我发现 Chrome 其实也是用的 .pac 脚本,但是 Chrome 的 .pac 脚本使用的是 SOCKS5 命令而不是平常的 SOCKS 命令。

  10. 2010年1月26日19:21 | #10

    @Solrex Yang
    Orz 一样无法实现,确实太奇怪了

  11. 2010年1月28日11:02 | #11

    更换使用了最新的dev版本终于正常了,看来原先使用的最新的beta版不靠谱啊 可能chrome dns问题在beta版还是未修正

  12. hoopeni
    2010年2月3日14:29 | #12

    @forkei
    兄弟,chrome tor 怎么样能像firefox那样好用?请邮件我,hoopeni#gmail.com

  13. lakowang
    2010年2月24日12:54 | #13

    用Proxy Switchy比较方便,不用,直接设置pac文件,chrome也是支持socks5的@forkei

  14. caesar
    2010年3月3日09:10 | #14

    值得庆幸的是 SOCKS 5 协议增加了对 UDP 数据包的支持,DNS 查询是通过 UDP 传输的,所以我们可以使 DNS 查询数据包也走 SOCKS 5 代理来进行远端 DNS 解析(Remote DNS Lookup)。

    firefox的network.proxy.socks_remote_dns是把域名传递给socks5服务器,让socks5服务器去解析。上面所说的,让DNS查询数据包(UDP数据)通过socks5协议去传输,我还没见过相关应用,有这么用的吗

  15. caesar
    2010年3月3日09:14 | #15

    值得庆幸的是 SOCKS 5 协议增加了对 UDP 数据包的支持,DNS 查询是通过 UDP 传输的,所以我们可以使 DNS 查询数据包也走 SOCKS 5 代理来进行远端 DNS 解析(Remote DNS Lookup)。

    firefox的network.proxy.socks_remote_dns是将域名传递给socks5服务器区解析。而上面所提到的通过socks5对udp数据包的支持,把dns查询数据也通过socks5协议传输,有这样的应用吗

  16. 2010年3月3日09:45 | #16

    @caesar
    多谢指教!您是对的,是我理解错误。

  1. 2010年1月25日08:11 | #1
说明:点击回复/引用, 会发邮件给该用户, 请慎用; 填写非真实电邮地址, 评论可能会被自动过滤, 无法及时显示, 不要责怪我. 卡内基梅隆大学的 reCAPTCHA 计划使用验证码帮助辨认古老典籍扫描时无法识别的文字,输入验证码的同时,您也为保存人类知识做了一分贡献,谢谢!