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


30

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

Answers:


45

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

ssh -D 1337 -f -C -q -N user@remote -p 22
  • -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

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

network.proxy.no_proxies_on : localhost, 127.0.0.1, 192.168.0.0/24, .yourcompany.com

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


这仅适用于Firefox。
Braiam

4
它绝不是特定于Firefox的,我将Firefox部分作为服务包括在内,因为这通常是人们使用SSH隧道的目的,它可以在支持SOCKS代理的任何应用程序中使用(ssh无关紧要)。
pzkpfw

2
说到设置浏览器以使用代理。如果您使用的是谷歌浏览器,则需要在ubuntu 的网络设置中声明代理,因为这就是谷歌浏览器将使用的代理。没有此选项的非官方CLI选项可用于声明代理。但是到了几周前,这已经不可能了。
MadMike 2014年

谢谢,你让我下地狱。我之所以到那里,是因为大约10个小时前我没有正确阅读您的答案。应该注意-D-p分开。
莱克斯

也更容易记住:ssh -D 1337 user@host
Alcalyn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.