SSH隧道能当VPN用吗?已有服务器时怎样只代理一个应用?

4 次阅读
FunMeGo VPN 按小时计费的VPN 随用随退 了解服务

SSH隧道能当VPN用吗?如果目标是让一个支持SOCKS的应用经你有权使用的服务器访问网络,OpenSSH动态转发可以完成相应任务。但一条ssh命令不会自动把全机流量接入VPN。

本文展示客户端操作,要求你已经取得SSH登录权限,并且服务器允许转发及相关访问。命令依官方手册整理,未登录你的服务器实测;示例地址与账户都是占位值。

先画清楚这条路径

动态转发让应用连接本地SOCKS入口,由SSH通道把相应连接带到远端,再由远端访问目标。应用必须使用这个入口,另一个未配置的程序不会自动跟随。

你需要的能力这个最小示例是否负责
一个支持SOCKS的应用经服务器访问可以按条件配置
全部应用自动进入通道不提供
UDP游戏或语音透明接管不由本例保证
自动切换服务器与统一套餐管理不提供

不要把普通SOCKS5本身的特性与SSH承载方式混为一谈。代理入口、传输通道和应用接管是不同层次,基础入口说明见SOCKS5与本地代理设置。

用OpenSSH建立本地入口

确认电脑已有OpenSSH客户端,在终端执行下面的格式:

ssh -N -D 127.0.0.1:1080 -o ExitOnForwardFailure=yes -l user ssh.example.com

替换user与ssh.example.com,按服务方要求完成登录;首次连接应通过可信渠道核对服务器主机密钥,不为方便直接关闭主机身份检查。

OpenSSH官方手册定义了-D动态转发与-N不执行远端命令。这里监听127.0.0.1,只让本机应用使用;1080已占用时换一个本机空闲端口,并同步修改后面的应用设置。

ExitOnForwardFailure用于发现转发建立问题,不保证每个目标都能访问。身份验证成功而终端没有命令提示符,可能是-N的预期状态,应继续验证本地代理而非立即退出。

先让一次请求明确走入口

另开终端,已安装curl时可用:

curl --proxy socks5h://127.0.0.1:1080 --connect-timeout 10 --max-time 20 https://example.com/

在Windows PowerShell中可以明确调用curl.exe。example.com是示例目标,需换成你有权访问的测试地址;不要把HTTP代理写法直接替换到同一个端口。

curl官方手册区分socks5与socks5h,后者把相应目标名称交给代理侧解析。这只说明这次curl请求的设置,不表示所有浏览器或系统DNS都变成同样行为。

还要留意NO_PROXY与其他网络接管设置可能影响复现条件。记录实际输出与使用环境,不把任意HTTP响应直接解释成整台电脑已被代理。

再配置真正需要的应用

在目标应用中选择它支持的SOCKS方式,填写本机127.0.0.1和刚才的监听端口。应用有独立DNS设置时,再按其文档确认名称如何解析。

用该应用完成原任务,同时观察SSH终端是否报告转发被拒绝或连接失败。单次curl成功只能作为入口验证,不能证明另一个应用已经使用相同路径。

浏览器扩展也可能覆盖系统代理,若同时开着其他工具,应明确每个应用的入口归属。不要为配合一个应用,把服务器SSH账号密码输入到不明代理扩展。

连接失败要看哪一段被拒绝

提示或结果更相关的检查
SSH登录失败服务器地址、账户及认证
本地地址已占用本机监听端口
administratively prohibited管理员是否允许相应转发
特定目标打不开远端网络、访问策略及目标服务
curl正常但应用失败应用入口与解析设置

管理员可以限制SSH转发,这不是客户端多试几次密码能解决的。服务原本只授权维护登录时,应先询问是否允许用作代理,不自行扩大用途。

示例主要处理通过动态转发的TCP连接,不因为SOCKS5协议存在UDP能力,就宣称OpenSSH的-D已支持所有UDP应用。语音和游戏需求应选择明确支持的方案。

用完先恢复应用再关闭通道

结束使用前,恢复目标应用原来的代理设置,再在SSH终端按Ctrl+C停止前台连接。否则应用仍指向已经关闭的1080端口,可能出现退出SSH后反而无法联网。

本例没有配置自动启动、保活或失败重试。确有长期运行需求时,应另行设计状态提示和恢复行为,而不是把隐藏的后台进程当成稳定服务。

服务端能接触哪些信息,还需结合目标协议和加密边界理解,见代理节点与中转能看到什么。SSH通道不让远端服务器或网站自动成为可信主体。

常见问题

SSH登录成功就代表代理生效了吗?

没有,还要确认本地转发入口与目标应用设置。通过该入口完成一次实际请求再判断。

动态转发需要在服务器安装SOCKS软件吗?

常见OpenSSH场景不需要另装独立SOCKS服务,但SSH服务器必须允许相应转发。部署策略仍由管理员决定。

可以用这个例子代理所有UDP应用吗?

不能这样承诺。不要把SOCKS协议的整体能力直接套给OpenSSH动态转发实现。

关闭SSH后网页打不开怎么办?

检查应用是否仍指向已经停止的本地端口。恢复原代理设置,再验证原有联网路径。

在线客服
正在加载...