Chrome 无法访问(safari 可以)内网地址排查记录

1,010 阅读3分钟

Chrome 无法访问内网地址排查记录

📝 问题描述

访问内网地址 http://192.168.31.188/

  • ✅ Safari 浏览器可以正常访问
  • ❌ Chrome 浏览器无法访问

✅ 排查步骤与解决方案

1. 网络连接是否正常

使用终端命令确认网络连通性:

ping 192.168.31.188
curl http://192.168.31.188/
telnet 192.168.31.188 80

如果以上命令都能连通,说明网络层正常,问题出在浏览器层。


2. Chrome 是否自动跳转为 HTTPS

Chrome 有时会将 http:// 自动升级为 https://,导致连接失败。

解决方法:
  • 确保访问的是 http://192.168.31.188/,不是被 Chrome 跳转为 HTTPS。

  • 清除 HSTS 强制规则:

    打开:

    chrome://net-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 控制台提示:

Access to fetch at 'http://192.168.31.188/api' has been blocked by CORS policy...
解决方式:
  • 配置服务端响应头 Access-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 端口)
  • 客户端(macOS)

    • 同时连接有线 + WiFi 网络

✅ 实测现象

网络状态访问地址结果
仅 WiFihttp://192.168.31.188✅ 正常
有线 + WiFihttp://192.168.31.188❌ 异常(仅 Chrome)
有线 + WiFihttp://10.41.1.254✅ 正常

🧠 分析:多网卡 + 回包路径不一致

在 macOS 多网卡共存的情况下:

  • 默认使用“有线网卡(en0)”作为主路由出口
  • 如果目标 IP 对应的服务实际绑定在 WiFi 网卡(en1)上
  • 则响应包将通过 WiFi 返回
  • TCP 协议栈认为“请求与响应不一致”,导致连接失败(Chrome 特别敏感)

🔁 具体表现:

  1. 请求从 en0(有线)发出
  2. 服务端回包从 en1(无线)返回
  3. 客户端收到响应后丢弃连接(报错或超时)

🛠 解决方案建议

1. 访问服务绑定的正确 IP

若服务绑定在 10.41.1.254(无线),则客户端也应使用该 IP:

http://10.41.1.254/

2. 调整客户端网络优先级

在 macOS 中:

  1. 打开“系统设置 > 网络”
  2. 点击左下角“三点”按钮 → 设定服务顺序
  3. Wi-Fi 排在 Ethernet 前面

确保默认网络路径走 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 更严格,表现不同属正常现象