问题描述
假设我可以访问支持隧道的SSH服务器,并且我正在运行* ubuntu的PC上,如何设置本地SOCKS代理,该代理在到达Internet之前通过该SSH服务器对通信进行隧道传输?
最佳方法
连接到运行ssh的服务器时使用的ssh
二进制文件支持使用-D
标志开箱即用地运行SOCKS代理。例:
ssh -D 1337 -f -C -q -N user@remote -p 22
-
-D 1337
告诉ssh
在本地1337端口上启动SOCKS服务器。 -
-f
将进程派生到后台。 -
-C
打开压缩。 -
-q
启用了”Quiet mode”,因为这里的目的只是为了建立隧道,我们实际上并不关心错误输出等。 -
-N
告诉ssh
,不会发送任何命令(如果我们未指定,-f
会抱怨)。 -
-p
指定要使用的端口;显然,该默认值默认为22,因此上面的声明毫无意义,但为清楚起见而包括在内。
当您的SOCKS服务器启动并运行时,您只需要确保您的应用程序(通常是Web浏览器)尝试连接到本地SOCKS代理,而不是常规Internet。
在Firefox 29(此处以示例说明)中,这是通过转到菜单(右上角的三个香肠),然后依次单击“首选项”和“>”来实现的。进阶>网络> (连接)>设置…-确保仅填写“袜子”字段!由于您的代理位于同一系统上,因此您可以使用localhost
或127.0.0.1
指向您在同一系统上设置的任何端口。
如果您还需要通过隧道传送DNS请求(如果不是,则DNS查找将显示您要访问的网站),您可以仅检查”Remote 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
这个答案是从法国写的,但是通过瑞典传来的:)