Nebula 1.10 版本发布:支持 IPv6 覆盖网络,解锁多项新特性!
IPv6 覆盖网络之年
[IPv6 的采用]就像 [桌面端的 Linux]一样,是一个 [长达数十年的历程]。近一二十年来生产的几乎所有设备都支持 IPv6,但遵循过时安全建议的网络管理员常常会禁用它,而且老旧的网络设备可能还不支持 IPv6。随着 [IPv4 地址枯竭]问题日益严峻,而 IPv6 提供了几乎无限的地址空间,全面支持 IPv6 已成为任何现代网络解决方案的基本要求。
为何覆盖网络支持 IPv6 至关重要
Nebula 支持 IPv6 解锁了关键功能,使网络过渡更加顺畅和灵活。IPv6 庞大的地址空间消除了在连接多个 IPv4 子网时因地址范围重叠而经常出现的地址冲突问题,让 Nebula 能够无缝连接多个工作站点。如今在覆盖网络中采用 IPv6,你无需等待物理网络基础设施支持,就能为不可避免的 IPv6 主导的未来做好准备。
升级路径
将 Nebula 升级到支持 IPv6 很简单。升级过程包括将所有设备升级到 Nebula v1.10,创建 v2 CA,在每台主机上信任该 CA,并为所有主机颁发包含 IPv6 和 IPv4 覆盖地址的 v2 证书。完成这些步骤后,你将拥有一个同时支持 IPv4 和 IPv6 的覆盖网络。这种升级方式的优势在于,在过渡期间可以同时运行两种证书格式,确保网络零停机。如需详细步骤,请查看关于 [如何升级开源 Nebula 网络]的综合指南。
新的证书格式
为了支持 IPv6 和每台主机多个 IP 地址,引入了新的 v2 证书格式,从 [Protocol Buffers]转向 [ASN.1]。原来的 [v1 格式]没有真正的规范表示,并且仅支持 IPv4 地址。新的 [v2 格式]解决了这些问题。Nebula v1.10.0 通过统一接口同时支持这两种格式,允许在过渡期间主机同时携带两种证书类型,实现无缝迁移。
技术细节
Protobuf 不是规范的,这意味着任何对有线格式进行编组的操作可能与 CA 签署证书时的编组方式不同,从而使签名无效。虽然在实践中尚未出现这种情况,但在开源后不久就有人注意到了这个问题。这主要是因为在握手时会从证书中提取公钥,因为噪声头中已经包含了公钥,这样可以节省有线传输的空间。接收到数据后,从噪声头中提取公钥,再将其放回证书中进行编组,然后验证签名。如果 Protobuf 对结构体的编组方式与早期版本不同,就会导致证书无效。ASN.1 有多种序列化方法,使用规范的方法,并且将公钥从详细信息信封中移出,这样就无需像以前那样重新编组证书结构体的详细信息部分。最终结果是一种更具前瞻性的格式。
每台主机多个 IP 地址
v2 证书格式还允许为单个主机分配多个覆盖地址,包括 IPv4 和 IPv6 地址,或者任一类型的多个地址。这对于需要在 Nebula 网络的多个子网中都能被访问的主机非常有用。使用 IPv4 和 IPv6 覆盖地址签署 v2 证书示例:nebula-cert sign -name "myhost" -networks "10.10.0.1/24, fd00:10:10::1/64" -ca-crt ca.crt -ca-key ca.key。`-networks` 中的每个地址都成为该主机的可路由覆盖地址,为在覆盖网络中进行子网划分和服务组织提供了灵活性。
重大变更和重要更新
防火墙行为变更
【已弃用】:[`firewall.default_local_cidr_any`]现在默认值为 `false`。这一变更通过要求在针对 [`tun.unsafe_routes`]的防火墙规则中明确声明 `local_cidr` 来提高安全性。此配置选项将在未来版本中移除。【变更内容】:旧行为(`true`):所有防火墙规则适用于所有配置的不安全路由,除非明确限制;新行为(`false`):只有在明确指定 `local_cidr` 时,规则才适用于不安全路由。这使得防火墙规则更具可预测性,防止意外访问不安全路由。【对你的影响】:如果你正在使用 [`tun.unsafe_routes`](通常用于访问 Nebula 网络之外的资源),则需要更新防火墙规则,使其更加具体。以下是变更示例:旧行为(隐式,可能不安全):firewall: default_local_cidr_any: true # 旧默认值 inbound: - port: 22 proto: tcp groups: ["ssh-access"] # 此规则将应用于所有不安全路由;新行为(显式,安全):firewall: default_local_cidr_any: false # 新默认值 inbound: - port: 22 proto: tcp groups: ["ssh-access"] local_cidr: "192.168.1.0/24" # 显式指定此不安全路由。
其他新特性
企业安全增强
【支持 P256 密钥的 PKCS#11】(PR [#1153],PR [#1482]):当使用 `pkcs11` 标签构建 Nebula 时,现在支持存储在 [硬件安全模块 (HSM)]或 [智能卡]中的 P256 椭圆曲线密钥。这使企业部署能够满足严格的密钥管理要求,确保私钥不会存在于软件中。更多信息请参阅 [`pki.key` PKCS#11 支持]文档。使用 PKCS#11 支持的方法如下:构建支持 PKCS#11 的 Nebula:make bin-pkcs11;使用 PKCS#11 密钥引用进行配置:pki: ca: ca.crt cert: host.crt key: "pkcs11:token=MyToken;object=MyKey" # PKCS#11 URI 格式。
高级路由功能
【不安全路由支持 ECMP】(PR [#1332]):[等价多路径路由]现在可用于不安全路由,为每个订阅不安全路由的主机提供基本的负载均衡和冗余功能。现在可以为同一主机上的同一路由配置多个网关,并可选择设置权重以实现不均衡的负载分配。更多信息请参阅 [`tun.unsafe_routes` ECMP 配置]文档。示例:unsafe_routes: - route: 192.168.100.0/24 via: - gateway: 10.0.0.1 - gateway: 10.0.0.2;- route: 192.168.101.0/24 via: - gateway: 10.0.0.1 weight: 10 - gateway: 10.0.0.2 weight: 5。该实现使用 [哈希阈值映射](类似于 Linux 内核)根据数据包哈希来分配流量。当某个网关不可达时,流量会自动故障转移到其余可用的网关,不过在故障网关恢复之前,这种基本的负载均衡可能会变得不均衡。
Linux 网络集成
【支持 SO_MARK 套接字选项】(PR [#1331]):在 Linux 系统上,Nebula 现在可以使用 [`SO_MARK 套接字选项`]标记数据包,以实现高级路由场景。这对于全子网路由(包括 `0.0.0.0/0`)特别有用,无需使用 [网络命名空间]的复杂性,允许管理员通过自定义路由表路由 Nebula 流量。更多信息请参阅 [`listen.so_mark`]文档。示例:使用防火墙标记 4242 标记 Nebula 数据包(选择一个数字与 Nebula 关联):listen: so_mark: 4242。
增强的库集成
【嵌入式使用的可配置日志记录和版本控制】(PR [#1239]):将 Nebula 作为库集成到用户空间网络的项目现在可以配置日志记录器和构建版本。这对于希望保持一致日志记录模式或需要在遥测中跟踪特定 Nebula 版本的应用程序特别有用。以前将 Nebula 作为库集成时,在调用 `service.New(config *config.C) (*Service, error)` 时无法配置日志记录器或构建版本。现在,`service.New` 需要通过 `nebula.Main` 构造一个 Nebula 控制器,允许传递自定义构建版本和日志记录器,然后将控制器结构体传递给 `service.New(control *nebula.Control) (*Service, error)`。
Nebula v1.10 为网络的新时代做好了准备!对覆盖网络支持 IPv6 感到非常兴奋,希望你也是。无论你是运行小型团队网络还是大规模管理基础设施,这个版本都为你提供了构建面向未来、灵活且安全的网络的工具。准备好升级了吗?查看 [升级指南],开始在你的 Nebula 网络中使用 IPv6。如果你有兴趣为 Nebula 的未来做出贡献,[GitHub 仓库]随时欢迎拉取请求和反馈。
更便捷的 Nebula
使用由 Nebula 创造者打造的 Defined Networking,摆脱管理私有网络的繁琐。[立即开始](https://admin.defined.net/signup)
Defined Networking
相关链接:[Bluesky](https://bsky.app/profile/defined.net)、[LinkedIn](https://www.linkedin.com/company/definednet/)、[RSS](https://defined.net/blog/rss.xml)。
公司信息
[联系我们](/contact/)、[博客](/blog/)、[关于我们](/about/)、[招聘信息](/jobs/) 【我们正在招聘】(/jobs/)。
产品信息
[文档](https://docs.defined.net/)、[开始使用](https://admin.defined.net/signup)、[定价](/pricing/)、[下载](/downloads/)。
Nebula 相关
[文档](https://nebula.defined.net/docs/)、[配置参考](https://nebula.defined.net/docs/config/)、[GitHub](https://github.com/slackhq/nebula)、[Nebula 开源软件 Slack](https://join.slack.com/t/nebulaoss/shared_invite/zt-39pk4xopc-CUKlGcb5Z39dQ0cK1v7ehA)。
服务相关条款:[服务条款](/terms/)、[隐私政策](/privacy/)、[数据处理协议](/legal/dpa/)。
