返回博客

在不使用 VPN 的情况下使用 SOCKS 隧道路由网络流量

在不使用 VPN 的情况下使用 SOCKS 隧道路由网络流量

在保护您在网络上的足迹时,您可能听说过 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 隧道:

让我们分解一下这个命令:

  • -i:它告诉 SSH 连接要使用哪个 SSH 密钥。

  • -D:它告诉 SSH 我们想要建立一个 SOCKS 隧道。至于端口,我们使用的是端口 1024。它不是一个固定值。您可以选择介于 1024 和 65536.

  • -f:SSH 进程将在后台运行。

  • -C:SSH 将在将数据发送到远程服务器之前对其进行压缩。这既可以节省数据消耗,又可以提高有效带宽。

  • -q:在安静模式下运行该工具。

  • -N:它告诉 SSH 在建立隧道后,不会发送任何命令。

运行后,我们可以验证进程是否正常启动。以下命令将打印有关所有正在运行的 SSH 进程的信息:

Routing grep ssh

现在,您可以安全地关闭终端窗口。SSH 进程将按预期在后台运行。

  • 设置 SOCKS 隧道 (Windows)

对于 Windows 用户,使用 PuTTY 是一个更简单的解决方案。首先,您需要 下载 PuTTY:

Routing download putty

安装完成后,启动 PuTTY:

Routing putty screen1

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

Routing putty screen2

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

Routing putty screen 3

应用 SOCKS 隧道

隧道现已设置完毕。任何支持 SOCKS 的应用程序都可以使用该隧道。为了进行演示,Firefox 是一个极好的例子。

首先,打开 Firefox。点击右上角的菜单图标。转到 设置:

ubuntu screen1

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

firefox preferences

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

firefox proxy conf

最后,勾选 使用 SOCKS_v5 时代理 DNS 选项。点击 确定 继续。

接下来,打开一个新标签页并尝试访问任何网页。例如,您可以通过 CheckMyIP.

还原代理

当您不再需要指向 SSH 隧道的代理连接时,可以从 Firefox 代理设置中安全地禁用它:

Routing firefox reverting proxy conf

在窗口中,选择 使用系统代理设置 并点击 确定.

关闭 SOCKS 隧道

  • 在 macOS/Linux 上关闭隧道

要关闭隧道,我们需要手动终止 SSH 进程。我们需要 SSH 进程的 PID(进程 ID)。以下命令将显示所有正在运行的 SSH 进程的 PID:

注意使用创建隧道命令运行的 SSH 进程。终止该进程:

如果没有定义选项, kill 命令将向目标进程发送一个通用的 SIGTERM 信号。您可以了解更多关于 本教程中的 Linux 进程管理.

  • 在 Windows 上关闭隧道

关闭 PuTTY 窗口应该会关闭隧道连接。

故障排除

以下是您在尝试使用 SOCKS 路由流量时可能会遇到的一些常见问题。

  • 防火墙

如果您因为防火墙限制而无法建立连接,那么很可能是防火墙被配置为阻止连接到端口 22。这是 SSH 用于连接到远程系统的默认端口。默认情况下,某些端口保持开放,例如端口 80(常规 Web 流量)和端口 443(TLS,安全 Web 流量)。

如果 SSH 服务器不提供 Web 内容,那么我们可以使用默认端口之一( 80443 )来代替端口 22。建议使用端口 443,因为默认情况下它期望加密流量。它还会对传出流量进行加密。要进行此更改,我们需要修改 SSH 配置文件。在文本编辑器中打开该文件:

SSH 可以出于其目的使用多个端口。向下滚动配置文件并找到端口部分:

Routing sshd config

修改完成后,保存文件并关闭编辑器。重启 SSH 服务以应用更改:

要验证新端口是否正常工作,请尝试使用新端口连接到远程服务器:

如果连接成功,我们可以安全地使用端口 443 来进行 SSH 隧道传输。以下是建立 SOCKS 隧道的修改后命令:

这里,标志 -p 告诉 SSH 使用端口 443.

结语

在当今时代,隐私和安全是人们最关心的问题。当您处于不安全(或敌对)的网络中时,有很多方法可以安全地进行浏览。在大多数情况下,使用 VPN 将为您的网络流量提供足够的安全保障。另一方面,如果您无法使用或不信任 VPN,SOCKS 隧道将为您提供必要的安全保障。拥有 SOCKS 隧道还可以让您完全控制其设置。

祝您使用愉快!

author

Pranay Kapgate

作者 · CloudSigma

Preslav Dobrev 是 CloudSigma 的创意设计师,专注于通过传统和创新营销渠道打造一致的企业形象。他擅长将艺术愿景与战略营销相融合,创造具有影响力的品牌叙事。

评论

暂无评论。发表第一条评论吧。