为什么修改 DNS 并不能配好 SOCKS 代理
说明把网站主机名指向 SOCKS 服务器,为何不会让未配置的浏览器走上代理。
修改 DNS 解析结果,改的只是浏览器要连接的地址,并没有改变浏览器连上之后所说的协议。
打开普通的 HTTP 网址,浏览器就发 HTTP;打开 HTTPS 网址,浏览器会为该站点启动 TLS。而 SOCKS5 服务器先要完成自己的协商:选择方法、必要时做认证,再发出一个指明目的地的请求。未做配置的浏览器一样都不会发送。
这就解释了一次 DNS 改动之后,一个本来可达的 Dante 监听端口为何会立刻断开连接。服务本身可能完全正常,进来的字节却属于错误的协议。把监听端口换到 80 或 443,也不会把这些字节变成 SOCKS。
要让浏览器完成握手并请代理继续向外连接,需要配置浏览器的 SOCKS 接口,例如 Firefox 的 SOCKS 设置,或某个应用自带的代理设置。PAC 文件可以为使用它的应用挑选受支持的代理线路。这仍然是另一套代理配置,而不是 A 或 AAAA 记录自身的属性。
HTTPS 又给“只改 DNS”的想法添了一道障碍。浏览器依旧期待网址里那个站点的身份,而一张为代理主机签发的证书,并不能仅因为 DNS 把连接引到了那里就满足这个期待。
透明网络拦截是另一种设计,涉及路由和与之兼容的拦截软件。它无法靠让 DNS 返回一台 SOCKS 服务器的地址来获得。