SSH隧道端口转发,本地访问内网网站调试
SSH隧道端口转发:本地调试内网网站的实操方法
当你在本地开发,却需要调试部署在内网服务器上的网站时,直接访问往往不通。
SSH隧道端口转发可以帮你把远程内网端口映射到本地,让浏览器像访问本地服务一样打开内网网站。
本文面向零基础用户,用具体命令和验证步骤,带你完成本地转发和动态转发两种常用配置。
两种转发模式:本地转发与动态转发
SSH隧道端口转发主要分两类:本地端口转发和动态端口转发。
本地转发把远程某个固定端口映射到本地一个端口,适合已知内网网站地址和端口的情况;
动态转发则在本机开启一个SOCKS代理,浏览器配置代理后可以访问内网多个地址,适合需要调试多个服务或不确定具体IP端口的场景。
两种方式都依赖SSH连接,只要你能SSH登录到一台能访问内网网站的跳板机,就可以建立隧道。
准备工作:确认SSH可达与端口权限
开始前,请确认以下条件:
- 你有一台可以SSH登录的服务器(跳板机),且该服务器能访问目标内网网站。
- 本地电脑已安装SSH客户端。Linux和macOS自带终端;Windows 10及以上可使用PowerShell或WSL,也可用Xshell、PuTTY等工具。
- 知道跳板机的IP、SSH端口、用户名,以及目标内网网站的IP和端口。
- 本地用于转发的端口未被占用,例如本地
8080或1080。
验证跳板机是否可达:
ssh -p 22 user@跳板机IP
登录成功后,在跳板机上测试内网网站是否可访问:
curl -I http://内网网站IP:端口
如果返回HTTP状态码(如200、301、403),说明跳板机到内网网站网络正常。
本地转发:一条命令映射内网网站
本地转发的命令格式如下:
ssh -L 本地端口:内网网站IP:内网网站端口 -p SSH端口 user@跳板机IP -N
参数说明:
-L:本地转发。本地端口:你本地用来访问的端口,如8080。内网网站IP:内网网站端口:目标内网网站的地址和端口,如192.168.1.100:80。-N:不执行远程命令,只建立隧道。
实际示例:
ssh -L 8080:192.168.1.100:80 -p 22 root@203.0.113.10 -N
执行后终端会保持连接,没有回显。
此时在本地浏览器访问http://localhost:8080,即可打开内网网站。
如果想在后台运行,可以加上-f参数,让SSH进入后台:
ssh -f -N -L 8080:192.168.1.100:80 -p 22 root@203.0.113.10
验证本地端口是否监听:
netstat -an | grep 8080
看到LISTEN状态即表示转发成功。
动态转发:用SOCKS代理访问多个内网地址
当需要调试多个内网网站或服务时,动态转发更灵活。
命令格式:
ssh -D 本地SOCKS端口 -p SSH端口 user@跳板机IP -N
示例:
ssh -D 1080 -p 22 root@203.0.113.10 -N
执行后,本地1080端口就是一个SOCKS5代理。
在浏览器中配置代理:
- Chrome/Edge:可使用SwitchyOmega插件,新建情景模式,代理协议选SOCKS5,服务器
127.0.0.1,端口1080。 - Firefox:设置 → 网络设置 → 手动配置代理 → SOCKS主机
127.0.0.1,端口1080,选择SOCKS v5。
配置后,浏览器访问内网网站IP即可直接打开。
注意,动态转发不会自动解析内网域名,如果内网网站使用域名访问,需要在浏览器或系统hosts中配置域名解析,或者直接使用IP访问。
常见报错与避坑指南
端口已被占用:如果本地端口被占用,SSH会提示bind: Address already in use。
换一个本地端口,或找出占用进程并结束。
权限被拒绝:提示Permission denied,检查SSH用户名、密码或密钥是否正确,以及跳板机是否允许端口转发。
部分服务器在/etc/ssh/sshd_config中设置了AllowTcpForwarding no,需要改为yes并重启SSH服务。
连接超时:如果隧道建立后无法访问内网网站,先在跳板机上用curl测试目标地址,确认跳板机本身能访问。
另外检查本地防火墙是否拦截了转发端口。
隧道自动断开:长时间无操作可能导致SSH断开。
可以添加ServerAliveInterval参数保持连接:
ssh -o ServerAliveInterval=60 -L 8080:192.168.1.100:80 -p 22 root@203.0.113.10 -N
不要在生产环境随意开放转发:端口转发会扩大访问面,建议只在调试期间开启,用完及时关闭隧道。
验证与收尾
隧道建立后,建议按以下顺序验证:
- 本地
netstat或ss命令查看端口监听状态。 - 浏览器访问
http://localhost:本地端口,确认能打开内网网站页面。 - 如果使用动态转发,检查浏览器代理是否生效,访问内网IP是否正常。
调试完成后,在终端按Ctrl+C结束前台SSH进程,或使用kill命令结束后台进程。
常见疑问
本地转发和动态转发该选哪个?
如果只调试一个已知IP和端口的内网网站,本地转发更简单直接;如果需要访问多个内网地址或域名,动态转发更合适。
SSH隧道端口转发需要root权限吗?
不需要。普通用户也可以建立隧道,只要该用户能SSH登录跳板机,且跳板机允许端口转发。
为什么浏览器访问localhost:8080显示连接被拒绝?
先检查SSH隧道进程是否还在运行,再检查本地端口是否被其他程序占用,最后确认跳板机到内网网站的网络是否通畅。
可以同时转发多个端口吗?
可以。在一条SSH命令中重复使用-L参数即可,例如:ssh -L 8080:192.168.1.100:80 -L 8443:192.168.1.100:443 -p 22 root@203.0.113.10 -N。
掌握SSH隧道端口转发后,本地调试内网网站会变得非常方便。
建议先按本文步骤完整执行一遍,再根据自己的网络环境调整参数;
遇到异常时优先回看避坑和高频问题部分。