如何设置本地 SOCKS 代理以通过 SSH 传输流量?

pzk*_*pfw 30 ssh firefox proxy

假设我可以访问支持隧道的 SSH 服务器,并且我在运行 *ubuntu 的 PC 上,如何设置本地 SOCKS 代理,在到达 Internet 之前通过该 SSH 服务器隧道传输流量?

pzk*_*pfw 46

ssh连接到运行 ssh 的服务器时使用的二进制文件支持开箱即用的 SOCKS 代理,并带有-D标志。例子:

ssh -D 1337 -f -C -q -N user@remote -p 22
Run Code Online (Sandbox Code Playgroud)
  • -D 1337告诉ssh在本地端口 1337 上启动 SOCKS 服务器。
  • -f 将进程分叉到后台。
  • -C 打开压缩。
  • -q 启用“安静模式”,因为这里的目的只是隧道我们并不真正关心错误输出等。
  • -N告诉ssh将不会发送任何命令(-f如果我们不指定它会抱怨)。
  • -p指定要使用的端口;显然,这默认为 22,因此上面的声明毫无意义,但为了清楚起见,将其包含在内。

当您的 SOCKS 服务器启动并运行时,您只需确保您的应用程序(通常是 Web 浏览器)尝试连接到本地 SOCKS 代理,而不是常规 Internet。

在 Firefox 29(此处作为示例进行解释)中,这是通过转到菜单(右上角的三个香肠),然后依次选择首选项 > 高级 > 网络 >(连接)> 设置...填写袜子字段!由于您的代理在同一系统上,您可以使用localhost127.0.0.1指向您在同一系统上设置的任何端口。

如果您还需要对 DNS 请求进行隧道传输(如果不是,则您的 DNS 查找将显示您尝试访问的网站),您只需检查“远程 DNS”或在about:config. 在最后一种情况下,打开它并设置这些值:

network.proxy.socks : 127.0.0.1
network.proxy.socks_port : 1337
network.proxy.socks.remote_dns : true
network.proxy.socks_version : 5
network.proxy.type : 1
Run Code Online (Sandbox Code Playgroud)

您可能还需要此设置以从隧道中排除某些域或站点:

network.proxy.no_proxies_on : localhost, 127.0.0.1, 192.168.0.0/24, .yourcompany.com
Run Code Online (Sandbox Code Playgroud)

这个答案是从法国写的,但通过瑞典隧道:)

  • 它绝不是特定于 Firefox 的,我将 Firefox 部分作为服务包含在内,因为这通常是人们使用 SSH 隧道的目的,它可以在任何支持 SOCKS 代理的应用程序中工作(ssh 不关心)。 (4认同)
  • 说到设置浏览器以使用代理。如果您使用 **google chrome**,则需要在 ubuntu 的 **network-settings** 中声明代理,因为这是 google chrome 将使用的。可以使用非官方 CLI 选项来声明没有这个的代理。但从几周前开始,这不再可能了。 (2认同)