网络
动机
服务器的网络配置一直是一件极为繁琐的事,它体现在:
- 外部而言,需要处理域名、证书、反向代理、内网穿透等问题。
- 内部而言,需要管理各个应用独立的路由、域名和安全策略。
目前,市面上还没有一款产品可以同时兼顾安全和易用性。
Terminus OS 希望提供给个人用户一个没有门槛但足够安全和通用的解决方案。
Entrance
Entrance 是应用的入口,用户需要通过 Entrance 访问应用。
每个应用有一个或多个 Entrance,Entrance 有 Public 和 Private 两种,例如 WordPress 就包含公开页面(Public Entrance)和管理后台(Private Entrance)两个 Entrances。
Public Entrance
定位是提供对外公开的服务。例如博客,社交媒体等。
访问 Public Entrance 的流量无需经过鉴权。我们通过让 Public Entrance 的流量经过 Cloudflare 获得基本的安全保障。
- 当 Terminus 有 public IP,流量经过 Cloudflare 进入 Terminus。
- 当 Terminus 没有 public IP 时,有两种方式:
- 流量经过 Cloudflare Tunnel 进入 Terminus。
- 流量经过 Cloudflare 后转发给 FRP 后进入 Terminus。
Private Entrance
定位是提供只有用户自己访问的服务,例如博客管理后台、Desktop 等。
访问 Private Entrance 的流量需要经过鉴权。Private Entrance 的流量路由会取决于用户是否在设置中启用了Only VPN模式:
- Only VPN 模式未启用:
- 如果用户在 TermiPass 中启用 VPN 连接,所有网络流量将通过 VPN(TailScale)转发。
- 如果没有启用,网络流量的处理方式与 Public Entrance 相同。
- Only VPN 模式已启用:只有通过 VPN (TailScale) 的流量才能访问 Private Entrance。
Endpoint
用户有两种方式在浏览器里访问应用(应用的 Entrance):
默认可以使用形如
https://[RouteID].[DomainName]
的 URL,例如https://vault.bob.myterminus.com
。RouteID 也有两种情况:默认的 RouteID
为了方便记忆,我们给所有预装的系统应用设置了容易记忆的 RouteID。例如
desktop
和market
。其它应用采用应用 ID + Entrance Index 的组合。这是一个由小写英文字母和数字组成的 10 位字符串。例如应用 ID为
92d76a11
,Entrance Index 为1
,则 RouteID 为92d76a1101
。
用户可以在设置里自定义 RouteID。
也可以给 Entrance 设置第三方域名。
INFO
DomainName 是由 Terminus Name 变化而来。
Entrance Index 是指 Entrance 在 TerminusManifest.yaml 中定义的多个 Entrances 里的位置。
Setup Domain
Terminus Space 会在 Terminus 激活时,协助用户完成 DomainName 的设置。
DNS
激活系统时,我们会对域名进行 DNS 配置,以便用户可以在安装完成后通过 URL 访问到 Terminus。
INFO
对 Organization 的 Admin,需要额外参考 Domain 设置教程,将域名交由 Terminus Space 托管。
HTTPS 证书
为了确保用户访问 Terminus 时数据传输的私密性,我们为用户申请了免费的 SSL 证书,该证书由 Google Trust Services LLC 签发,当证书临期时会自动进行更新。
同时为了提升访问 Terminus 的速度及安全性,我们使用 Cloudflare 对 Terminus 进行 7 层加速,对应的 SSL 证书由 Google 签发并由 Cloudflare 进行管理。
设置反向代理
对于没有 public IP 的 Terminus 用户,需要在激活时设置反向代理,目前有两种方式:
- 选择 Cloudflare 的 Tunnel。
- 选择 FRP 节点,为了加快访问速度,建议选择距离 Terminus 物理位置较近的 FRP 节点。
通过 local 访问
用户会在两种情况下可以通过https://[RouteID].local.[DomainName]
(例如https://vault.local.bob.myterminus.com
)访问 Terminus 上的应用:内网或 VPN。
内网
当用户的设备和 Terminus 在同一内网,例如连接了相同的 WIFI 时。
VPN 访问
Terminus 基于 TailScale 和 HeadScale 为用户内置了 VPN 服务。
当在 TermiPass 启动 VPN 访问后,装有该 TermiPass 的设备访问 Terminus 的所有流量都会经过 VPN。VPN 访问的优势有:
- 更安全
- 更快的访问速度
我们在设置里提供了 Only VPN 开关。打开后,系统会要求所有对 Private Entrance 的访问都必须通过 VPN。
TermiPass 连接状态
你可以通过 TermiPass 连接状态 查看当前 TermiPass 和 Terminus 的连接状态。
Terminus 内部网络
Terminus 系统在网关架构上采用了多层代理路由设计。从集群
-> 用户
-> 应用
-> 服务组件
,逐层分发流量。
在应用内部,Terminus 做了多层安全防护。
每个应用独立一个 namespace,所有的资源都放在一个 namespace 中独享。所有应用的容器配置的
ServiceAccount
不允许绑定ClusterRole
,也就是说,应用不具有跨 Namespace 访问资源的权限。每个 Namespace 会添加
Network Policy
,除集群的应用和用户自己系统的应用外,不允许其他 APP 的有网络请求可以进入。用户与用户之间的所有应用隔离、网络隔离。每个用户安装的三方应用之间也会网络隔离,避免有恶意 APP 攻击其他应用。应用部署的所有 Pod 不允许有
hostNetwork
或者NodePort
的 Service。只有申明了 Entrance 的 Service,系统才会提供访问流量的进入代理。而申明为 Entrance 的 Pod 会强制加入 Envoy 的沙盒 Sidecar,对每一个进入的流量进行认证授权。
更多
用户
使用设置管理 Entrance
开发者
通过 TerminusManifest.yaml 了解更多 Entrance 的属性