🔄 Linux端口转发
使用 SSH 进行本地端口转发的简单方法
🔄 Linux端口转发
SSH 端口转发简介
SSH 提供了三种强大的端口转发(端口映射)功能,可以帮助我们建立安全的网络通道:
- 本地转发(Local Forwarding)
- 远程转发(Remote Forwarding)
- 动态转发(Dynamic Forwarding)
本地端口转发
本地转发最常用,它允许将本地端口的连接转发到远程服务器。当你访问本地的 127.0.0.1:本地端口
时,流量会通过 SSH 通道转发到 目标主机:目标端口
。
基本语法
1
ssh -L [本地IP:]本地端口:目标主机:目标端口 跳板机用户名@跳板机IP
常用参数说明
-L
:指定本地端口转发-C
:启用压缩-f
:后台运行-N
:不执行远程命令-g
:允许远程主机连接本地转发的端口
实际示例
- 最简单的本地转发:
1
ssh -L 8080:localhost:80 [email protected]
- 使用后台模式(常用):
1
ssh -CfNg -L 8080:target.server:80 [email protected]
- 指定本地IP(允许其他机器访问):
1
ssh -CfNg -L 0.0.0.0:8080:target.server:80 [email protected]
远程端口转发
远程转发允许将远程服务器的端口转发到本地机器,常用于内网穿透场景。
基本语法
1
ssh -R [远程IP:]远程端口:目标主机:目标端口 跳板机用户名@跳板机IP
实际示例
1
ssh -R 8080:localhost:80 [email protected]
动态端口转发
动态转发创建一个 SOCKS 代理,所有应用程序都可以使用这个代理访问远程网络。
基本语法
1
ssh -D [本地IP:]本地端口 跳板机用户名@跳板机IP
实际示例
1
ssh -CfNg -D 1080 [email protected]
常见使用场景
- 访问内网服务
1 2
# 通过跳板机访问内网服务器 ssh -L 8080:internal.server:80 [email protected]
- 数据库远程访问
1 2
# 本地访问远程数据库 ssh -L 3306:localhost:3306 [email protected]
- 内网穿透
1 2
# 将内网服务暴露到公网 ssh -R 8080:localhost:80 [email protected]
- 科学上网
1 2
# 创建 SOCKS5 代理 ssh -D 1080 [email protected]
故障排查
- 连接被拒绝
- 检查防火墙设置
- 确认目标端口是否开放
- 验证 SSH 服务器配置是否允许端口转发
- 连接断开
- 添加心跳包保持连接:
1
ssh -o ServerAliveInterval=60 -L 8080:target:80 user@server
- 添加心跳包保持连接:
- 权限问题
- 确认是否有目标端口的访问权限
- 检查 SELinux 设置
安全建议
- 避免使用
0.0.0.0
绑定所有接口,除非必要 - 设置强密码或使用密钥认证
- 限制端口转发的 IP 范围
- 定期更新 SSH 服务器和客户端
- 使用防火墙限制端口访问
持久化配置
在 ~/.ssh/config
中添加配置可以简化命令:
1
2
3
4
5
6
Host tunnel
HostName remote.server
User username
LocalForward 8080 target:80
ServerAliveInterval 60
ServerAliveCountMax 3
之后只需要执行:
1
ssh tunnel
参考资料
本文由作者按照
CC BY 4.0
进行授权