出差也能像在公司内网开发:懒猫微服端口转发 + PortProxyGUI 实录

玄兴梦影

发布于2天前
代码是生活,诗歌是精神。做一个诗意的工程师。

如果你出差、在家办公,不在公司内网,却还要做微服务开发联调,这篇可能有用。我会按真实场景写:如何访问内网网关、Nacos、Swagger、业务系统,以及如何让内网网关回调你本地正在开发的服务。文中示例地址已做脱敏处理,你按自己环境替换即可。


https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.forward

一、要解决的问题

我平时做微服务开发,人在公司内网时很简单:前端调 网关,后端服务注册到 Nacos,网关再按注册信息调用各个后端服务。需要看接口时打开 Swagger,需要看业务效果时打开内网页面。

但出差或在家时,电脑不在公司内网里,会遇到两个方向的问题:

  • 我访问不到公司内网资源:比如网关、Nacos、数据库、Redis、RabbitMQ。
  • 公司内网也访问不到我本地服务:我本地服务虽然启动了,但如果注册到 Nacos 的是家里 WiFi / 本地宽带 IP,内网网关根本调不到。

拓扑-无法直连.png

这篇用 懒猫微服私有云 + 局域网端口转发工具 + PortProxyGUI,把这两个方向都打通。最后效果是:人不在公司内网,也可以像在公司一样做微服务联调。

文中为了好理解,把公司内网里的中转机器叫 同事电脑。实际使用时,不一定非要占用同事的主力电脑,也可以在公司放一台性能一般的 Windows 小主机、旧笔记本、迷你主机,当作 内网代理机。只要它常开、能访问内网服务、能登录懒猫微服客户端,就能承担同样的中转作用。

懒猫微服-私有云设备.png


二、本文使用的打码示例

下面所有地址都已经打码,只保留结构和端口,方便替换成自己的环境。

角色打码示例说明
内网网关10.*.*.10:8701公司内网网关地址
懒猫转发后的网关example.heiyu.space:18701出差电脑访问这个地址
Nacos10.*.*.11:8848公司内网 Nacos 地址
懒猫转发后的 Nacosexample.heiyu.space:8048出差电脑访问这个地址
同事电脑 / 内网代理机10.*.*.20公司内网里常开的 Windows 电脑,可以是低配小主机
我本地服务端口18503我电脑上正在开发的后端服务端口
其他内网服务10.*.*.12:7038数据库、Redis、RabbitMQ、其他 HTTP 服务同理

核心原则:

  • 我主动访问内网资源:用懒猫微服把内网服务转发成 example.heiyu.space:端口
  • 内网服务器主动访问我:让服务器先访问同事电脑或内网代理机 10.*.*.20:端口,这台中转机再通过 PortProxyGUI 和懒猫通道转给我。

三、先看整体拓扑

3.1 我访问公司内网资源

我在外网,不能直接访问内网网关、Nacos 等服务。做法是:

我的电脑 → 懒猫微服私有云 → 同事电脑/内网代理机/在线客户端 → 公司内网服务

拓扑-情况一去程.png

3.2 公司内网访问我本地服务

我本地服务启动后,内网网关要调用它。但内网服务器访问不到我的家庭宽带 IP,所以需要走回程:

内网服务器 → 同事电脑/内网代理机(PortProxyGUI/netsh)→ 懒猫微服 → 我的电脑本地服务

拓扑-情况二回程.png

3.3 打通后就是开发闭环

去程解决“我访问内网”,回程解决“内网访问我”。两个方向都通之后,前端、本地后端、网关、Nacos、内网服务就能形成闭环。

拓扑-双向环路.png


四、前置条件

4.1 同事电脑 / 内网代理机

这台电脑必须在公司内网里,且能访问网关、Nacos 等内网服务。

  • Windows 电脑常开,能访问 10.*.*.10:870110.*.*.11:8848
  • 安装并登录懒猫微服客户端
  • 在局域网端口转发工具里能看到需要转发的在线客户端设备
  • 有管理员权限,方便配置 PortProxyGUI / netsh / 防火墙

不要求和我的电脑登录同一个账号。局域网端口转发工具可以选择当时在线的账号设备,只要目标设备在列表里在线可选即可。

更推荐准备一台低配 Windows 代理机放在公司内网里,专门负责中转:

  • 性能要求不高,能稳定运行懒猫微服客户端、PortProxyGUI 即可;
  • 最好插电、有线网络、不要休眠;
  • 能访问网关、Nacos、数据库、Redis、RabbitMQ 等你要转发的内网服务;
  • 不跑业务,只做中转,后期排错也更清楚。

4.2 我的出差电脑

  • 安装并登录懒猫微服客户端
  • 本地前端、后端开发环境能启动
  • 本地服务端口固定,比如本文示例 18503

4.3 24 小时在线设置

如果这套链路要长时间使用,同事电脑或内网代理机不能休眠。Windows 11 可以这样设置:

  1. 打开 设置系统电源和电池
  2. 展开 屏幕、睡眠和休眠超时
  3. 已接通电源 下,将 使我的设备在以下时间后进入睡眠状态 设为 从不

步骤-Windows11电源不休眠.png

其他 Windows 版本路径可能不同,搜索 睡眠接通电源 找到对应设置即可。


五、情况一:把内网网关转发出来

我的第一个需求是访问公司内网网关。真实地址已经打码,结构如下:

内网网关:10.*.*.10:8701
转发后:example.heiyu.space:18701

这样我在外网浏览器、前端项目、接口工具里访问 example.heiyu.space:18701,实际访问的就是公司内网网关 10.*.*.10:8701

5.1 出口配置:使用微服域名

局域网端口转发工具 中编辑转发规则:

  • 协议:TCP
  • 局域网入口类型:选择 微服域名
  • 出口地址:example.heiyu.space
  • 监听端口:18701

步骤-网关转发-出口配置-打码.png

这里的 18701 是我为了对应网关端口 8701 额外选的外部端口。你可以换成其他未占用端口,但建议有规律,后面维护会轻松很多。

5.2 目标配置:指向内网网关

目标配置选择 微服客户端,然后填内网网关地址:

  • 转发目标类型:微服客户端
  • 客户端设备:选择在线的内网客户端设备
  • 目标 IP:10.*.*.10
  • 目标端口:8701

步骤-网关转发-目标配置-打码.png

点击 测试目标连接,提示目标地址连接正常,就说明这条链路已经通了。

步骤-网关转发-测试成功-打码.png


六、情况二:把 Nacos 转发出来

微服务开发离不开 Nacos。我的 Nacos 在内网里,打码后结构如下:

内网 Nacos:10.*.*.11:8848
转发后:example.heiyu.space:8048

流程和网关完全一样,只是端口不同。

6.1 Nacos 出口配置

  • 协议:TCP
  • 局域网入口类型:微服域名
  • 出口地址:example.heiyu.space
  • 监听端口:8048

步骤-Nacos转发-出口配置-打码.png

6.2 Nacos 目标配置

  • 转发目标类型:微服客户端
  • 目标 IP:10.*.*.11
  • 目标端口:8848

步骤-Nacos转发-测试成功-打码.png

测试通过后,浏览器打开:

http://example.heiyu.space:8048/nacos/

能看到 Nacos 登录页,就说明 Nacos 也可以在外网访问了。

步骤-Nacos登录成功-打码.png


七、其他内网服务也一样

网关和 Nacos 通了之后,其他服务的转发方式完全一样:

服务类型内网地址示例转发后示例说明
网关10.*.*.10:8701example.heiyu.space:18701前端、本地服务主要调用它
Nacos10.*.*.11:8848example.heiyu.space:8048注册中心 / 配置中心
数据库10.*.*.12:3306example.heiyu.space:13306客户端连接即可
Redis10.*.*.13:6379example.heiyu.space:16379注意密码和环境隔离
RabbitMQ10.*.*.14:5672example.heiyu.space:15672管理端口和 AMQP 端口分开配

技巧是:一个内网服务对应一条转发规则。只要同事电脑或内网代理机能访问这个服务,懒猫微服就可以把它转发出来。


八、前端怎么用转发后的网关

前端本地开发时,把原本指向公司内网网关的地址,改成懒猫转发后的域名即可。

原来(公司内网):http://10.*.*.10:8701
现在(出差外网):http://example.heiyu.space:18701

步骤-前端配置-微服网关-打码.png

这样前端仍然调网关,由网关再去调内网里的其他微服务。对前端同事来说,开发体验和人在公司内网基本一样。

实际验证时,我打开了 Swagger 页面,也能正常看到网关下的接口信息。

步骤-Swagger访问成功-打码.png

业务页面也可以正常打开。

步骤-业务系统访问成功-打码.png

再看浏览器 DevTools,接口请求返回 200 OK,说明页面不是“只打开了壳”,而是真的能调到接口。

步骤-接口请求200-打码.png


九、回程:让内网网关调用我本地服务

只解决“我访问内网”还不够。微服务开发还有一个关键点:我本地服务要注册进 Nacos,并被内网网关调用。

问题在于:

  • 我本地服务跑在出差电脑上,例如端口 18503
  • 如果注册到 Nacos 的地址是家里 WiFi / 本地宽带 IP,内网网关访问不到
  • 所以注册地址不能写我自己的本地 IP,而要写 公司内网里可访问的同事电脑 / 内网代理机 IP

本文打码示例:

同事电脑 / 内网代理机 IP:10.*.*.20
我的本地服务端口:18503
注册到 Nacos 的地址:10.*.*.20:18503

也就是说,内网网关以为它在调用公司内网里的中转机:

网关 → 10.*.*.20:18503

但这台同事电脑或内网代理机收到请求后,会通过 PortProxyGUI / netsh 和懒猫通道,把请求转发到我的出差电脑本地服务。

9.1 本地服务端口固定

本地后端服务先固定端口,例如 18503

步骤-服务端口配置-打码.png

如果你的服务端口经常变,回程转发就会很麻烦。建议本地联调期间固定端口。

9.2 注册 IP 写同事电脑 / 内网代理机 IP

本地服务注册到 Nacos 时,注册 IP 写同事电脑或内网代理机在公司内网里的 IP,例如:

server:
  port: 18503

spring:
  cloud:
    nacos:
      discovery:
        ip: 10.*.*.20

这一步的意思是:让内网网关调用 10.*.*.20:18503,不要让它调用我的家庭宽带 IP。

9.3 中转机用 PortProxyGUI 做系统级转发

在同事电脑或内网代理机上,用 PortProxyGUI 添加规则:

监听地址:0.0.0.0
监听端口:18503
转发地址:127.0.0.1
转发端口:18503

步骤-PortProxyGUI-回程转发-打码.png

等价命令是:

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=18503 connectaddress=127.0.0.1 connectport=18503

PortProxyGUI 只是把 netsh interface portproxy 做成了图形界面,适合不想记命令的同事使用。注意:PortProxyGUI 不会自动配置 Windows 防火墙,如果公司内网访问不到 10.*.*.20:18503,要检查这台中转机的 Windows 防火墙是否放行 18503

更完整的 Windows 端口代理工具说明,可看我之前写的:Windows 网络转发工具推荐:从命令行到图形界面

9.4 回程链路实际长这样

完整回程是:

内网网关
  → 同事电脑/内网代理机 10.*.*.20:18503
  → PortProxyGUI / netsh 转到 127.0.0.1:18503
  → 懒猫微服客户端通道
  → 我的出差电脑 127.0.0.1:18503

这样内网网关就能调到我本地正在开发的服务。


十、常见问题

现象优先排查
转发工具测试目标失败同事电脑或内网代理机是否能访问目标内网 IP/端口;目标服务是否启动
外网打不开 example.heiyu.space:18701规则是否启用;端口是否填错;客户端是否在线
Nacos 能打开但服务注册异常本地服务注册 IP 是否写成同事电脑 / 内网代理机 IP;端口是否固定
网关调不到我本地服务PortProxyGUI 规则是否启用;中转机防火墙是否放行端口;懒猫客户端是否在线
页面打开但接口失败前端配置里是否仍有内网 IP;DevTools 看接口是否走转发域名
用一会儿断开同事电脑或内网代理机是否睡眠;Windows 电源设置是否为“从不睡眠”

十一、小结

这套方案的核心不是“单纯远程访问一个网页”,而是解决微服务开发里的两条链路:

  1. 我访问内网资源:网关、Nacos、数据库、Redis、RabbitMQ 都可以通过懒猫微服转发成 example.heiyu.space:端口
  2. 内网访问我本地服务:把本地服务注册成同事电脑 / 内网代理机 IP,再由这台中转机用 PortProxyGUI / netsh + 懒猫通道转回我的电脑。

最后效果就是:人不在公司内网,也能完成前端、后端、网关、Nacos、业务页面的闭环联调。


文末信息

测试环境:Windows 11 · 懒猫微服客户端 · 局域网端口转发工具 · PortProxyGUI。

关联应用:[局域网端口转发工具 cloud.lazycat.app.forward](https://appstore.lazycat.cloud/#/shop/detail/cloud.lazycat.app.forward)
应用商店:[https://appstore.lazycat.cloud/](https://appstore.lazycat.cloud/) Windows 端口代理工具:[PortProxyGUI](https://github.com/zmjack/PortProxyGUI) 延伸阅读:[Windows 网络转发工具推荐:从命令行到图形界面](https://xie.infoq.cn/article/3330ef787c942f0510e049e00)

本文为个人使用经验;菜单名、域名格式以你当前客户端为准。所有截图均已打码,示例 IP/域名仅表示结构,不代表真实环境。

评论

2
medium1天前

哇 大佬写的真不错👍

玄兴梦影回复medium1天前

谬赞了,我继续保持

说点什么呢~
收藏
1
2
0