我在端口 9090 设置了一个 SOCKS 代理到其他地方的计算机 B:
ssh -D localhost:9090 user@B
并在本地 Google Chrome 浏览器中进行了配置。但是,计算机 B 位于 HTTP 代理后面,因此本地发起的 HTTP 请求通过 SOCKS 代理到达计算机 B,但无法寻址(当发出此类请求时,运行 ssh -D localhost:9090 user@B 的终端显示“打开失败:连接失败:没有到主机的路由”)。
我努力了:
- 在 Google Chrome 中设置远程 HTTP 代理(计算机 B 位于其后面)和 SOCKS 代理,
- 运行 ssh -D localhost:9090 user@B 并正确设置环境变量 http_proxy,
- 在计算机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.com
为127.0.0.1
...但我跑题了,您不需要这些来实现您的目的。