通过 SSH 创建透明代理的简单方法是什么?

通过 SSH 创建透明代理的简单方法是什么?

我有一台通过 SSH 连接的远程计算机,我想通过连接客户端的网络代理某些域。

我认为在客户端上设置一个简单的代理(如 nginx)并使用反向 SSH 隧道就足够了 - 但没有运气,现在想知道是否可行。

我的计划是:

  • 使用 连接到我的遥控器。ssh [email protected] -R 443:localhost:443

  • 远程将在其 中有条目/etc/hosts,循环返回某些域

service-1.example.com 127.0.0.1
service-2.example.com 127.0.0.1
  • 客户端上的代理将接收这些请求并根据Host标头对其进行代理。

没有按计划进行:

最初我以为这就像使用 proxy_pass/反向代理设置 nginx 一样简单,但是它不会转发 SSL 内容,需要自签名证书。

我考虑添加类似的模块代理连接模块但是我一直在努力编译 nginx(MacOS),花了几个小时试图弄清楚要获取哪个版本的源代码、从哪里获取它、哪个版本的 OpenSSL、pcre、gcc、clang 等——最后我毫无进展。

我甚至不确定,也不知道这是否是我需要的?

知道实现这一目标的最简单方法是什么吗?

答案1

最初我以为这就像使用 proxy_pass/反向代理设置 nginx 一样简单,但是它不会转发 SSL 内容,需要自签名证书。

您无法根据“Host:”标头转发 SSL 内容,因为“Host:”标头位于 SSL(TLS)连接内部,除非代理终止并解密 SSL,否则代理无法看到它。

解密流量并保持原始服务器证书完好无损是不可能的;这几乎是工作SSL 和 TLS 来使这种情况不可能发生。

相反,您需要一个基于 TLS SNI(服务器名称指示)扩展转发连接的代理。sniproxy 和 HAproxy 是两个选项。

(HTTP CONNECT 代理将是-透明,因为它要求客户端明确发送指定目标主机:端口的 HTTP CONNECT 请求。)

相关内容