挂代理后->DNS解析
https://github.com/FelisCatus/SwitchyOmega/wiki/DNS-and-SOCKS-proxy
https://github.com/FelisCatus/SwitchyOmega/issues/963
在 Chromium 浏览器(以及基于 Chromium 的所有浏览器)中使用 SOCKS 代理时,部分 DNS 请求不会经过服务器发送(英文参考资料)。这是由 DNS 预加载造成的。以下引用 Chromium 浏览器代理信息页面的文字:
Note that some traffic such as DNS prefetching will NOT go through the proxy server. To prevent the browser from doing local DNS resolves try adding this command line flag:
--host-resolver-rules="MAP * ~NOTFOUND , EXCLUDE 127.0.0.1"
要防止DNS请求泄露,请使用以上命令行参数(请将 127.0.0.1
替换成您使用的代理主机地址)。或者您也可以在Chromium选项中完全禁止DNS预加载。请在选项的"Show advanced settings..."下方取消选择此选项:
[ ] 预测网络操作,以提高网页加载速度
提示:此主题与本项目完全无关。但请保留此wiki页面以供作为参考。
对于 HTTP/HTTPS 类型的代理服务器而言,请求的域名会作为 HTTP 协议的一部分直接发往代理服务器,不会在本地进行任何解析操作。也就是说,域名的解析与连接目标服务器,是代理服务器的职责。浏览器本身甚至无须知道最终服务器的 IP 地址。据我所知,此行为无法通过浏览器选项等更改。
也就是说,理论上使用 HTTP/HTTPS 类型的代理服务器时,本地的 DNS 解析、缓存、 hosts 文件等都不使用,与本地设置的 DNS 服务器地址无关。DNS 解析完全在代理服务器上进行。
socks代理不是,DNS解析和连接目标服务器(IP地址,而非域名)是两个环节,所以有使用远程代理做DNS解析(并作结果)的选项。
而http代理接收的是包含域名的网址,不受本地DNS、hosts影响。
简而言之:
- DNS是基于UDP协议的
- socks5代理协议支持TCP和UDP的代理, 所以使用 socks5 代理可以实现远程DNS, 域名解析由socks5代理服务器完成.
- HTTP 代理协议如何实现DNS解析, 由HTTP客户端决策, 可以先解析域名后请求代理, 也可以将域名交给代理服务器解决 ?????
- http代理 只是把http协议的内容通过tcp传到代理服务器,这时候代理服务器可以去走udp查dns,走的是代理服务器本地的dns吧。
https://phpor.net/blog/post/2779
https://www.ohyee.cc/post/note_socks5h_hostname