macOS 访问工控机(10.x.x.x)踩坑与排雷指南
1. 背景与现象
在 macOS 上调试内网工控机(IP:10.0.0.32)时,遇到了一系列“诡异”的网络不通问题:
- Chrome 浏览器访问
http://10.0.0.32:7688报错:ERR_ADDRESS_UNREACHABLE。 - Royal TSX(第三方 SSH 客户端)连接
10.0.0.32超时或拒绝连接。 - macOS 自带终端(Terminal) 使用 SSH 连接正常(前提是用户名和密码输入正确)。
2. 根本原因分析
2.1 苹果的“本地网络”隐私锁
从 macOS Catalina 开始,苹果强制要求:任何 App 尝试连接私有 IP 地址(内网)时,必须经过用户明确授权。
触发条件(数学判断):
macOS 不关心对方是工控机、打印机还是 NAS,只判断目标 IP 是否属于以下三大标准私有地址段:
10.0.0.0/8(10.x.x.x) —— 你的工控机在此范围172.16.0.0/12(172.16.x.x ~ 172.31.x.x)192.168.0.0/16(192.168.x.x)
只要目标 IP 命中上述范围,macOS 网络内核会在底层直接拦截数据包,导致 App 无法收到任何回包。
2.2 为什么“自带终端”能连,而“Royal TSX / Chrome”不能?
权限是按 App(应用) 独立存储的:
- 自带终端(Terminal.app):可能在系统安装时默认获得了权限,或者之前某次弹窗被你点过“允许”,因此它不受阻。*(注:本例中一开始连不上是因为用户名输错,属于认证失败,与权限无关。)*
- Chrome & Royal TSX:作为第三方 App,macOS 严格限制其内网访问。除非用户在弹窗中点“允许”或在系统设置中手动开权限,否则系统会直接丢弃发往
10.0.0.32的数据包。
区分报错技巧:
- 权限问题:连接超时(Timeout)或
ERR_ADDRESS_UNREACHABLE(Chrome)。- 用户名/密码错误:提示
Authentication failed或Permission denied(SSH)。
3. 解决方案
3.1 统一设置路径(系统级)
- 点击左上角苹果图标 > 系统设置。
- 进入 隐私与安全性 > 本地网络。
- 在右侧列表中找到以下 App,并打开开关:
Google ChromeRoyal TSX(或Royal TSV)- (可选)
Terminal—— 如果自带终端也被拦截,一并开启。
操作提示:
- 修改权限后,必须完全退出(Cmd + Q)并重启对应的 App,改动才会生效。
- 如果列表中没有某个 App,可以尝试在该 App 中执行一次
ping 10.0.0.32或随便输入一个 SSH 连接,系统检测到请求后会自动在列表中生成条目。
3.2 Chrome 浏览器补充说明
如果在系统设置中已开启权限,但 Chrome 依然报错,可以检查内部实验性功能(通常不需要改):
- 地址栏输入
chrome://flags/#local-network-access-check。 - 确保该项为
Default或Disabled(默认为 Default 即可,系统权限优先级更高)。
4. 避坑总结
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| Chrome 无法打开内网 Web 页面 | macOS 本地网络权限未开启 | 系统设置 -> 隐私 -> 本地网络 -> 勾选 Chrome |
| Royal TSX SSH 连接超时 | macOS 本地网络权限未开启 | 系统设置 -> 隐私 -> 本地网络 -> 勾选 Royal TSX |
Terminal SSH 提示 Permission denied |
用户名或密码错误(非网络问题) | 核对工控机的登录凭据 |
Terminal SSH 提示 Connection timed out |
Terminal 也被系统拦截 | 在本地网络设置中勾选 Terminal |
核心结论:
遇到内网 IP(尤其是 10.、172.16、192.168 开头)连不上时,第一反应先去检查 macOS 的“本地网络”隐私设置,不要先怀疑网线、防火墙或工控机挂了。大多数情况下,这只是苹果给第三方 App 套上的“紧箍咒”在作祟。