服务器管理

FinalShell 端口转发怎么玩?我用它把内网服务“送”出去!

2026-10-03 · FinalShell

FinalShell 端口转发怎么玩?我用它把内网服务“送”出去! 配图

你是不是也遇到过这样的情况:在公司或家里搭了个小服务,比如内网的 Jira、GitLab 或者一个本地调试的 Web 应用,想让外面的同事或朋友临时访问一下,但又不想去折腾复杂的 VPN 或公网 IP?别担心,FinalShell 强大的端口转发功能,就能帮你轻松搞定!

我记得去年底,我用 FinalShell 4.7.1 版本,就帮朋友把一台内网测试服务器上的 Jenkins 临时暴露了出来,前后不到十分钟。今天我就来手把手教你,怎么利用 FinalShell 把你的“内网宝贝”安全地推向外网,我们主要讲讲最常用也最实用的“本地端口转发”。

一个连接了多台服务器的FinalShell界面示意图

准备工作:选好你的“跳板机”

端口转发就像是你在内网服务和外网访问者之间搭建了一座桥梁。这座桥梁通常会通过一台能同时访问内网和外网的服务器来完成,我们称之为“跳板机”或“中转服务器”。确保你的 FinalShell 已经能稳定连接到这台跳板机,并且这台跳板机有开放对外访问的端口。

如果你还没安装 FinalShell 或者对基础连接不熟悉,可以先看看这篇教程:/blog/finalshell-windows-install-guide/。

第一步:创建或编辑一个SSH会话

首先,打开你的 FinalShell 客户端。在左侧的会话树中,找到你要用作跳板的那个服务器连接。如果还没有,就新建一个。右键点击该会话名称,选择“修改会话”,或者如果是新会话,直接点击“新建会话”。

你会看到一个会话配置弹窗。在这里,除了常规的 SSH 连接信息(IP地址、用户名、密码等),你需要找到“转发”或“隧道”相关的选项卡。FinalShell 的界面设计很直观,通常在顶部或者侧边栏会有一个明显的标签。

第二步:配置本地端口转发规则

进入“转发”或“隧道”选项卡后,我们选择“本地转发”。本地转发的意思是,将你本地机器(运行 FinalShell 的电脑)的某个端口,通过跳板机转发到目标服务器的某个端口。

  1. 添加规则:点击“添加”按钮,新建一条转发规则。
  2. 源地址/端口:这里填写 127.0.0.1 和一个你本地未被占用的端口,比如 8080。这意味着,当你在本地访问 http://127.0.0.1:8080 时,请求会通过 SSH 隧道进行转发。
  3. 目标地址/端口:这里填写你内网服务的实际 IP 地址和端口。例如,如果你的内网 Jenkins 服务在 192.168.1.100 的 8080 端口,你就填 192.168.1.100 和 8080。记住,这里的 IP 地址和端口,都是针对跳板机能够访问到的内网服务地址。
  4. 保存设置:确认无误后,点击“保存”按钮,然后关闭会话配置窗口。

一个小提示:在配置过程中,FinalShell 的连接弹窗右下角会实时显示一些连接状态提示,注意观察是否有错误信息。

第三步:连接跳板机并测试转发

配置完成后,你需要在左侧的会话树中双击你刚刚配置的跳板机,建立 SSH 连接。只有 SSH 连接成功建立,端口转发的隧道才能生效。

连接成功后,打开你的浏览器,或者使用 curl 命令,尝试访问你本地配置的源地址和端口,比如 http://127.0.0.1:8080。如果一切顺利,你应该能看到你的内网服务页面或接收到其响应数据了!

为了验证转发是否真的生效,你可以在 FinalShell 的会话窗口中,通过 netstat -tnlp 命令(在Linux跳板机上)查看端口监听情况,也可以在本地命令行输入 netstat -an | findstr "8080" (Windows) 或 lsof -i :8080 (macOS/Linux) 确认本地端口是否被 FinalShell 监听。

远程端口转发和动态端口转发

除了本地端口转发,FinalShell 还支持远程端口转发和动态端口转发。远程端口转发 (Remote Port Forwarding) 适合让外部主机通过跳板机访问你本地的服务。而动态端口转发 (Dynamic Port Forwarding),也就是常说的 SOCKS 代理,能让你的整个应用流量通过 SSH 隧道转发,非常适合复杂的代理需求。如果想了解更多进阶用法,可以参考 /blog/finalshell-port-forwarding-guide/ 这篇文章。

常见问题

Q1:配置完端口转发后,为什么访问本地端口不生效?

A1: 遇到这种情况,首先要检查以下几点:

  1. SSH 连接是否成功:确保你的 FinalShell 已经成功连接到跳板机。如果连接断开,转发自然不生效。
  2. 本地端口是否被占用:检查你配置的本地源端口(比如 8080)是否已经被其他程序占用。你可以尝试更换一个未被占用的端口。
  3. 内网服务是否正常运行:确认你的目标内网服务(如 192.168.1.100:8080)本身是正常运行且可访问的。
  4. 防火墙设置:检查本地机器和跳板机的防火墙设置,是否阻止了相关端口的通信。有时候,操作系统自带的防火墙会默默地拦截掉这些连接。

Q2:提示“端口已被占用”怎么办?

A2: 这通常发生在你在配置本地转发的源端口时。操作系统中有些端口是保留的,或者有其他程序正在使用。解决办法很简单,尝试更换一个端口号,一般选择 1024 以上且比较大的端口,比如 8080、9000、2222 等,避开常见的系统服务端口。

Q3:FinalShell 突然连接不上跳板机了,端口转发也就失效了。

A3: 如果 FinalShell 本身无法连接跳板机,那所有的转发都会失效。这可能是因为跳板机的网络问题、SSH 服务故障、防火墙配置变更,或者是你 SSH 认证信息过期/被修改。检查跳板机运行状态,确认 /blog/finalshell-ssh-key-configuration/ 中提到的 SSH 密钥或密码是否正确,并尝试用其他 SSH 工具(如 PuTTY 或终端命令)连接测试一下,以便排查问题根源。

希望这篇文章能帮助你更好地利用 FinalShell 的端口转发功能,解决日常工作中遇到的内网服务访问难题!

延伸阅读

若需进一步查阅,可先看本站以下教程: