如何使用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/id
rsa (私钥)
~/.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反向隧道,实现内网服务的公网访问。这种方案特别适合需要临时或长期暴露内网服务的场景,如远程办公、开发测试等。
发表评论