Skip to content

网络

流量如何到达沙箱或方块,又如何离开。经过代理和直连的地址、SSH、项目的私有网络、沙箱自己的 IPv6 地址及其开放的端口、网络规则,以及计费内容。

更新于

入站方式

入口 到达哪里 详情
方块的地址,或自定义域名 应用的实例,通过 HTTP:请求会唤醒或创建一个实例 方块的地址、代理与直连域名
沙箱的端口链接 某个沙箱的一个端口,通过 HTTP;链接本身就是凭据 链接
SSH 通过 SSH 网关、用你注册的密钥在沙箱中打开 shell 或运行命令 SSH
项目的私有网络 项目的服务和沙箱之间按名称互相访问 私有网络
沙箱自己的 IPv6 地址 在它上面开放的端口,通过 TCP 或 UDP,只对各端口开放给的来源可达 见下文

沙箱自己的 IPv6 地址

在拥有 IPv6 地址池的机器上创建的沙箱,在它的整个生命周期内都有一个自己的公网 IPv6 地址(沙箱的 ipv6)。ipv6 为 null 时,沙箱只有 IPv4。

  • 地址一直属于这个沙箱:休眠、创建快照、从磁盘重启、迁移之后都不变。分叉出的沙箱,或从快照创建的沙箱,会得到自己的地址。
  • 出站:沙箱通过 IPv6 发出的流量从这个地址发出,不做地址转换,所以它调用的服务器可以只放行这一个地址。
  • 入站:默认关闭。端口通过 TCP 或 UDP 开放,只对列出的来源开放,其他人都不行:来源是 IPv6 前缀或地址,::/0 表示所有人,必须明确写出。每个沙箱最多 64 个端口,每个端口最多 32 个来源。沙箱自己发起的连接的响应可以进来,ping 也可以;其他一切都会被立即拒绝(TCP 连接会被重置)。程序必须在 :: 上监听。
  • 关闭端口之后,新连接会被拒绝;已有的连接继续。
  • 休眠时,开放的端口保持开放。它的机器会代它响应已有连接的 keepalive 和 ping,所以这些既不会让它保持运行,也不会丢失;已有连接上来了数据、有到开放端口的新连接,或者有发往它所监听的 UDP 端口的数据报,都会唤醒它。暂停的沙箱收到任何数据包都会恢复运行。
glac sandboxes ports open web 5432 --from 2001:db8:1::/48
glac sandboxes ports open web 53/udp --from ::/0
glac sandboxes ports ls web
glac sandboxes ports close web 5432

PUT /v1/sandboxes/{id}/tcp/{port}(或 udp)带上 {"from": […]},开放一个端口,或修改它的来源;DELETE 关闭它;GET /v1/sandboxes/{id}/tcp 列出已开放的端口,每个都附带访问地址 ([address]:port)。沙箱创建和更新时的 inbound 是完整的列表,glac sandboxes create --inbound 8080=2001:db8::/32 从一开始就设置它。键控实例的端口就是它的沙箱的端口,位于 /v1/apps/{app}/instances/{key}/tcp 下。没有自己地址的沙箱不能开放端口:409 no_ipv6。

出站方式

  • 到互联网:沙箱或实例的流量通过 IPv4 从它的机器发出,通过 IPv6 从沙箱自己的地址发出。这就是出站流量,按发出流量的机器所在的区域计费;同一台机器上的沙箱之间的流量不计费。
  • 网络规则规定沙箱能连接哪里、能发送哪些请求(网络规则),IPv4 和 IPv6 都一样。指定了主机的规则会让每个 TCP 连接(无论 IPv4 还是 IPv6)都经过机器的出站代理,代理会把账户的连接数限制在一定份额内(限制)。通过 IPv6 时,代理从沙箱自己的地址发起连接,IPv6 不通时,会同时尝试通过 IPv4 连接同一个主机。
  • 机器自己的公网地址,沙箱访问它们的方式和互联网访问它们一样:API、方块的地址和沙箱的端口链接,无论域名指向哪里(包括沙箱所在的机器本身),都会响应沙箱,并看到它来自其出站流量所用的地址(IPv4 时是机器的地址,IPv6 时是它自己的地址)。沙箱发到那里的流量和发往其他任何机器一样,算作出站流量。机器的其他任何东西都不会响应它。
  • 无论规则怎么写都无法访问的:私有地址段、云的元数据地址,以及机器本身的其余部分;IPv6 下还有唯一本地地址、链路本地地址和组播地址。另一个沙箱可以和任何主机一样,通过它自己的 IPv6 地址、在它开放的端口上访问。
导航

输入以搜索……

↑↓ 切换↵ 选择Esc 关闭