Chrome 无法访问内网地址排查记录
📝 问题描述
访问内网地址 http://192.168.31.188/:
- ✅ Safari 浏览器可以正常访问
- ❌ Chrome 浏览器无法访问
✅ 排查步骤与解决方案
1. 网络连接是否正常
使用终端命令确认网络连通性:
ping 192.168.31.188 curl http://192.168.31.188/ tel*** 192.168.31.188 80
如果以上命令都能连通,说明网络层正常,问题出在浏览器层。
2. Chrome 是否自动跳转为 HTTPS
Chrome 有时会将 http:// 自动升级为 https://,导致连接失败。
解决方法:
-
确保访问的是
http://192.168.31.188/,不是被 Chrome 跳转为 HTTPS。 -
清除 HSTS 强制规则:
打开:
chrome://***-internals/#hsts在 "Delete domain security policies" 栏中,输入
192.168.31.188,点击 Delete。
3. 检查 Chrome 插件干扰
某些插件(如 VPN、安全、广告屏蔽类)可能阻止内网流量。
排查方式:
- 使用 隐身模式访问网页(插件默认禁用)
- 或者暂时关闭所有扩展插件后重试
4. 系统代理配置是否一致
Safari 会自动使用 macOS 系统代理设置,而 Chrome 可能不会。
检查路径:
系统设置 > 网络 > 当前网络 > “代理”
确保没有设置 PAC 文件或 HTTP 代理造成影响。
5. 跨域请求失败(仅 JS 接口访问失败时)
如果网页能打开,但 JS 中的 fetch / axios 请求失败,可能是 CORS 限制。
表现为:
Chrome 控制台提示:
A***ess to fetch at 'http://192.168.31.188/api' has been blocked by CORS policy...
解决方式:
- 配置服务端响应头
A***ess-Control-Allow-Origin - 本地调试可使用 Chrome 启动参数跳过 CORS(不推荐正式使用)
6. 自签名证书问题(如果是 HTTPS)
如果服务通过 HTTPS 提供(https://192.168.31.188/):
- Chrome 可能会拒绝访问未被信任的证书
- Safari 通常允许你点击“继续访问”
可选解决方式:
- 手动信任该证书
- 或在开发时通过启动参数绕过检查(
--ignore-certificate-errors)
7. 刷新 DNS 缓存
本机 DNS 缓存可能异常:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
然后重新启动 Chrome。
半场休息
设置都没问题,需要继续分析。
📡 网络结构与多网卡冲突分析
🧾 网络背景补充
-
服务器(macOS)
- 有线 IP:
192.168.31.188 - 无线 IP:
10.41.1.254 - 运行本地 Web 服务(监听 80 端口)
- 有线 IP:
-
客户端(macOS)
- 同时连接有线 + WiFi 网络
✅ 实测现象
| 网络状态 | 访问地址 | 结果 |
|---|---|---|
| 仅 WiFi | http://192.168.31.188 |
✅ 正常 |
| 有线 + WiFi | http://192.168.31.188 |
❌ 异常(仅 Chrome) |
| 有线 + WiFi | http://10.41.1.254 |
✅ 正常 |
🧠 分析:多网卡 + 回包路径不一致
在 macOS 多网卡共存的情况下:
- 默认使用“有线网卡(en0)”作为主路由出口
- 如果目标 IP 对应的服务实际绑定在 WiFi 网卡(en1)上
- 则响应包将通过 WiFi 返回
- TCP 协议栈认为“请求与响应不一致”,导致连接失败(Chrome 特别敏感)
🔁 具体表现:
- 请求从
en0(有线)发出 - 服务端回包从
en1(无线)返回 - 客户端收到响应后丢弃连接(报错或超时)
🛠 解决方案建议
1. 访问服务绑定的正确 IP
若服务绑定在 10.41.1.254(无线),则客户端也应使用该 IP:
http://10.41.1.254/
2. 调整客户端网络优先级
在 macOS 中:
- 打开“系统设置 > 网络”
- 点击左下角“三点”按钮 → 设定服务顺序
- 将 Wi-Fi 排在 Ether*** 前面
确保默认网络路径走 WiFi,避免回包路径冲突。
3. 服务监听所有网卡(0.0.0.0)
检查 Web 服务是否监听多个网口:
sudo lsof -i :80
建议监听 0.0.0.0 或明确同时绑定两个 IP:
# 示例,Node.js server.listen(80, '0.0.0.0');
🔍 交换机或主路由的可能影响?
虽然较少见,但可能存在以下因素:
- VLAN 或 guest 网络之间有访问隔离
- 静态路由表配置问题
- ARP 缓存不一致(可尝试重启网络设备或刷新)
✅ 总结
- Chrome 拒绝访问并非其问题,而是由网络路径冲突引起
- 多网卡环境下,应确保请求与响应路径一致
- Safari 更宽容,Chrome 更严格,表现不同属正常现象