惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
Jina AI
Jina AI
罗磊的独立博客
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
J
Java Code Geeks
U
Unit 42
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
腾讯CDC
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
InfoQ
月光博客
月光博客
博客园_首页
Vercel News
Vercel News
P
Proofpoint News Feed
GbyAI
GbyAI
Y
Y Combinator Blog

博客园 - 三国梦回

oracle中date类型在mybatis中查询时遇到的坑 mitmweb在linux上进行反向代理及浏览器中实时查看请求响应 codex对接智谱coding plan,我发现连cc switch也不用了 windows codex更新失败如何处理 windos上codex沙盒报错问题记录 廉颇老矣,装个EclipseMemoryAnalyzer都能卡一小时 codex windows平台中elevated sandbox机制学习 codex windows平台中unelevated sandbox机制学习 bug排查:nacos做配置管理,给服务返回的配置竟然是错的 windows安装codex desktop和cc-switch,接deepseek v4 flash windows安装ddns-go,上传动态的ipv6到自己的域名 immortalWrt路由器上抓包查看电脑联网如何获取ip 路由器刚刷的immortalWrt系统,我是如何配置ipv6的 路由器刷openwrt之ImmortalWrt过程记录--上 spring boot 项目中oracle datasource设置schema spring cloud项目中,在bootstrap.yml中指定了active的profile,结果不生效 线上服务重启后,从nacos取不到配置了,怎么回事 nginx location没学好,把自己坑了一把 技术问题记录20260125 最近遇到的两个技术问题记录 linux服务器文件上传失败 线上遇到的redis和数据库数据未同步问题、redisson内部实现问题 复杂业务系统线上问题排查过程 nacos中配了一个数字,springboot取回来怎么变了 一个java空指针异常的解决过程 简单记录下最近2个月完成的线上系统迁移工作 centos停服,迁移centos7.3系统到新搭建的openEuler https证书中的subject alternative name字段作用及如何生成含该字段的证书 linux中如何判断一个rpm是手动安装还是通过yum安装的 对接服务升级后仅支持tls1.2,jdk1.7默认使用tls1.0,导致调用失败
端口telnet不通排查过程
三国梦回 · 2025-04-12 · via 博客园 - 三国梦回

现状

简单描述下最近在做啥,我手里维护的一些系统的线上服务器,还在使用centos7,7.3/7.6/7.9都有,运维侧选定的替换系统是openEuler20.03-LTS-SP1。按理说,运维直接在线上升级系统就完了,但是,由于风险太大了(直接升级后可能导致应用异常),就还是需要研发出迁移方案、测试组进行测试后,比较保险。

于是,我就在本地虚拟机virtualbox先来折腾试试,先搭了个centos 7.3的系统,部署了个应用,监听端口9900,结果怎么都访问不了。

下面记录下排查过程。

应用介绍

我们这个服务器是centos7.3,上面的应用也比较老,是一种java servlet容器:resin,和tomcat类似,对外提供http接口。

配置监听端口的地方如下:

image-20250411104535813

程序启动后,我看端口是在监听的:

image-20250411104640445

我本机curl试了下,可以访问:

[root@node7 my168_web]# curl localhost:9900
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

我这个虚拟机的端口9900,需要暴露到windows宿主机进行访问,配置了下端口映射:

image-20250411104901122

然后,通过浏览器访问localhost:19900,发现失败:

image-20250411105013245

排查过程

怀疑ipv6

我在虚拟机上,开了tcpdump,发现可以收到syn握手:

tcpdump -i any tcp port 9900 -Ann

image-20250411105223762

我在虚拟机,又试了下:

[root@node7 my168_web]# curl localhost:9900
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

发现抓包如下:

image-20250411105420467

此时,就看到通过localhost访问时,用的ipv6的地址,此时,开始怀疑是不是9900端口,仅监听了ipv6导致的。

下面这个输出,强化了我的猜测:

image-20250411105610890

我又看了下其他环境,发现:

如果这个环境里,只有ipv4地址,netstat的输出就不一样

image-20250411105759812

另外一套环境,有ipv6地址,netstat输出就是inet6啥的。

image-20250411105929962

尝试修改配置文件,监听ipv4

把配置改成了下面这样:

<http address="0.0.0.0" port="9900"/>

重启后,netstat结果发现输出没啥变化:

[root@node7 my168_web]# netstat -nltp|grep 9900
tcp6       0      0 :::9900                 :::*                    LISTEN      11992/java      

此时,在网上问大模型,大模型提到:

image-20250411110639245

大模型建议实际测试下,看看到底是否支持ipv4:

image-20250411110732643

测了之后,发现确实可以,那就说明对ipv4的支持没问题:

image-20250411110837192

尝试从其他虚拟机telnet该端口

我找了另一台同网段的机器10.0.2.8:

[root@node-4 yum.repos.d]# telnet 10.0.2.12 9900
Trying 10.0.2.12...
telnet: connect to address 10.0.2.12: No route to host

很奇怪的是,你说no route我可以理解,就是找不到目标主机的路由项嘛,但是,我在目标主机开了抓包的,发现telnet的时候,能收到syn包:

image-20250411111207640

而且,抓包到wireshark看的时候,发现mac地址也是正确的:

image-20250411111450258

下图附两台机器的mac地址:

image-20250411111607327

image-20250411111630302

我于是在发起端的机器,查看下路由表:

image-20250411111400569

发现路由表没错。

安装了个traceroute,发现就一跳,然后看看arp,发现这个ip对应的mac地址也是对的。

image-20250411111716475

此时,又去网上查了下,开始怀疑到了防火墙的身上。

image-20250411111946672

防火墙排查

找了下centos7.3中对应的防火墙相关命令:

https://www.ctyun.cn/zhishi/p-330299

发现目标服务器上,防火墙真的开着的:

image-20250411112126775

查了下,9900端口是否开放,发现没开放:

[root@node7 my168_web]# firewall-cmd --query-port=9900/tcp
no
9900加入开放:
firewall-cmd --permanent --add-port=9900/tcp

firewall-cmd --reload

[root@node7 my168_web]# firewall-cmd --permanent --add-port=9900/tcp
success
[root@node7 my168_web]# firewall-cmd --reload
success
[root@node7 my168_web]# firewall-cmd --query-port=9900/tcp
yes

然后再试试,果然就好了:

image-20250411112318814

总结

这个centos7.3是新装的虚拟机,忘了防火墙会自动开启这回事了。

由于对netstat的输出也是半桶水,导致走了弯路,好歹最后还是找到了正确的路。