NetBox v4.5 发布说明深度解读:v2 API 令牌、对象所有权、线缆画像与高级端口映射
发布时间:2026/9/21 18:35:44 作者:尧图编辑部 阅读量:1,286

后端网络数据建模【免费下载链接】netboxThe premier source of truth powering network automation. Open source under Apache 2. Try NetBox Cloud free: https://netboxlabs.com/products/free-netbox-cloud/项目地址https://gitcode.com/gh_mirrors/ne/netbox点击查看免费下载output_articleNetBox v4.5 发布详解v2 API 令牌、对象所有权、线缆画像与高级端口映射NetBox v4.5 是 2026 年初发布的一个重要功能版本围绕**安全加固v2 API 令牌、数据建模能力对象所有权、高级端口映射、线缆画像以及查询体验UI 过滤查找修饰符**四大主题展开。本文以仓库内 docs/release-notes/version-4.5.md 为主线结合源码实现逐一拆解每个新特性与破坏性变更并整理 v4.5.0 至 v4.5.10 各补丁版本的关键修复与增强帮助你在升级前评估影响、升级后快速上手新能力。版本总览与运行环境要求v4.5.02026-01-06发布随后以约两周一个补丁的节奏迭代至 v4.5.102026-05-04。整个 v4.5 系列最重要的前置条件是Python 版本要求收紧Python 3.10 与 3.11 不再受支持NetBox 现在要求Python 3.12、3.13 或 3.14#19889、#19095。升级前请确认运行环境中的解释器版本。依赖升级v4.5.7 起支持 django-rq 4.0并引入新的RQ配置参数#21696。该版本定位为一次“半破坏性”升级保留了对旧版 API 令牌v1的兼容同时为后续 v4.7 移除 v1 令牌支持做了铺垫v4.7 将彻底移除 v1 令牌。破坏性变更Breaking Changes逐项解析v4.5.0 的破坏性变更涉及 API、权限、模型与命令行行为升级前需逐条核对变更内容影响与迁移建议不再支持 Python 3.10/3.11要求 Python 3.12/3.13/3.14GraphQL 按 ID/枚举过滤必须显式使用过滤查找例如id: 123需写成id: {exact: 123}#19338渲染设备/虚拟机配置需要render_config权限新增权限点旧用户默认无此权限需在权限配置中显式授予#16681、#20929移除ALLOW_TOKEN_RETRIEVAL配置参数API 令牌明文不再可检索#20492API 令牌不可再在用户之间转移令牌归属一旦创建即锁定#20476平台platform上的配置上下文会向下传播到其子平台已部署环境中可能出现意料之外的变化#20639/api/dcim/cable-terminations/端点变为只读线缆端接必须直接通过/api/dcim/cables/修改#20295移除交换 A/Z 电路端接的 UI 视图功能入口被移除#20683移除实验性 HTMX 导航功能页面导航回到传统方式#17571User模型移除废弃布尔字段is_staff需要清理依赖该字段的脚本#16137此外还清理了一批废弃行为移除 REST API 端点/api/extras/object-types/改用/api/core/object-types/#19898Webhook 负载数据不再包含model键应改用包含父应用标签的object_type#20088移除废弃模块core.models.contenttypesv4.4 起由core.models.object_types取代#20095自定义脚本基类中移除load_yaml()与load_json()工具方法#20096。新特性一UI 过滤查找修饰符Lookup Modifiers大多数对象列表过滤器现在支持可选的查找修饰符下拉框以支持更复杂的查询#7604。例如数值型过滤器除了默认的等值匹配外还可以选择 less than小于、greater than大于或 not非。具体可用的修饰符取决于每个过滤器的类型。需要强调的是该特性并没有引入任何新过滤器而是把底层已经存在、但此前只能通过 URL 参数手工拼接的过滤能力暴露到了 UI 中。插件开发者可以使用register_filterset()装饰器注册自己的过滤器集合来启用这一功能。从实现上看这与项目一贯的“django-filter 驱动列表视图”设计一致——过滤器集如 dcim/filtersets.py中定义的FilterSet字段决定了可用修饰符的类型范围。新特性二改进的 API 认证令牌v2 Tokens这是 v4.5 安全层面最重要的升级#20210。v2 令牌带来了多项安全改进HMAC 加密码胡椒pepper散列令牌明文不再存储数据库中只保存不可逆的 SHA-256 HMAC 摘要非敏感密钥key令牌附带一个可安全共享的识别密钥用于标识令牌而不会泄露明文标准 Bearer 头格式# v1 token header Authorization: Token TOKEN # v2 token header Authorization: Bearer nbt_KEY.TOKENv2 令牌的 key 统一以固定前缀nbt_开头可用于辅助密钥检测工具识别泄漏的令牌。源码级原理从 netbox/users/constants.py 可以看到 v2 令牌的参数定义TOKEN_PREFIX nbt_ # Used for v2 tokens only TOKEN_KEY_LENGTH 12 TOKEN_DEFAULT_LENGTH 40 TOKEN_CHARSET string.ascii_letters string.digits即key 为 12 位字母数字明文令牌为 40 位随机字符串。netbox/users/models/tokens.py 中的Token模型展示了 v2 的存储结构version版本字段默认 V2、key识别密钥、pepper_id所用胡椒的 ID、hmac_digestSHA-256 摘要、enabledv4.5.0 新增的启停开关#20834。模型上的 CheckConstraint 强制约束了版本与字段的对应关系v1 令牌必须有plaintext且无 v2 字段v2 令牌必须有key/pepper_id/hmac_digest且plaintext为空。令牌的生成与校验逻辑netbox/users/models/tokens.py中update_digest()调用get_current_pepper()取最新胡椒对明文计算 HMAC-SHA256 摘要validate(token)对 v2 令牌去掉nbt_前缀后用pepper_id对应的胡椒重算摘要并与存储值做hmac.compare_digest恒定时间比较防止时序攻击鉴权头前缀通过get_auth_header_prefix()生成v1 返回Tokenv2 返回Bearer nbt_key.。get_current_pepper()实现在 netbox/users/utils.py取API_TOKEN_PEPPERS字典中 ID 最大的胡椒作为当前胡椒——这意味着轮换胡椒时只需新增更高 ID 的条目旧令牌仍可用旧 ID 的胡椒完成校验从而实现平滑轮换。配置要求API_TOKEN_PEPPERSv2 令牌要求配置API_TOKEN_PEPPERS参数这是v4.5 后必须设置的新增必配参数不配置则无法创建 v2 令牌见 netbox/users/models/tokens.py 中的校验逻辑。netbox/netbox/configuration_example.py 给出了配置范式# Define a mapping of cryptographic peppers to use when hashing API tokens. A minimum of one pepper is required to # enable v2 API tokens (NetBox v4.5). Define peppers as a mapping of numeric ID to pepper value, as shown below. Each # pepper must be at least 50 characters in length. API_TOKEN_PEPPERS { 1: random string, 2: random string, }要点键为数字 ID值为至少50 字符的随机字符串v4.5.9 起允许传入dict子类#21875至少配置一个胡椒才能启用 v2 令牌。令牌的其他增强还包括新增enabled布尔字段#20834禁用即临时吊销但不删除、令牌视图增加用法参考#20917、引入/api/authentication-check/端点用于校验 REST API 凭据#20936路由定义见 netbox/netbox/urls.py。兼容性提示本版本继续支持旧的 v1 令牌但官方强烈建议迁移到 v2 令牌因为NetBox v4.7 将移除 v1 令牌支持。新特性三对象所有权Object Ownership大多数模型新增了可选的owner外键字段#20304指向新的 Owner 模型——Owner 代表一组用户和/或组的集合。通过该关系NetBox 可以在不依赖标签或自定义字段的情况下原生表达对象的所有权。需要特别区分两个概念所有权ownership≠ 租约tenancy。所有权确定谁负责对象的维护而租约表达的是运营上的依赖关系。该特性的配套工作包括v4.5.2 在所有支持的对象列表视图中增加 owner group 表格列与过滤器#21081并在 REST API 层为大多数对象增加可选的owner外键字段。相关模型定义可参考 netbox/users/models/ 目录owner、ownergroup文档见 docs/models/users/owner.md 与 docs/models/users/ownergroup.md。新特性四高级端口映射Advanced Port Mappings此前 FrontPort 到 RearPort 只能做“多对一”映射多个前端口对应一个后端口。v4.5 引入了中间模型PortMapping#20564将FrontPort.rear_port/rear_port_position字段替换为 PortMapping 关系支持任意数量的前端front port/position与后端rear port/position之间的双向映射。这一改变解锁了建模复杂内联设备的能力——例如在两个线缆之间交换单根光纤对的设备。模型与 API 变化FrontPort模型移除了rear_port与rear_port_position字段新增positions整数字段和rear_ports端口映射列表RearPort新增front_ports端口映射列表中间模型PortMapping定义于 netbox/dcim/models/device_components.py对应测试见 netbox/dcim/tests/test_port_mappings.py。配套修复还包括修正模块类型的前/后端口映射#21124、模块安装时复制前/后端口映射#21269、修复含前到后端口映射的模块导入#21683、修复 YAML 导出中缺失的端口映射#21704等。新特性五线缆画像Cable ProfilesCable线缆现在可以分配一个画像profile用于决定其在路径追踪path tracing中的处理方式#20788。画像描述了线缆两端之间承载的离散并行通道channel/lane数量。例如1 对 4 的 breakout 线缆有 4 条通道一端共用一个公共端接另一端分叉为四个独立端接12 芯 MPO 光纤线缆两端各一个连接器、含 6 个位置6 对双向光纤。分配画像后NetBox 能够更精确地追踪线缆内的特定连接而不是把整条线缆当作一个整体。画像分配是可选的——未分配画像的线缆其路径追踪行为与之前完全一致。源码级原理画像体系的基类BaseCableProfile定义于 netbox/dcim/cable_profiles.py核心概念a_connectors/b_connectors映射两端连接器到其呈现的位置数_mappingA/B 端连接器与位置的配对映射未定义时假定所有位置对称A 端 1:1 对应 B 端 1:1clean(cable)校验线缆两端端接数量不超过画像允许的上限get_mapped_position()/get_peer_termination()给定本地连接器与位置解析对端peer端接对象——这是画像驱动路径追踪的核心调用链。内置画像集合netbox/dcim/cable_profiles.py涵盖三类Single1 连接器到 1 连接器如Single1C1PCableProfile、Single1C4PCableProfile等支持 1/2/4/6/8/12/16 位置Trunk2 或 4 连接器到 2/4 连接器的多通道干线如Trunk2C8PCableProfile、Trunk4C4PCableProfileBreakout分叉型如Breakout1C4Px4C1PCableProfile、Breakout1C8Px8C1PCableProfile以及 v4.5.7 新增的1C2P:2C1Pbreakout 画像#21760Shuffle打乱光纤对的特殊映射如Trunk2C4PShuffleCableProfile、Breakout2C4Px8C1PShuffleCableProfile。画像选项集中定义在 netbox/dcim/choices.py 的CableProfileChoicesREST API 中dcim.Cable新增可选的profile选择字段见 netbox/dcim/api/serializers_/cables.py过滤器集也支持按画像过滤netbox/dcim/filtersets.py。相关测试见 netbox/dcim/tests/test_cable_profiles.py。该特性的配套修复包括修复基于画像的线缆追踪在单端承载多个位置时的解析#21653、修复通过干线画像连接的 rear port 链路对端解析#21917、修复批量编辑画像时端接点丢失#21618等。v4.5.0 其他增强与变更新增增强render_config权限渲染设备/虚拟机配置UI 与 API现在都需要该权限#16681、#20929虚拟机start_on_boot选择字段#18658对象/多对象类型自定义字段查询优化v4.5.2 起在请求生命周期内缓存自定义字段与 ObjectType 查找#21259、#21300v4.5.7 进一步优化其查询#21655设备/模块/机架类型实例计数缓存缓存实例数量并支持按计数过滤#19523REST API 中 Manufacturer 新增只读moduletype_count、ModuleType 新增module_count、RackType 新增rack_countOrganizationalModel子类新增可选comments字段#20925覆盖 CircuitGroup、CircuitType、VirtualCircuitType、InventoryItemRole、Manufacturer、RackRole、ASNRange、RIR、Role、VLANGroup、ContactRole、ClusterGroup、ClusterType、TunnelGroup 等模型设备类型电源插座新增可选color字段#20417PowerOutletTemplate 同步支持REST API?omit参数允许从响应中省略特定字段#21244GraphQL 游标分页#21110、GraphQL 中接口cabled过滤器#20172、按站点/位置/机架直接过滤设备组件与按位置/站点/站点组/区域过滤前缀#21142、#21018IP 地址分配 API 支持指定前缀长度/api/ipam/prefixes/id/available-ips/端点#21144数据源同步支持路径排除#21114通过 REST API 上传自定义脚本/api/extras/scripts/upload/#21701S3 存储、AVIF 图片、图片附件缩略图懒加载#21801、#21039、#21369、#20212、#20211。插件 API向插件开放PrimaryModel、OrganizationalModel、NestedGroupModel及其对应的各资源基类#13182引入全局基类BaseModel#20617对象视图开始从自定义 HTML 模板迁移到声明式布局#20204v4.5.9 修复了 VRF 等声明式布局视图的插件模板扩展#21913修复插件菜单项注册顺序无关性问题#21173与PluginMenuItem/PluginMenuButton的共享可变状态问题#20239。REST API 汇总除上述字段变化外注意/api/dcim/cable-terminations变为只读新增/api/authentication-check/端点用于测试 REST API 凭据users.Token新增enabled布尔字段virtualization.VirtualMachine新增start_on_boot选择字段dcim.FrontPort移除rear_port/rear_port_position新增positions与rear_portsdcim.RearPort新增front_ports。补丁版本要点v4.5.1 – v4.5.10v4.5 系列的补丁版本在特性、性能与稳定性上持续完善按主题归纳如下。性能优化Performance ImprovementsCSV 批量导出的 queryset 预取优化#21975保存对象时的标签分配优化#21330、避免 REST API 渲染未命名设备的过多查询#21402、用.exists()替代低效的.count()#21611为隐藏表格列跳过预取#21459、GraphQL 下配置上下文解析优化#21456REST API 创建/更新后预取关联对象#21263、ValidatedModelSerializer冗余唯一性检查消除#21302、序列化后缓存变更快照#21303、用get_by_natural_key()解析 ContentType#21327无事件规则时避免多余的 user 查询#21249、事件流水线延迟对象序列化#21260、ContentTypeFilter查询与 MPTT 索引恢复#21420、#21016、q过滤设备/VM 的 IP 时仅匹配主 IP#21196。接口速度与界面修复接口速度字段扩展为 64 位整数避免 LAG 接口超过约 2.1 Tbps 时溢出#21542并新增 50 Gbps、800 Gbps、1.6 Tbps 速度选项#21793新增 OSFP2241.6T接口类型#21480、2.5GBASE-X SFP 模块化接口类型#21727、10GBASE-CU 与 40GBASE-SR4 BiDi 接口类型#21394虚拟机资源单位改用 IEC 标签如 GiB#21095humanize_speed模板过滤器支持十进制 Gbps/Tbps#21795。自定义字段与对象变更日志排除不存在的自定义字段避免 REST API 返回的对象变更日志数据异常#21529修复 decimal 自定义字段值为零时显示为未设置#21518修复对象类型自定义字段选择 is empty 时的过滤#21535支持在过滤表单中同时按多个对象类型自定义字段过滤#21854。模块与线缆/端口模块支持按profile过滤#21711修复模块安装时的占位符值#20474、嵌套模块位置字段的{module}变量解析#20467、模块类型批量重命名#21134、模块类型 YAML 导出包含attribute_data#21115、安装模块时端口分配复制#21269修复电缆端接点在批量编辑画像时丢失#21618、电缆批量导入支持连接电源馈线#21783、清除端接后关联电缆路径同步清理#21127、PDU 内插座功率计算修正#21949。REST API / GraphQL修复缺少尾部斜杠的 POST/PATCH 请求异常#21906GraphQL 强制MAX_PAGE_SIZE限制#20385、整数范围过滤查找#20468、ID 过滤器比较查找#21097、32 位 ASN 过滤#21166、设备组件类型过滤字段名不一致#21512available-prefixes与 available-VLANs 端点请求体的 OpenAPI schema 修正#21658、#21966、cable_end字段可空标注#22084创建对象时 REST API 响应包含只读字段#21533job、object change、object type 端点支持fields参数#21139。变更日志与事件预变更快照覆盖更多场景集群成员通过 UI 添加#21277、关联对象#21550并避免多对多关系产生“空”变更记录#21390事件规则引用已删除对象不再触发服务器错误#21498EventRule.action_data校验为 JSON 对象#21989自定义脚本上传时避免将非法脚本写入磁盘#21737脚本“上次运行”时间以任务开始时间计#21814。界面与可用性设备视图中显示设备角色颜色#21430、机架设施 ID 显示#21481、设备类型详情面板#21268前端端口编辑表单恢复颜色字段#21985IP 地址视图上下文表面板启用横向滚动#22002暗色模式加载闪烁修复#20934、Microsoft Edge 表单焦点修复#20077、登录后语言偏好保留#20915“每页条数”分页设置从编辑表单返回后保留#19867接口视图 VLAN 表分页避免 100 条静默截断#21012。数据完整性与导入导出唯一可空字段的空字符串转 NULL避免完整性错误#22029修复编辑虚拟机时设备分配被误删#21990、connected状态过滤接口排除不完整线缆路径#22005从无租户/站点的 VLAN 添加前缀报错修复#22031修复联系人“add another”时唯一字段未清空#21995、嵌套组联系人计数#21538批量导入/更新时避免误清主/OOB IP 分配#21440、MAC 地址注释保存#21947、MAC 地址表is_primary列禁用排序#21651机架导入时缺少站点等可选字段的校验失败修复#21320。认证与令牌API_TOKEN_PEPPERS未定义时的ValueError修复#21117无效 API 令牌访问媒体文件时处理AuthenticationFailed#21181认证菜单项不再要求staff_only权限#21242。升级建议综合 v4.5 系列的变化升级前建议按以下清单检查运行环境确认 Python ≥ 3.12并核对 django-rqv4.5.7 支持 4.0等依赖版本新增必配参数在配置文件中添加API_TOKEN_PEPPERS至少一个 ID→随机字符串映射字符串 ≥ 50 字符否则无法创建 v2 令牌权限核查为需要渲染设备/VM 配置的用户授予render_config权限API 客户端适配检查所有使用/api/extras/object-types/、可写/api/dcim/cable-terminations/、model键 webhook 负载的集成代码将 GraphQL 中按 ID/枚举过滤的查询改写为{exact: ...}形式令牌迁移计划尽快切换到 v2 令牌Bearer 头、nbt_前缀因为 v1 令牌将在 v4.7 被移除数据模型影响平台配置上下文向下传播到子平台、前端端口映射模型重构rear_port/rear_port_position移除会直接影响依赖这些字段的脚本与插件。更多模型级细节可查阅 docs/models/dcim/cable.md、docs/models/dcim/frontport.md、docs/models/dcim/rearport.md、docs/models/users/token.md 与 docs/configuration/system.md整体升级流程参考 docs/installation/upgrading.md。 /output_article赞分享后端网络数据建模【免费下载链接】netboxThe premier source of truth powering network automation. Open source under Apache 2. Try NetBox Cloud free: https://netboxlabs.com/products/free-netbox-cloud/项目地址https://gitcode.com/gh_mirrors/ne/netbox点击查看免费下载相关推荐Mapster高效、有趣的对象映射工具Mapster高效、有趣的对象映射工具 项目基础介绍和主要编程语言 Mapster 是一个高效、有趣且刺激的对象到对象映射工具主要使用 C 编程语言开发。它后端Node.js 11.9.0 发布说明深度解读OpenSSL 1.1.1a 升级与发布流程解析Node.js 11.9.0 发布说明深度解读OpenSSL 1.1.1a 升级与发布流程解析 本文以 nodejs.org 官方仓库中的 v11.9.0 发前端文档RATH API参考文档所有服务端接口的详细说明RATH API参考文档所有服务端接口的详细说明 RATH是一个强大的开源数据分析平台提供完整的API接口集支持因果发现、数据连接、预测分析和文本模式提取数据分析数据可视化BI机器学习上一篇Consul服务升级全指南从原理到实践下一篇AudioGen文本引导的环境音效生成实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考