![配置了代理后如何本地解析DNS?](https://linux22.com/image/972577/%E9%85%8D%E7%BD%AE%E4%BA%86%E4%BB%A3%E7%90%86%E5%90%8E%E5%A6%82%E4%BD%95%E6%9C%AC%E5%9C%B0%E8%A7%A3%E6%9E%90DNS%EF%BC%9F.png)
如果我配置代理,在设置->网络->代理下,然后尝试访问“http://google.com“,名称解析(google.com 的 IP)将在代理服务器上进行,但是...
我怎样才能改变这种行为?
我的意思是,在使用代理之前,我需要在我的桌面本地解析 DNS。
但为什么?
这样,我将配置“忽略具有大量子网(IPv4 / IPv6)的主机,这些主机不需要代理即可访问它们”,然后,Ubuntu 首先需要:
1-在本地解析DNS(即不通过代理);
2-尝试将本地发现的网站IP与“ignore-hosts”设置进行匹配;
是否可以?
谢谢!蒂亚戈
答案1
当您使用 HTTP 代理时这是不可能的,因为:
- 您连接的服务器是代理的服务器,而不是最终目的地的服务器。
- 您将请求的完整 URL(包括主机名)发送给代理。然后代理将代表您执行请求。
因此,它必须是执行 DNS 查找的代理。
无法在本地进行 DNS 查找,并仅将 IP 地址发送到代理服务器。首先,没有机制来指定代理应尝试特定主机的特定 IP 地址。您可以将 URL 从 更改为 ,http://example.com/mypage
但http://33.33.33.33/mypage
这样代理服务器就不知道要请求哪个主机名,这是现代网络(HTTP/1.1 及更高版本)的一个重要部分,它依赖于请求中始终存在的 Host 标头,从而消除了所有主机名都从不同 IP 地址提供服务的限制。
最好的办法是将代理服务器配置为使用您选择的 DNS 解析器。只有当您使用您控制的本地代理服务器时才有可能。
注意:当您使用 SOCKS 代理或其他低级隧道方法时,您能使用本地 DNS 服务器。但不要使用 HTTP 代理。
答案2
编辑:或者,您可以根据自己的标准使用 PAC 文件来控制是否使用代理。如果适用,则必须关闭 Autoproxyresultcache。
您可以安装 Technitium 并作为 DNS 服务器。 https://technitium.com/
答案3
你需要一个 redsocks 代理服务器(由于它使用 iptables,所以设置起来非常困难)+ 一些本地代理中介,例如这。
redsocks 的特点是 DNS 查询默认直接进行,不通过代理。运行:sudo -H -u proxyuser socks5-server
。然后是浏览器或任何应用程序。socks5
-server 不是必需的,否则您必须以另一个用户(proxyuser)运行浏览器,并使用 xhost+ 选项运行它。
除了 redsocks + socks5-server,您还可以尝试使用 proxychains + 3proxy (socks) > browser。proxychains 是一个相当弱的代理程序,不支持所有应用程序(它不支持静态链接)。然后在浏览器中禁用 SOCKS DNS。我还没有测试过这种方法。
在 Windows 中,您可以使用 Proxifier。