网络与隧道
交互式实例的"浏览器零安装可达"靠 Cloudflare 隧道实现。理解它有助于知道哪些节点能 SSH、为什么节点不用开放端口。
为什么用隧道
供应商节点大多在 NAT 后、没有公网 IP,也不应为了接单去开放入站端口(不安全、配置麻烦)。平台让节点上的 cloudflared 主动建立出站隧道,把实例服务暴露到一个稳定的公网域名。因此节点只需出站连接,无需任何入站端口,用户在浏览器即可直接访问。
隧道暴露的地址形态:
| 地址 | 用途 |
|---|---|
https://i-<实例ID前8位>.inst.<域名> | 主入口(如 Jupyter /lab) |
https://i-<实例ID前8位>-term.inst.<域名> | 网页终端(ttyd) |
https://i-<实例ID前8位>-ssh.inst.<域名> | SSH over tunnel(VM 等场景) |
公网 IP vs NAT 节点
| 节点类型 | Jupyter / 网页终端 | SSH |
|---|---|---|
有公网 IP(public_ip 非空) | 经隧道 | 直连:ssh -p <动态端口> root@<公网IP> |
| NAT 节点 | 经隧道 | 仅隧道方式(或不提供直连 SSH) |
需要直连 SSH 时,在算力市场筛选 public_ip 非空的节点。GET /rentals/:id/access 会据节点能力返回 ssh_cmd / ssh_host / ssh_port。
访问地址从何而来
实例运行后调用 GET /rentals/:id/access,返回 tunnel_hostname 与 access 对象(jupyter_url、terminal_url、ssh_cmd 等)。open_button 指明主入口。详见 交互式实例。
端口暴露
创建实例时 ports 里声明的端口(如推理服务 8000)也经隧道映射;open_button: true 的端口会在控制台显示"打开"按钮。底层端口由 Nomad 动态分配,详见 HashiCorp 集成。
安全
- 隧道为出站发起,节点不暴露入站面,降低被扫描/攻击的风险。
- Jupyter 通过 token、网页终端通过会话保护访问;不要把带 token 的实例地址公开分享。
- 节点防火墙建议默认拒绝入站,仅放行管理 SSH,详见 安全最佳实践。
