打开它

总开关、endpoint 所监听的那个端口,以及让它保持在本地的那四件事。

以 Markdown 查看

刚装好的机器对代理什么都不声明。代理访问只隔着一个开关,而这个开关是代替认证的那三道关卡里的第一道:总开关、按范围的那些开关,以及日志。

开关与端口

总开关默认是关的。在代理页面上把它打开(打开这个页面需要你本地角色里那个管代理的权限);endpoint 随后在 http://127.0.0.1:<port>/mcp 上以 Streamable HTTP 监听。应用缩到托盘里运行时,代理同样连得上。

设置 作用 取值 默认值
启用代理访问(MCP) 启动或停止这个 endpoint。关 = 没有 endpoint,什么都不声明。 开 / 关 关
端口 endpoint 监听的本地端口。更改它会重启代理访问,页面上每一段连接代码也跟着更新。 1024–65535。代理访问搬不过去的端口,会在保存任何东西之前被拒绝:原因写在字段下方,字段退回到正在生效的端口,什么也不会重启。被拒绝的有六种:超出范围的值(“请输入 1024 到 65535 之间的数字。”);在远程访问上设定的 Web 服务器端口(“端口 N 已经是 Web 服务器的端口。请另选一个端口,或者先移动 Web 服务器。”);配置上 OPC UA 服务器的端口,无论服务器正在运行还是已经停止(“端口 N 已经是 OPC UA 服务器的端口。请另选一个端口,或者先移动服务器。”);Connector 页面上Modbus 服务器的端口,无论服务器开着还是关着(“端口 N 已经是 Modbus 服务器的端口。请另选一个端口,或者先移动 Modbus 服务器。”);Connector 页面上MQTT Broker的端口,无论 Broker 开着还是关着(“端口 N 已经是 MQTT Broker 的端口。请另选一个端口,或者先移动 MQTT Broker。”);以及这台计算机上已经被别的东西占着的端口(“端口 N 在这台计算机上已被占用。请关闭占用它的程序,或者另选一个端口。”)。 18181

开关旁边有一枚状态标签:开关关着时它写已封闭,开着时写已开启,这样 endpoint 的状态一眼就能从标签上读出来。

endpoint 下面有一个没有自己标题的计数,它汇总页面更下方允许的范围里的那些开关。第一行给四个等级各写出开着的范围有几个,数字前面的圆点在该等级至少有一个范围开着时亮成该等级的颜色,一个都没开时是灰色:所有范围都开着时,它写 5 读取、6 配置、4 操作、1 恢复。下面一行把它们加起来,写“16 个能力组中已开启 16 个”;只要有一个操作或恢复范围开着,它接着写出开着的组里有几个能写运行中的现场设备:“5 个实时写入”。它只数这些范围的开关,别的都不数,这样工作站暴露了多少,一眼就读得出来。总开关关着时,这个计数和 endpoint、端口一起变灰,但它仍在读那些开关,而开关保留着已保存的状态:它显示的是总开关重新打开时代理访问会打开什么。

开关关着的时候,endpoint 下面的复制 URL和端口是灰的,把指针停在其中任何一个上,就会说明原因:“代理访问未启用。请先在访问一节中启用。”允许的范围卡片也在它那些灰掉的开关上方写着同一句话。

页面上的一切都自动保存;没有“保存”按钮。

这个 endpoint 是怎么被保护的

  • 只在本地回环地址上。 套接字绑在 127.0.0.1 上,绝不绑在网络接口上。厂区网络够不着它。
  • 来自浏览器的请求被拒绝。 光靠绑定还挡不住一个恶意网页把它自己的域名重绑到 127.0.0.1,所以 endpoint 还会检查浏览器伪造不了的那两个头:Host 不是本地的请求,或者带着一个非本地 Origin 的请求,会在它连会话都还没打开之前就被 403 拒绝。每一次拒绝都在事件里按Agent这个区域记进日志,所以一台正被某个浏览器标签页探测的工作站会留下痕迹。
  • endpoint 没有认证,这是有意的。 那些关卡就是总开关、按范围的那些开关和日志。万一你要通过一条隧道把 endpoint 暴露出去,认证必须住在那条隧道上(见 ChatGPT 和其他走云端的客户端)。
  • 工具清单等于已启用的那些范围。 一个已禁用范围的工具根本不会被声明出来:它们是不存在,而不是“答一句不行”。改动任何一个开关都会重启这个 endpoint,所以代理看见的东西永远和你允许的东西一致。两个帮助工具是唯一的例外:它们只读应用的文档,不读工作站的任何东西,所以不管开关怎么设,都随 endpoint 一起提供(帮助)。