网站首页 > 文章精选 正文
摘要: 隧道 ssh -L 命令总结 和 windows端口转发配置
关键词: 隧道、ssh -L 、端口转发、网络映射
整体说明
最近在项目中,因为内网的安全密级比较高,只能有一台机器连接内网数据库,推送数据,但是我又需要使用本地数据库连接工具查看对方对方数据库更新情况,所以用到了端口转发,大致步骤如下:
一、隧道 ssh -L 命令总结
1.1、 核心功能
- 加密隧道:所有流量通过 SSH 加密传输,避免明文暴露
- 本地端口代理:将本地端口的访问请求转发到远程网络的指定地址和端口
- 绕过防火墙/NAT:通过 SSH 跳板机访问原本无法直接连接的内部服务(如数据库、Web API)
1.2、命令语法
ssh -L [本地地址:]本地端口:目标地址:目标端口 用户名@SSH服务器
- 参数说明: 本地地址(可选):默认 127.0.0.1(仅本机访问),设为 0.0.0.0 可允许其他设备访问。 本地端口:本地监听的端口(如 3306)。 目标地址:目标端口:流量最终到达的目标地址(从 SSH 服务器的视角解析)。 用户名@SSH服务器:SSH 跳板机的登录信息。
1.3、典型使用场景
1.3.1、场景1:访问内网数据库
ssh -L 5326:db.internal:15236 user@jump.host
效果:本地访问 localhost:5236 → 流量通过 jump.host 转发到内网 db.internal:15236。
用途:安全连接远程 MySQL、PostgreSQL 等数据库
图形展示:
执行效果结果:
说明:执行的时候需要输入 jump.host 对应user的服务器密码
1.3.2、场景 2:绕过防火墙限制
ssh -L 8080:blocked-website.com:80 user@vps.public
效果:本地访问 localhost:8080 → 流量通过 vps.public 访问被防火墙屏蔽的网站。
1.3.3、场景 3:调试远程服务
ssh -L 5000:localhost:8000 user@remote-server
效果:本地访问 localhost:5000 → 流量转发到 remote-server 本地的 8000 端口。
用途:调试远程服务器上运行的 Web 服务(如 Flask/Django)
1.4、高级用法
1.4.1、多级转发
# 本地 -> 跳板机1 -> 跳板机2 -> 目标服务
ssh -L 3306:jump2.internal:3306 user@jump1.host
逻辑:先在本地建立到 jump1.host 的隧道,再通过 jump1.host 连接到 jump2.internal:3306。
1.4.2、绑定到所有网络接口
ssh -L 0.0.0.0:8080:remote:80 user@jump.host
效果:允许其他设备通过本机的 IP 访问 8080 端口(需谨慎开放权限)
1.5、注意事项
- 安全性: SSH 隧道本身加密,但转发端口的服务需自行确保安全(如数据库密码)。 避免将敏感端口(如 Redis 6379)暴露到公网。
- 权限问题: 本地端口 <1024 需 root 权限(如 -L 80:remote:80)。
- 防火墙配置: 确保本地和远程服务器的防火墙允许 SSH 端口(默认 22)通信。
二、Windows端口转发配置
2.1、添加端口转发
转发配置命令:
netsh interface portproxy add v4tov4 listenport=1433 listenaddress=xxx.xxx.xxx.163 connectport=1433 connectaddress=xxx.xxx.xxx.182
主要参数:
- v4tov4:表示IPv4到IPv4的转发
- listenport=1433: 代理在本地机器上监听的端口号
- listenaddress=xxx.xxx.xxx.163: 代理在本地机器上监听的IP地址。xxx.xxx.xxx.163 表示本机ip ,这里做了脱敏
- connectport=1433: 代理将流量转发到的目标端口
- connectaddress=xxx.xxx.xxx.182 :代理将流量转发到的目标IP地址,这里做了脱敏
设置成功后,当本地机器收到任何发往8080端口的流量时,都会将这些流量转发到IP地址为192.168.24.90的机器上的80端口。
2.2、删除端口转发
如果想要删除端口转发,可以使用以下指令,参数和添加时候一样:
netsh interface portproxy delete v4tov4 listenport=1433 listenaddress=xxx.xxx.xxx.163
2.3、查看端口转发
添加端口转发后,可以使用以下命令查看已经设置的端口转发规则:
netsh interface portproxy show all
执行上述命令后,将看到类似以下的输出,显示当前配置的所有端口转发规则:
三、两种方式优劣势分析
3.1、主要区别
特性 | netsh interface portproxy | SSH -L |
操作系统 | 仅限 Windows | 跨平台(Linux/macOS/Windows 等) |
加密与安全性 | 无加密,明文传输 | 通过 SSH 隧道加密,安全性高 |
持久性 | 系统级配置,重启后仍生效 | 会话级,SSH 连接断开后失效 |
权限需求 | 需管理员权限 | 普通用户权限(只需 SSH 连接权限) |
配置复杂度 | 需手动配置防火墙规则 | 自动通过 SSH 隧道,通常无需额外防火墙设置 |
典型场景 | 本地网络内简单的 TCP 端口重定向 | 跨网络的安全访问、绕过防火墙或 NAT |
灵活性 | 仅支持静态 TCP 端口转发 | 支持本地转发(-L)、远程转发(-R)、动态转发(-D) |
3.2、适用场景示例
- netsh interface portproxy 将本机 80 端口转发到同一内网的另一台服务器的 8080 端口。 在 Windows 服务器上长期暴露某个内部服务端口。
- SSH -L 通过跳板机安全访问内网数据库(如 ssh -L 3306:db.internal:3306 user@jump.host)。 临时调试远程服务,避免修改系统配置。
猜你喜欢
- 2025-05-21 Zabbix7 keepalived VIP高可用部署 对接 OceanBase高可用集群
- 2025-05-21 GORM 完全指南:从入门到精通,轻松玩转 MySQL 数据库
- 2025-05-21 PostgreSQL 技术内幕(五)Greenplum-Interconnect模块
- 2025-05-21 Windows深度解析: WSL 1 与 WSL 2 的核心差异及选择指南
- 2025-05-21 PostgreSQL技术大讲堂 - 第44讲:pg流复制部署
- 2025-05-21 小白入门必知必会-PostgreSQL-15.2源码编译安装
- 2025-05-21 什么是网络端口?或许工作10年的人也很难100%理解
- 2025-05-21 运维日记|postgresql-利剑出鞘-psql出手,天下我有
- 2025-05-21 Linux 防火墙怎么开?3 分钟学会放行 80 端口,再也不怕远程连接被拒
- 2025-05-21 PostgreSQL轻量级连接池 PgBouncer
- 05-22离线在docker镜像方式部署ragflow0.17.2
- 05-22【Docker 新手入门指南】第七章:镜像使用
- 05-22使用Docker制作OpenJDK镜像
- 05-22使用Dockerfile build镜像
- 05-22一文详解Docker轻量级虚拟化,镜像和容器
- 05-22三 docker 镜像命令
- 05-22Docker-使用Dockerfile 定制镜像
- 05-22Linux日常小技巧Docker打包
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)