在保护您在网络上的足迹时,您可能听说过 VPN,对吧?VPN 充当您的计算机与互联网之间的中间人。所有流量都会通过 VPN 服务器,从而有效地隐藏您的 IP 地址和位置。
然而,VPN 并不是 代理服务器的唯一形式。SOCKS (Socket Secure) 是一种类似的网络协议,它通过代表客户端路由网络流量,允许通过防火墙与服务器进行通信。与 VPN 相比,SOCKS 提供了更多的灵活性和对网络配置的控制。当您无法安装 VPN 客户端或不信任 VPN 提供商时,它非常有用。
本指南将 演示如何建立 SSH SOCKS 5 代理隧道并通过该隧道路由您的网络流量。
前提条件
为了进行演示,我们使用了一台运行 Ubuntu 桌面的本地计算机和一台 运行 Ubuntu 服务器的远程计算机。在使其顺利工作之前,您需要 配置好 SSH。由于我们使用的是 SOCKS 代理,为了测试连接,我们需要一个可以使用它的应用程序。 Firefox 是一个完美的例子。它是一款支持 SOCKS 5 代理隧道的现代网页浏览器。
如果您使用的是 Windows,那么您可以使用 WSL (Windows Subsystem for Linux) 来设置本地 Linux 环境,或者使用 PuTTY,这是一款可以实现 Telnet、rlogin 等各种网络协议的开源应用程序。
配置 SOCKS 隧道
-
设置 SOCKS 隧道 (macOS/Linux)
在本地计算机上,我们需要配置 SSH 密钥以确保安全连接。SSH 密钥还必须注册到远程系统。这篇关于 配置基于 SSH 密钥的身份验证 的指南详细演示了该过程。
以下 SSH 命令将建立到远程服务器的 SOCKS 隧道:
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> |

让我们分解一下这个命令:
-
-i:它告诉 SSH 连接要使用哪个 SSH 密钥。
-
-D:它告诉 SSH 我们想要建立一个 SOCKS 隧道。至于端口,我们使用的是端口 1024。它不是一个固定值。您可以选择介于 1024 和 65536.
-
-f:SSH 进程将在后台运行。
-
-C:SSH 将在将数据发送到远程服务器之前对其进行压缩。这既可以节省数据消耗,又可以提高有效带宽。
-
-q:在安静模式下运行该工具。
-
-N:它告诉 SSH 在建立隧道后,不会发送任何命令。
运行后,我们可以验证进程是否正常启动。以下命令将打印有关所有正在运行的 SSH 进程的信息:
|
1 |
ps aux | grep ssh |

现在,您可以安全地关闭终端窗口。SSH 进程将按预期在后台运行。
-
设置 SOCKS 隧道 (Windows)
对于 Windows 用户,使用 PuTTY 是一个更简单的解决方案。首先,您需要 下载 PuTTY:

安装完成后,启动 PuTTY:

从左侧面板的 Session 选项卡中,输入服务器的 Host Name (or IP address)。至于 Connection type,选择 SSH。接下来,转到 Connection >> SSH >> Tunnels。在这里,在 Destination 字段下,选择屏幕截图所示的选项:

接下来,点击 Open。将弹出一个终端窗口,通过 SSH 连接到远程服务器。登录到远程服务器:

应用 SOCKS 隧道
隧道现已设置完毕。任何支持 SOCKS 的应用程序都可以使用该隧道。为了进行演示,Firefox 是一个极好的例子。
首先,打开 Firefox。点击右上角的菜单图标。转到 设置:

接下来,搜索 代理。点击 设置 (位于 配置 Firefox 如何连接到互联网:

处)。之后,选择 手动代理配置。至于 SOCKS 主机,使用 localhost 或 127.0.0.1。然后,在端口处输入我们为 SOCKS 隧道专用的端口。不要忘记选择 SOCKS_v5:

最后,勾选 使用 SOCKS_v5 时代理 DNS 选项。点击 确定 继续。
接下来,打开一个新标签页并尝试访问任何网页。例如,您可以通过 CheckMyIP.
还原代理
当您不再需要指向 SSH 隧道的代理连接时,可以从 Firefox 代理设置中安全地禁用它:

在窗口中,选择 使用系统代理设置 并点击 确定.
关闭 SOCKS 隧道
-
在 macOS/Linux 上关闭隧道
要关闭隧道,我们需要手动终止 SSH 进程。我们需要 SSH 进程的 PID(进程 ID)。以下命令将显示所有正在运行的 SSH 进程的 PID:
|
1 |
ps aux | grep ssh |
注意使用创建隧道命令运行的 SSH 进程。终止该进程:
|
1 |
kill <tunnel_ssh_pid> |
如果没有定义选项, kill 命令将向目标进程发送一个通用的 SIGTERM 信号。您可以了解更多关于 本教程中的 Linux 进程管理.
-
在 Windows 上关闭隧道
关闭 PuTTY 窗口应该会关闭隧道连接。
故障排除
以下是您在尝试使用 SOCKS 路由流量时可能会遇到的一些常见问题。
-
防火墙
如果您因为防火墙限制而无法建立连接,那么很可能是防火墙被配置为阻止连接到端口 22。这是 SSH 用于连接到远程系统的默认端口。默认情况下,某些端口保持开放,例如端口 80(常规 Web 流量)和端口 443(TLS,安全 Web 流量)。
如果 SSH 服务器不提供 Web 内容,那么我们可以使用默认端口之一( 80 或 443 )来代替端口 22。建议使用端口 443,因为默认情况下它期望加密流量。它还会对传出流量进行加密。要进行此更改,我们需要修改 SSH 配置文件。在文本编辑器中打开该文件:
|
1 |
sudo nano /etc/ssh/sshd_config |
SSH 可以出于其目的使用多个端口。向下滚动配置文件并找到端口部分:

修改完成后,保存文件并关闭编辑器。重启 SSH 服务以应用更改:
|
1 |
sudo service ssh restart |
要验证新端口是否正常工作,请尝试使用新端口连接到远程服务器:
|
1 |
ssh <remote_username>@<remote_server> -p 443 |
如果连接成功,我们可以安全地使用端口 443 来进行 SSH 隧道传输。以下是建立 SOCKS 隧道的修改后命令:
|
1 |
ssh -i ~/.ssh/id_rsa -D 2000 -f -C -q -N <remote_username>@<remote_server> -p 443 |
这里,标志 -p 告诉 SSH 使用端口 443.
结语
在当今时代,隐私和安全是人们最关心的问题。当您处于不安全(或敌对)的网络中时,有很多方法可以安全地进行浏览。在大多数情况下,使用 VPN 将为您的网络流量提供足够的安全保障。另一方面,如果您无法使用或不信任 VPN,SOCKS 隧道将为您提供必要的安全保障。拥有 SOCKS 隧道还可以让您完全控制其设置。
祝您使用愉快!
评论
暂无评论。发表第一条评论吧。