SSH反向隧道VPS怎么设置?_从零开始实现内网穿透的完整指南

如何使用SSH反向隧道连接VPS实现内网穿透?

参数类型 常用配置 说明
远程端口 2222, 8080 VPS上监听的端口
本地端口 22, 80 内网服务端口
中间服务器 VPS公网IP 作为跳转的服务器
连接协议 SSH 加密传输协议
认证方式 密钥对, 密码 安全认证机制

SSH反向隧道VPS设置详解:从零开始实现内网穿透

什么是SSH反向隧道?

SSH反向隧道是一种通过公网服务器(VPS)将内网服务暴露到公网的技术手段。它通过在本地计算机和VPS之间建立一条加密的SSH连接,让外部用户能够通过VPS访问到内网中的服务。

主要配置步骤概览

步骤 操作内容 关键命令
1 生成SSH密钥对 ssh-keygen -t rsa
2 配置VPS免密登录 ssh-copy-id user@vps-ip
3 建立反向隧道 ssh -R 远程端口:本地地址:本地端口 user@vps-ip
4 验证连接状态 netstat -tlnp
5 配置持久化 使用autossh或systemd服务

详细操作流程

步骤1:生成SSH密钥对

操作说明:在本地计算机生成SSH密钥对,用于安全认证 使用工具提示:使用OpenSSH客户端
# 生成RSA密钥对
ssh-keygen -t rsa -b 4096 -C "youremail@example.com"

生成的密钥文件通常位于:

~/.ssh/idrsa (私钥)

~/.ssh/idrsa.pub (公钥)

步骤2:配置VPS免密登录

操作说明:将本地公钥上传到VPS,实现免密码登录 使用工具提示:使用ssh-copy-id工具
# 将公钥复制到VPS
ssh-copy-id -i ~/.ssh/idrsa.pub user@your-vps-ip

测试连接

ssh user@your-vps-ip

步骤3:建立反向隧道连接

操作说明:建立从本地到VPS的反向隧道,将本地服务映射到VPS端口 使用工具提示:使用SSH客户端建立反向隧道
# 基本反向隧道命令
ssh -N -R 8080:localhost:80 user@your-vps-ip

参数说明:

-N: 不执行远程命令

-R: 建立反向隧道

8080: VPS上的监听端口

localhost:80: 本地服务的地址和端口

步骤4:配置持久化连接

操作说明:使用autossh工具确保隧道连接断开后自动重连 使用工具提示:安装并使用autossh工具
# 安装autossh(Ubuntu/Debian)
sudo apt-get install autossh

使用autossh建立持久隧道

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -N -R 8080:localhost:80 user@your-vps-ip

步骤5:配置systemd服务(可选)

操作说明:创建systemd服务实现开机自启动 使用工具提示:编辑systemd服务文件
# 创建服务文件
sudo nano /etc/systemd/system/ssh-reverse-tunnel.service

服务文件内容示例:

[Unit] Description=SSH Reverse Tunnel After=network.target [Service] User=your-local-username ExecStart=/usr/bin/autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -N -R 8080:localhost:80 user@your-vps-ip Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

常见问题与解决方案

问题 原因 解决方案
连接频繁断开 SSH会话超时 添加ServerAliveInterval 60参数,或使用autossh工具
权限被拒绝 密钥权限设置不当 执行chmod 600 ~/.ssh/idrsa设置正确权限
端口绑定失败 端口已被占用 更换VPS上的监听端口,如使用2222代替22
无法从外部访问 VPS防火墙限制 开放VPS防火墙相应端口:sudo ufw allow 8080
服务重启后隧道断开 未配置持久化 配置systemd服务或使用nohup后台运行

高级配置技巧

多服务映射配置

如果需要将多个本地服务映射到VPS,可以使用多个-R参数:
ssh -N -R 8080:localhost:80 -R 2222:localhost:22 user@your-vps-ip

网关端口配置

为了允许其他机器通过VPS访问隧道服务,需要在VPS的SSH配置中启用GatewayPorts:
# 在VPS上编辑SSH配置文件
sudo nano /etc/ssh/sshdconfig

添加或修改以下行:

GatewayPorts yes

重启SSH服务

sudo systemctl restart ssh
通过以上步骤,您可以成功建立SSH反向隧道,实现内网服务的公网访问。这种方案特别适合需要临时或长期暴露内网服务的场景,如远程办公、开发测试等。

发表评论

评论列表