我目前在一台小型 VPS 上运行 OpenVPN 和 squid 代理。在 VPN 的配置文件中,我使用 OpenVPN 代理选项在 VPN 之前连接到代理。
配置中有趣的部分如下:
*注意:配置文件中的编辑 IP 相同,因为 squid 和 OpenVPN 服务器都在同一个 VPS 上。
[...]
remote xxx.xxx.xxx.xxx 15855 tcp-client
http-proxy xxx.xxx.xxx.xxx 3128
[...]
http-proxy-option CUSTOM-HEADER Host [redacted]
[...]
我知道代理位于 VP 连接之前,但作为 HTTP 代理,Squid 如何处理与 VPN 的 TCP 连接?自定义标头何时传递?它是在客户端连接到代理时传递的,还是在数据包从代理发送到 VPN 时传递的?
有人可以解释一下或者给我一些参考资料以便更好地理解发生了什么吗?
答案1
像 Squid 这样的代理支持多种不同的 HTTP 请求方法。您可能听说过等GET
,POST
但还有其他方法,例如上面 OpenVPN 正在使用的;CONNECT
。
CONNECT
通过 HTTP 创建一个“隧道”,你可以阅读更多内容维基百科页面。
答案2
OpenVPN 中的“代理”仅表示 OpenVPN 客户端通过代理连接到服务器,例如您可以在 ssh 客户端上打开的 socks5 代理。除非您将 squid 设置为给定端口上的 http 代理,否则它将使用自己的缓存文件自动劫持到端口 80 或端口 443 的任何出站流量。在此设置下,您可以将 squid 视为反向代理,就像 nginx 一样,它不提供真正的 http 代理。