SOCKS 代理到 HTTP 代理后面的 SSH 服务器

SOCKS 代理到 HTTP 代理后面的 SSH 服务器

我在端口 9090 设置了一个 SOCKS 代理到其他地方的计算机 B:

ssh -D localhost:9090 user@B

并在本地 Google Chrome 浏览器中进行了配置。但是,计算机 B 位于 HTTP 代理后面,因此本地发起的 HTTP 请求通过 SOCKS 代理到达计算机 B,但无法寻址(当发出此类请求时,运行 ssh -D localhost:9090 user@B 的终端显示“打开失败:连接失败:没有到主机的路由”)。

我努力了:

  1. 在 Google Chrome 中设置远程 HTTP 代理(计算机 B 位于其后面)和 SOCKS 代理,
  2. 运行 ssh -D localhost:9090 user@B 并正确设置环境变量 http_proxy,
  3. 在计算机B上的用户的.bashrc中添加http_proxy=_proxy_address_;

但都不起作用。

有人知道如何配置 SOCKS 代理,以便将计算机 B 后面的 HTTP 代理考虑在内吗?任何不涉及更改服务器上的 SSHD 或全局配置的方法都是首选。

答案1

通过 SSH “转发”远程网络的代理服务器比使用内置的 SOCKS 服务器(只需要另一端有一个裸网关可寻址网络)效果会更好。

ssh -L 8080:internal_ip_of_proxy:8080 user@ssh_server

这会在本地公开代理服务器,允许您设置浏览器的代理设置,localhost:8080并通过 SSH 隧道传输到远程代理。

你可以将它应用于任何远程服务。例如,你可以从你的服务器隧道传输 Imgur(实际上是单主机代理):

ssh -L 8080:imgur.com:80 user@ssh_host

在本地终端上:

curl --header 'Host: imgur.com' localhost:8080

Host 标头是必需的,否则curl将请求不存在的localhost站点。您也可以通过在 中添加一行来解决此问题/etc/hosts,解析imgur.com127.0.0.1...但我跑题了,您不需要这些来实现您的目的。

相关内容