Privoxy:把仅支持 HTTP 代理的客户端接到 SOCKS 隧道
用本地 HTTP 代理把只接受 HTTP 代理的客户端接到 SOCKS 隧道,而不是给隧道端口换个名字。
SSH 动态隧道(包括 PuTTY 的动态转发)提供的是 SOCKS 接口。只接受 HTTP 代理的应用,不能仅仅因为把那个端口叫作 HTTP 就能使用它。
两者之间可以放一个本地协议桥。应用把 HTTP 代理请求发给桥,桥再通过 SOCKS 服务打开到目标地址的连接。
Privoxy 用它的转发规则记录了这种安排。对于已存在的本地 SOCKS5 隧道,一段配置是:
forward-socks5 / 127.0.0.1:1080 .
应用连接的是 Privoxy 的 HTTP 监听端口,而不是 1080 端口。应按预期访问策略保持该监听端口处于本地。规则末尾的点有文档记载的含义,它不是缺失互联网主机名的占位符。
这是协议转换
Privoxy 的转发文档解释了 SOCKS 转发的语法和主机名处理方式。普通的 TCP 端口转发并不做同样的转换:它把客户端的 HTTP 字节原样送到 SOCKS 监听端,而对方仍然期待进行 SOCKS 协商。
桥本身也成了你需要理解的那部分配置。Privoxy 可能带有自己的内容过滤和访问设置。加入它,并不等于让原应用原生支持 SOCKS。
对 HTTPS 网站,应用通常向 HTTP 桥请求 CONNECT,桥再通过 SOCKS 取得目标连接。网站的正常 TLS 仍是应用与网站之间的关系;桥不需要冒充网站来提供这条路径。
如果应用能直接使用 SOCKS,多出来的组件可能没有必要。用桥去解决真实的协议不匹配问题,并把监听端和上游清楚区分开。