一次“在家连不上公司内网服务”的排障实战记录

📖 背景

新项目要开发一个后台评估模块,同事用AI跑了一版基础代码,我的任务是启动服务、调试Bug、修复问题

项目用的是微服务架构,依赖一个配置中心来拉取数据库地址、账号密码等关键配置。启动脚本里有一个前置检查,必须能连上配置中心才能继续启动。


💥 事故现场

在我的个人电脑上,用公司的VPN连入内网,执行团队标准的启动脚本时,报了这个错:

text

复制代码
BLOCK: xxx node endpoint is not reachable: http://xxx.xxx.com/get_server_nodes

现象

  • 脚本连一个内网域名失败了

  • 报错直接终止了脚本,服务压根没启动

  • 整个启动流程还没走到应用启动那一步就停了


🔍 排障过程(按时间线)

第一步:验证网络是否真的不通

我先验证了VPN本身是否正常,用了一个内网数据库域名来做对照测试:

powershell

复制代码
Test-NetConnection -ComputerName xxx.db.xxx.com -Port 5000

结果:

text

复制代码
ComputerName     : xxx.db.xxx.com
RemoteAddress    : 10.xx.xx.xxx
RemotePort       : 5000
TcpTestSucceeded : True

网络是通的:数据库能连上,说明VPN本身没问题。


第二步:尝试解析报错的配置中心域名

既然数据库能通,我单独测了一下配置中心这个域名:

bash

复制代码
curl -v http://xxx.xxx.com/get_server_nodes

结果:

text

复制代码
* Could not resolve host: xxx.xxx.com
curl: (6) Could not resolve host

DNS解析失败:电脑根本不认识这个域名是什么IP。


第三步:确认DNS问题

nslookup 确认一下当前用的是哪个DNS:

bash

复制代码
nslookup xxx.xxx.com

返回显示DNS服务器不是公司内网的,而是我本地的公共DNS(比如路由器或运营商的)。

问题初步定位

VPN连上了(网络通了),但DNS解析请求没有走VPN通道,还是走的本地的DNS服务器,所以解析不了内网域名。


第四步:对比公司环境 vs 在家环境

为什么同样的脚本,在公司能跑,在家跑不了

环境 网络 DNS服务器 内网域名解析
公司(办公室) 公司WiFi 公司内网DNS(自动下发) ✅ 能解析
家(VPN) VPN连入 本地DNS(路由器/运营商) ❌ 不能解析

根本原因

  • 公司的VPN使用了分裂隧道模式 (Split Tunneling):只有访问内网IP的流量走VPN,DNS解析请求还是走的本地DNS

  • 本地DNS服务器里没有注册公司的内网域名,所以解析失败。


✅ 解决方案

方案一:配置hosts文件(临时绕过DNS)

这是最快的解法。找一位在公司内网的同事,让他帮忙解析一下这个域名:

bash

复制代码
ping xxx.xxx.com

拿到内网IP(类似 10.xx.xx.xxx),然后配到本地的 hosts 文件中:

WindowsC:\Windows\System32\drivers\etc\hosts

添加一行:

text

复制代码
10.xx.xx.xxx xxx.xxx.com

保存后重新 curl 测试:

bash

复制代码
curl -v http://xxx.xxx.com/get_server_nodes

这次如果返回了 502 Bad Gateway 或其他响应,说明域名解析问题已经解决。剩下的就是配置中心服务本身的问题了。

优点 :5分钟搞定,立即见效

缺点:如果内网IP变了,需要更新hosts


方案二:配置VPN为"全隧道模式"(根治方案)

在VPN客户端中,将VPN模式从分裂隧道 切换为全隧道,让所有网络请求(包括DNS解析)都走VPN通道。

优点 :一劳永逸,所有内网域名都能解析

缺点:VPN可能不支持此配置,或者需要管理员权限


方案三:手动修改网络DNS为内网DNS(根治方案)

将电脑的DNS服务器地址手动设置为公司的内网DNS服务器地址(需要向IT或运维获取)。

优点 :一劳永逸

缺点:如果VPN不转发DNS流量,改了也没用,需要配合全隧道模式使用


方案四:本地配置文件,彻底绕过配置中心(终极备用方案)

如果环境问题长期解决不了,可以让应用完全不依赖配置中心,从本地的 application-local.yml 读取配置,然后用 -Dspring-boot.run.profiles=local 启动。

优点 :完全不依赖内网环境,本地想怎么跑怎么跑

缺点:需要自己维护一套完整配置,且可能和团队配置脱节


📝 知识沉淀

核心结论

"VPN连上了" ≠ "所有网络流量都走了VPN"

特别是DNS解析请求,很可能还是走的本地网络,导致内网域名解析失败。

排查方法论

遇到类似问题时的标准排查路径:

text

复制代码
1. ping 域名
   ├── 能通 → DNS没问题,检查端口/服务状态
   └── 不通 ↓

2. ping IP
   ├── 能通 → DNS解析有问题
   │         └── 解决方案:配hosts / 换DNS / 配置VPN
   └── 不通 → VPN网络本身有问题
             └── 解决方案:检查VPN连接状态、路由表

关键检测命令

目的 命令 说明
测网络连通性 ping 域名或IP 最基础的连通性测试
测指定端口 Test-NetConnection -Port 端口(Win) nc -zv 地址 端口(Mac/Linux) 确认端口是否开放,服务是否存活
查看当前DNS nslookup 域名 确认DNS解析结果和使用的DNS服务器
查看路由表 route print(Win) netstat -rn(Mac/Linux) 确认哪些网段走了VPN
测试HTTP接口 curl -v 地址 看完整请求响应,确认是DNS问题还是服务问题

为什么公司电脑能跑,家里不行?

场景 DNS服务器 能否解析内网域名
公司内网 DHCP自动下发公司DNS ✅ 能
家用VPN(分裂隧道) 本地DNS(运营商/路由器) ❌ 不能
家用VPN(全隧道) VPN下发的公司DNS ✅ 能

🚀 后续进展

配置完hosts后,配置中心域名解析问题解决。继续往前走时又遇到了502 Bad Gateway(配置中心服务本身不可用),这是服务端的问题,需要联系运维或确认测试环境状态。

但这已经是另一个层面的问题了------DNS这一关,我们已经彻底闯过去了。


💡 一句话总结

排障的本质是分层------网络层通不通?DNS层能不能解析?服务层活不活?每层独立排查,就不会被卡住。

相关推荐
普马萨特2 小时前
5G小基站对室内定位的影响
网络·5g
专业工业电源打工人2 小时前
F0505S-2WR3 适配优选 钡特电源 DF2-05S05LS|2W 隔离 DC-DC 模块电源5V转5V硬件选型参数规格解析
大数据·网络·人工智能
he39123772 小时前
ogg命令
运维·网络
其实防守也摸鱼2 小时前
Kimi K3深度测评:长文本之外的真实力
运维·开发语言·网络·人工智能·python·学习·安全
hxhy002 小时前
H3C NX30Pro 路由刷机指南
智能路由器
便利店10243 小时前
快递选「挂号」还是「平邮」?传输层一次讲清
网络·网络协议·tcp/ip·传输层
夜雪一千3 小时前
UDP 协议简介
网络·网络协议·udp
封狼居胥廖3 小时前
网络编程3
网络
三言老师3 小时前
mv移动文件、重命名文件实战案例
linux·服务器·网络·centos