内网服务器如何进行远程调试?内网服务器实现轻松断点调试的实用技巧
前言
Remote JVM Debug 是 Java 开发中常用的远程调试工具,能让开发者在本地 IDE 中直接调试部署在服务器上的 Java 程序,精准定位代码中的问题,特别适合后端开发人员、测试工程师等需要排查远程服务故障的群体,其优点在于能实时跟踪程序运行状态,像在本地调试一样高效。不过使用时要注意,远程调试会占用一定服务器资源,且需确保调试端口安全,避免暴露敏感信息。
这类工具通常只能在局域网内发挥作用,这给实际开发带来不少麻烦。比如公司的测试服务器部署在内部网络,开发人员在家办公时,就无法远程连接进行调试,只能等到回到公司才能处理问题,严重影响工作效率。
而当 Remote JVM Debug 与 cpolar 结合后,优势就十分明显了。cpolar 作为内网穿透工具,能将内网服务器的调试端口映射到公网,让开发者无论身处何地,只要有网络,就能通过本地 IDE 远程连接内网网服务器进行调试,打破了局域网的限制,极大提升了远程协作和问题排查的便利性。
1. Remote JVM Debug
Remote JVM Debug(远程JVM调试)是一种允许开发人员通过调试工具(如 IntelliJ IDEA)连接到运行在远程服务器上的Java应用程序并进行调试的技术。这个过程通常涉及通过网络连接到远程JVM实例,并允许开发者在不直接访问物理机器的情况下查看、修改代码状态,诊断和修复问题。
2. 系统要求与环境准备
2.1 服务器环境
内网服务器操作系统:Windows 或 Linux。 JDK 版本:确保服务器上安装了正确版本的 JDK,支持远程调试。 cpolar 安装:需要在内网服务器上安装 cpolar 客户端,用于穿透远程登录、调试端口及HTTP请求。
2.2 本地开发环境
IDEA:本地开发机器需要安装 IntelliJ IDEA。 JDK:本地开发机器需要安装 JDK(版本与远程服务器相同)。
3. 内网服务器准备及开始
由于大部分项目基本部署在Linux服务器中,因为Linux的性能更优,占用更低。所以本文采用的模拟内网服务器为Linux的CentOS7系统。
3.1 安装cpolar配置支持远程ssh登录
此步骤需提前在内网服务器中操作,以支持在家远程登录公司测试环境中的内网服务器
3.1.1 什么是cpolar? cpolar 是一款内网穿透工具,可以将你在局域网内运行的服务(如本地 Web 服务器、SSH、远程桌面等)通过一条安全加密的中间隧道映射至公网,让外部设备无需配置路由器即可访问。 广泛支持 Windows、macOS、Linux、树莓派、群晖 NAS 等平台,并提供一键安装脚本方便部署。 3.1.2 安装cpolar
首先,我们需要先安装curl:
sudo yum install curl
Bash
接下来下载cpolar,一条命令完成安装
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
Bash

测试cpolar版本以确保安装
cploar version
Bash

3.1.3 注册及配置cpolar系统服务
官网地址:https://www.cpolar.com
进入cpolar官网,点击免费注册按钮进行注册一个账号

向系统添加及启动cpolar服务
#添加cpolar服务 sudo systemctl enable cpolar #启动cpolar服务 sudo systemctl start cpolar
Bash

查看服务状态
sudo systemctl status cpolar
Bash

3.1.4 登录cpolar web ui 管理界面配置ssh端口穿透 3.1.4.1 放行9200端口
在访问web页面前,需要先检查系统防火墙是否放行9200端口,避免访问不了
systemctl status firewalld
Bash

有两种方式可以实现访问,一种是放行该端口,另一种是直接关闭防火墙(不建议)
#放行 9200 端口 #--zone=public:使用默认区域(通常是 public) #--add-port=9200/tcp:添加 TCP 协议的 9200 端口 #--permanent:永久生效(不加此参数则是临时规则,重启失效) firewall-cmd --zone=public --add-port=9200/tcp --permanent #重载防火墙配置(及刷新配置使其生效) firewall-cmd --reload
Bash

验证端口是否已放行
firewall-cmd --zone=public --query-port=9200/tcp
Bash

输出内容为yes则成功放行
3.1.4.2 访问cpolar web ui管理界面
在访问之前,不确定ip地址可以通过ifconfig命令查看服务器ip
ifconfig
Bash

确定好ip地址后,在浏览器中访问:
http://<此处应为您的IP>:9200 #如:http://192.168.184.133:9200
Bash

将前面步骤注册好的cpolar账号登录即可进入后台页面

登录成功同时,服务器也会后台无感自动配置token,无需手动配置token
配置文件位置:/usr/local/etc/cpolar/cpolar.yml
cat /usr/local/etc/cpolar/cpolar.yml
Bash

3.1.4.3 保留固定TCP公网地址
使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化,方便后续ssh远程登录。
进入官网的预留页面:https://dashboard.cpolar.com/reserved

列表中显示了一条已保留的TCP地址记录:
地区:显示为China Top。 地址:显示为16.tcp.cpolar.top:14290。
注:地址每个账号的都不同,请以自己保留生成的为主
3.1.4.4 启用ssh隧道,配置固定tcp地址
点击左侧菜单栏的隧道管理,展开进入隧道列表页面,页面下默认会有 2 个隧道:
ssh隧道,指向22端口,tcp协议 website隧道,指向8080端口,http协议(http协议默认会生成2个公网地址,一个是http,另一个https,免去配置ssl证书的繁琐步骤)

接着点击ssh隧道的编辑按钮,进入编辑页面,修改成固定tcp地址,如图所示:

3.1.4.5 使用固定的tcp地址进行远程ssh登录
ssh远程工具可以使用MobaXterm、Xshell或者FinalShell都可以,这里采用FinalShell进行远程登录演示

接下来,双击创建的ssh连接,如出现提示,点击接受并保存即可,即可连接到内网服务器

3.2 安装JDK
本文采用jdk17作为演示
#下载jdk17软件包 wget https://download.oracle.com/java/17/archive/jdk-17_linux-x64_bin.rpm #安装jdk17 sudo rpm -ivh jdk-17_linux-x64_bin.rpm
Bash

安装完成后,查看版本,确认安装
java -version
Bash

3.3 上传打包好的Jar文件至服务器
该项目为简单模拟测试调试使用项目,共写3个简单接口:
正常接口:/api/normal/info:获取应用程序的基本信息,包括名称、版本、作者等 异常接口:/api/bug/null-pointer:故意抛出NullPointerException,用于调试异常处理 阻塞接口:/api/bug/infinite-loop:进入无限循环,模拟线程阻塞场景 3.3.1 打包springboot项目
idea中侧边栏选择Maven选项,然后如图操作进行构建打包jar文件:
3.3.2 上传至服务器
依次步骤打开找到jar文件springboot-debug-test-1.0.0.jar

将jar文件直接拖动至finalshell空白处即可上传
注意:一定要使用 root 用户登录,否则上传可能失败(或者确保当前用户对目标目录具有写权限)。
如果使用普通用户登录 FinalShell,可通过 chmod 或 chown 命令赋予目标目录写权限。

4. 启动 JAR 文件并配置远程调试
4.1 启动 JAR 文件
使用 java -jar 命令启动你需要调试的 JAR 文件,并开启远程调试。需要在启动命令中指定 JVM 调试参数:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 springboot-debug-test-1.0.0.jar
Bash
5005 为远程调试的端口号。
springboot-debug-test-1.0.0.jar 是要调试的 JAR 文件名称。

项目已经成功启动,端口5005被监听,后台该jar文件项目在端口8080(http)上运行。
4.2 cpolar隧道配置
4.2.1 http(8080端口)穿透
访问cpolar web ui管理界面(忘记可看前面3.1.4.2小节),进入到隧道列表,名称为website的隧道,点击编辑,可以看到如下信息:
隧道名称:website 协议:http 本地地址:8080
这些信息正是后台项目8080端口所需要的,所以不需要进行修改,默认创建好的隧道直接可以使用。

接着左侧菜单栏选择【状态】>【在线隧道列表】,可以看到website隧道有两个公网地址,http协议(http协议默认会生成2个公网地址,一个是http,另一个https,免去配置ssl证书的繁琐步骤)

直接选择一个至浏览器测试,这里选择http(注:每个用户的公网地址都不相同)
由于后台项目提到的接口地址后缀为/api/normal/info,所以正确拼接地址应为:
<您的公网地址>/api/normal/info #如:http://5c19bf20.r1.cpolar.top/api/normal/info
Bash

接口正常返回了api接口信息,穿透成功!
4.2.2 调试端口(5005端口)穿透 4.2.2.1 保留固定tcp地址
选择将5005端口穿透设置为固定的tcp地址是为了方便后续多次调试,tcp地址不会进行变化,也可以不进行此步骤操作。
进入官网的预留页面:https://dashboard.cpolar.com/reserved
地区当前选择的是:China Top 地址信息为:3.tcp.cpolar.top:12718
记住新创建的地址信息(注意:每个用户创建的地址信息都有所不同,请注意个人的地址信息)

4.2.2.2 创建新隧道
进入创建隧道列表,填写好对应信息,如下图:
协议:tcp 本地地址为:5005 端口类型:固定tcp端口 预留tcp地址:填写您预留固定的tcp地址

5.IDEA远程Debug调试内网项目
5.1 idea配置remote jvm debug
点击启动按钮左边的选项卡,然后在选项卡中点击Edit Configurations进入Run/Debug Configurations页面

依次点击左上角【+】号按钮,下滑选择【Remote JVM Debug】选项,点击进入。

填写主机以及端口信息,具体参考如下图:
Name:自定义名字(如:Remote Debug) Host:填写固定的tcp地址去除端口部分(如:3.tcp.cpolar.top) Port:填写固定的tcp地址端口部分(如:12718)

5.2 启动及调试
点击右上角的小虫子图标即可启动调试,启动调试后,控制台会出现类似Connected to the target VM, address: '3.tcp.cpolar.top:12718', transport: 'socket'的信息,即代表启动成功

来到BugController控制器,里面有一个异常接口api/bug/null-pointer,代码如下:
/**
* 空指针异常接口
*
* 该接口会故意抛出NullPointerException
* 用于测试空指针异常的调试场景
*
* @return 永远不会执行到这里,因为会抛出异常
*/
@GetMapping("/null-pointer")
public String nullPointerException() {
//1.此位置故意设置nullString字符串为null
String nullString = null;
String now = LocalDateTime.now().format(FORMATTER);
System.out.println("空指针异常接口被调用,准备抛出异常,时间:" + now);
//2.待接口返回时执行nullString的toString方法时就会抛出NullPointerException异常
return nullString.toString();
}
Java
切换到浏览器,然后请求8080端口的穿透地址+异常接口地址进行请求,如:
<您的8080端口穿透地址>/api/bug/null-pointer #如:http://5c19bf20.r1.cpolar.top/api/bug/null-pointer
Bash

接着在String nullString = null;代码段左边打上断点调试,如下图:

再次请求一次该链接http://5c19bf20.r1.cpolar.top/api/bug/null-pointer进行发送http请求,可以看到后端idea中已经进去断点调试了

进入下一步骤,查看到nullString变量值确实为null

多跳几个步骤,进入源码后可以确认已抛出空指针异常,提示 nullString 为 null,无法调用其方法。
在finalShell终端1界面中也可以看到,控制台输出的日志出现了NullPointerException异常

通过以上的配置,这样您就可以在家中或者外出无法及时回到公司时,也能很轻松的调试公司中内网服务器里部署的测试环境项目啦!
6.可能出现的问题
6.1 访问页面出现404的情况是怎么回事?
访问出现404:
可以发现,接口路径中少了全局上下文路径/api ,补上就可以访问啦!

7.总结
通过本教程,我们成功实现了使用 Cpolar 结合 Remote JVM Debug 技术,在本地 IDE 环境中调试部署在公司内网中的 Java 服务。整体流程包括:
安装并配置 Cpolar,打通从公网访问内网的通道; 启用 JVM 的远程调试模式,开放调试端口; 使用 IntelliJ IDEA 配置 Debug 远程连接; 最终实现对远程服务的断点调试与问题排查。
本方案适用于以下典型场景:
公司测试环境无法直接从公网访问; 无法通过 VPN 连通或 VPN 配置复杂; 出现远程服务异常但又难以复现时,进行现场调试。
在实际使用中应注意:
远程调试存在安全风险,建议仅限于测试环境,并设置好访问权限; cpolar 每次生成的公网地址可能会变化,建议使用固定子域名(需高级用户); 远程调试应避免在生产环境开启,以免暴露调试端口。
通过这种方式,极大提升了远程问题定位效率,也为远程办公/故障应急提供了可靠手段。
以通过将 Remote JVM Debug 与 cpolar 结合,轻松解决了内网服务器远程调试的难题,让开发人员能随时随地高效排查问题,为远程开发协作提供了有力支持。
最终实现对远程服务的断点调试与问题排查。
本方案适用于以下典型场景:
公司测试环境无法直接从公网访问; 无法通过 VPN 连通或 VPN 配置复杂; 出现远程服务异常但又难以复现时,进行现场调试。
在实际使用中应注意:
远程调试存在安全风险,建议仅限于测试环境,并设置好访问权限; cpolar 每次生成的公网地址可能会变化,建议使用固定子域名(需高级用户); 远程调试应避免在生产环境开启,以免暴露调试端口。
通过这种方式,极大提升了远程问题定位效率,也为远程办公/故障应急提供了可靠手段。
外网如何通过路由器访问内网服务器?
一、路由器端口映射实现外网访问内网服务器
端口映射是实现外网访问内网服务器的常用方法之一,主要在路由器上进行配置。其原理是将外网的特定端口请求转发到内网服务器的对应端口。假设你的路由器公网 IP 是 202.100.100.100,内网服务器 IP 为 192.168.1.10,服务器提供 Web 服务的端口是 80。在路由器中设置将外部端口 80 映射到内部 IP 192.168.1.10 的 80 端口后,外网用户通过访问http://202.100.100.100,就能访问到内网服务器上的 Web 服务。
操作步骤(以常见家用路由器为例):
1.进入路由器管理界面:打开浏览器,在地址栏输入路由器的管理 IP 地址(一般在路由器说明书中能找到,常见的如 192.168.1.1 或 192.168.0.1 ),然后回车。有些路由器可能还需要在地址后加上特定的端口号,具体可参考说明书。
2.登录路由器:输入管理员账号和密码(初始账号密码通常在说明书中,若已修改则使用修改后的)。部分路由器支持通过手机 APP 进行管理,登录方式可能有所不同,可按照 APP 提示操作。
3.找到端口映射选项:在路由器管理界面中,查找 “端口映射”“虚拟服务器” 或类似功能的选项。不同品牌和型号的路由器,该选项的位置可能有所不同。例如,TP - LINK 路由器的端口映射选项一般在 “转发规则” 菜单下;小米路由器则在 “高级设置” - “端口转发” 中。
4.添加映射规则:填写外部端口(如 80)、内部端口(与服务器服务端口一致,如 80)、内部 IP 地址(内网服务器 IP,如 192.168.1.10)等信息,然后保存设置。有些路由器还支持协议选择(如 TCP、UDP),需要根据服务器提供的服务类型进行选择。
路由端口映射的优点是设置相对简单,直接将内网服务暴露在外网,访问速度完全走本地带宽网络。但缺点也很明显,需要有路由器管理权限且其WAN必须要是公网IP的。
二、通过nat123网络工具实现外网访问内网服务器
内网穿透工具和网络端口映射软件,均可以解决无公网IP提供外网访问的问题。如nat123不仅有内网穿透和动态域名解析,还有具备简洁界面操作,为普通大众用户外网访问内网服务器提供了更便捷的解决方案。
具体操作步骤如下:
1.下载安装:将nat123客户端下载在目标内网并安装。软件版本包括windows、Linux、android等,根据自己本地环境选择使用。
2.注册并登录nat123账号:如果没有nat123账号,需要在官网进行注册。注册完成后,在打开客户端界面 中登录账号。
3.添加内网映射:登录后,在管理界面中找到 “添加映射” 或类似功能选项,点击进入自定义设置,选择类型和填写好对应内网公网地址,详细参数介绍如下参考。
-映射类型:根据内网服务器提供的服务类型选择,如 80HTTP、443HTTPS、非80、同端口直连等。如果是办公OA网站 Web 服务带端口访问的,一般选择非80网站。
-内网地址:填写内网服务器的 IP 地址,例如本机使用的直接用127.0.0.1。
-内网端口:填写内网服务器对应服务的端口,如 Web 服务一般为 80 或 8080,mysql数据库是3306,以本地应用实际端口号填写。
-外网地址:可以选择自动提供的免费自定义二级域名,也可以填写绑定自己注册的域名。
-外网端口:如果有特殊需求可以自定义,一般情况下选择默认或自动分配。如选择80http/443https/同端口类型的,则默认不显示不用填写,因为外网访问就是对应80/443/同内网端口号的。
4.生成外网访问地址:确认填写的信息无误后,保存设置,会生成一个带内网外网访问地址图标显示。如这个外网地址是填写使用自己域名的,则同时需要登录自己注册域名解析网站进行添加域名cname解析指向让自己域名生效,不然会一直提示域名指向不对。
5.外网访问:通过这个外网访问地址,外网用户就能访问到内网服务器,和指定端口服务上。
nat123网络映射的优点是操作简单,不需要复杂的网络配置和专业知识,特别适合个人用户和小型企业快速实现外网访问内网服务,适合考虑便捷、稳定和成本控制场景。它支持多种协议和操作系统,兼容性较好。自带防火墙黑白IP名单功能,提供了一定的安全防护机制,保障内网服务器的安全。不过,免费版可能在功能和带宽上存在一定限制,如果对访问速度和功能有更高要求,可以考虑购买付费套餐。
三、利用 VPN 实现外网访问内网服务器
VPN(虚拟专用网络)通过在公共网络上建立一条加密隧道,使外网设备能够安全地访问内网服务器,就像直接连接到内网一样。常见的 VPN 协议有 OpenVPN、L2TP 等。
以 OpenVPN 为例,搭建步骤如下:
1.准备服务器:需要一台具有公网 IP 的服务器。服务器的配置要根据实际访问需求来确定,如果预计访问量较大,需要选择配置较高的服务器。
2.安装 OpenVPN 软件包:对于是Linux的,通过 yum 命令进行安装,在服务器终端输入yum install openvpn,等待安装完成。安装过程中可能会提示确认安装,按照提示输入确认信息即可。
3.配置服务器参数:这一步包括生成证书和配置网络参数。生成证书可以借助 EasyRSA 工具,按照其官方文档的步骤,分别生成服务器和客户端证书。网络配置方面,需要修改 OpenVPN 的配置文件,一般路径为/etc/openvpn/server.conf,在文件里配置服务器监听的端口、使用的协议、客户端地址池等关键信息。例如,配置服务器监听 1194 端口,使用 UDP 协议。
4.生成客户端配置文件:将生成好的客户端证书、密钥以及修改后的配置文件打包,下载到需要访问内网服务器的设备上,然后导入到 OpenVPN 客户端中,连接成功后即可访问内网服务器。不同的 OpenVPN 客户端导入配置文件的方式可能略有不同,可参考客户端的使用说明。
VPN 的显著优势是安全性高,数据在传输过程中被加密,能有效防止数据泄露和篡改。但它的搭建和维护相对复杂,需要公网主机支撑,同时需要操作人员具备一定的网络知识和服务器管理经验,而且在部分地区,非正规 VPN 的使用是受到限制的。如果 VPN 服务器配置不当,可能会导致连接不稳定、访问速度慢等问题。
四、反向代理实现外网访问内网服务器
反向代理服务器位于外网和内网之间,充当中间人的角色。它接收外网的请求,然后将请求转发到内网的服务器上,并将服务器的响应返回给外网用户。常见的反向代理服务器软件有 Nginx 和 Apache。
以 Nginx 配置反向代理为例:
1.安装 Nginx:如果是基于 Debian 或 Ubuntu 系统,在终端输入以下命令安装:
apt - get update
apt - get install nginx
如果是基于 CentOS 系统,则使用 yum 命令安装:
yum install nginx
安装过程中可能会出现依赖包安装提示,按照提示操作即可。
2.配置反向代理规则:在 Nginx 的配置文件中添加反向代理规则。一般在/etc/nginx/conf.d/目录下创建一个新的配置文件,比如example.com.conf,内容如下:
server {
listen 80;
server_name example.com; # 替换为你的域名或公网IP
location / {
proxy_pass http://192.168.1.10:80; # 替换为内网服务器的地址和端口
proxy_set_header Host $host;
proxy_set_header X - Real - IP $remote_addr;
proxy_set_header X - Forwarded - For $proxy_add_x_forwarded_for;
proxy_set_header X - Forwarded - Proto $scheme;
}
}
这里的server_name可以填写域名或公网 IP,如果填写域名,需要先将域名解析到公网 IP 上。
3.重启 Nginx 服务:保存配置文件后,在终端使用命令systemctl restart nginx重启 Nginx 服务,使配置生效。如果重启过程中出现错误,需要检查配置文件是否正确,以及 Nginx 服务是否安装完整。
反向代理的好处是大大提高了安全性,隐藏了内网服务器的真实 IP 地址,还能对请求进行过滤、缓存等处理,并且可以实现负载均衡,提升网站的可用性和性能。但它需要公网主机转发,且代理服务配置相对复杂,需要对 Nginx 等反向代理软件有一定了解。如果配置错误,可能会导致无法访问或访问异常。
以上就是远程调试不用愁!内网服务器也能轻松断点调试的实用技巧的详细内容,更多相关资料请阅读主机测评网其它文章!
本文由主机测评网发布,不代表主机测评网立场,转载联系作者并注明出处:https://zhuji.jb51.net/yunwei/8813.html
