项目介绍:nix-topology
简介
nix-topology 是一个用于从 NixOS 配置中自动生成基础设施和网络示意图的工具。这些图表会以 SVG 格式呈现,帮助用户直观地查看网络结构,不再需要手工绘制。这一工具通过一个全新的全局模块系统让用户可以指定他们所拥有的节点和网络,大部分的工作都是通过一个内置的 NixOS 模块自动完成的,它会从主机中收集各种信息。
功能特色
- 信息提取:从 NixOS 配置中自动提取信息,包括 systemd-networkd 的接口、已知的服务、来自 microvm.nix 和 NixOS 容器的虚拟机等,以及 kea 的网络信息。
- 图表呈现:生成两个视角的图表,一个是着重于物理连接的主图以及一个以网络为中心的网络图。
- 网络传播:自动在连接中传递已分配的网络。
- 外部设备:允许添加外部设备如交换机、路由器、打印机等。
安装与使用
安装非常简单,只需在 flake.nix 中添加 nix-topology,定义全局模块,并将其加入到 NixOS 模块中。使用起来也很方便,具体步骤如下:
- 在 flake 中添加 nix-topology 作为输入。
- 在全局 pkgs 定义中添加暴露的 overlay,以使必要的工具可用于渲染。
- 在主机配置中导入暴露的 NixOS 模块
nix-topology.nixosModules.default
。 - 创建全局拓扑并在 flake 中作为输出公开。
- 通过
nix build .#topology.x86_64-linux.config.output
渲染你的拓扑,最终目录会包含生成的 SVG 图表。
添加连接和设备
初次渲染后的图表可能看起来有些凌乱,这是因为缺少某些物理连接等关键内容。用户可以在全局拓扑模块或任何参与的 NixOS 节点中添加这些信息,过程十分简单:
{
# 连接 node1.lan 至 node2.wan
nodes.node1.interfaces.lan.physicalConnections = [{ node = "node2"; interface = "wan"; }];
# 增加家庭网络
networks.home = {
name = "Home Network";
cidrv4 = "192.168.1.1/24";
};
# 指明 myhost.lan1 属于该网络
nodes.myhost.interfaces.lan1.network = "home";
}
或者在本地配置中添加:
{
topology.networks.home = {
name = "Network Made by Host1";
cidrv4 = "192.168.178.1/24";
};
topology.self.interfaces.lan1.network = "home";
}
未来计划
nix-topology 仍有诸多可以改进之处:
- 信息收集方面,例如 Podman/docker 提取、网络接口提取、磁盘提取等。
- 通用功能,包括 NAT 标识、接口类型图标等。
贡献方式
欢迎大家为 nix-topology 作出贡献!可以提出新功能、实施提取器或其他帮助。如果有兴趣,更多信息可以在项目的 CONTRIBUTING.md 和文档的开发章节中找到。
许可证
该项目获得 MIT 许可,保证了开源的自由使用与贡献。除非特别声明,所有提交的贡献都是按照该许可进行授权的。