IP地址管理
IP 地址管理是 IPAM 系统的核心功能,提供完整的 IP 地址生命周期管理,包括分配、监控、扫描等功能。
IP 地址生命周期
IP 地址在系统中经历以下生命周期状态:
未分配 (unallocated) → 预分配 (preallocated) → 已分配 (allocated)
↓
回收 → 未分配状态说明
| 状态 | 说明 | 可转移状态 |
|---|---|---|
| 未分配 | IP 地址尚未分配使用 | 预分配、已分配 |
| 预分配 | IP 地址已预留,待正式使用 | 已分配、未分配 |
| 已分配 | IP 地址已正式分配使用 | 未分配 |
IP 地址分配
分配方式
- 手动分配:管理员手动指定 IP 地址进行分配
- 自动分配:系统自动选择可用的 IP 地址
- 批量分配:一次性分配多个 IP 地址
分配信息
分配 IP 地址时需要填写以下信息:
go
type IPAddress struct {
IP string // IP地址
Hostname string // 主机名
Description string // 描述
AllocationStatus string // 分配状态
ProjectID *int // 所属项目
DepartmentID *int // 所属部门
UnitID *int // 所属单位
UserContactID *int // 使用人
MacAddress string // 手动记录的MAC地址
CustomFields JSON // 自定义字段
}自动部门绑定
当 IP 绑定到项目时,系统自动:
- 获取项目所属的部门 ID
- 获取项目所属的单位 ID
- 自动设置 IP 的部门 ID 和单位 ID
- 确保组织归属一致性
在线状态监控
系统实时监控 IP 地址的在线状态。
监控机制
- Ping 检测:定期 ping IP 地址检测在线状态
- 状态记录:记录 IP 的最后在线时间
- 状态变更:在线状态变化时自动更新
- 历史记录:保留状态变更历史
状态字段
go
type IPAddress struct {
IsOnline bool // 在线状态
Status string // 使用状态(unused/used)
LastSeen time.Time // 最后在线时间
}监控配置
在配置文件中设置监控参数:
toml
[monitoring]
enabled = true
interval = 300 # 监控间隔(秒)
max_concurrent = 100 # 最大并发数MAC 地址管理
系统支持手动记录和自动扫描两种方式获取 MAC 地址。
手动记录
管理员可以手动输入 MAC 地址:
- 格式验证:自动验证 MAC 地址格式(xx:xx:xx:xx:xx:xx)
- 唯一性检查:检查 MAC 地址是否已被使用
- 批量编辑:支持批量修改 MAC 地址
自动扫描
系统通过 ARP 扫描自动发现 MAC 地址:
go
// MAC 扫描结果
type MACResult struct {
IP string // IP地址
MACAddress string // MAC地址
Timestamp time.Time // 扫描时间
}扫描流程:
- 发现阶段:发送 ARP 请求发现网络设备
- 记录阶段:记录发现的 MAC 地址
- 更新阶段:更新 IP 地址的扫描 MAC 地址字段
- 对比阶段:对比手动记录和扫描结果
MAC 地址字段
go
type IPAddress struct {
MacAddress string // 手动记录的MAC地址
ScannedMacAddress string // 扫描获取的MAC地址
}IP 地址查询
系统提供灵活的 IP 地址查询功能。
查询条件
- IP 地址:精确查询或模糊查询
- 子网:按子网筛选
- 状态:按分配状态筛选
- 在线状态:按在线状态筛选
- 组织归属:按单位、部门、项目筛选
- 使用人:按使用人筛选
- MAC 地址:按 MAC 地址查询
- 自定义字段:按自定义字段值查询
查询示例
GET /api/ip-addresses?
subnet_id=1&
allocation_status=allocated&
is_online=true&
department_id=2&
page=1&
page_size=20IP 地址统计
系统提供多维度的 IP 地址统计信息。
统计维度
- 子网统计:子网内 IP 总数、已分配数、使用率
- 部门统计:各部门的 IP 使用情况
- 项目统计:各项目的 IP 使用情况
- 状态统计:各状态(未分配/预分配/已分配)的数量
- 在线统计:在线/离线 IP 数量
统计报表
json
{
"total_ips": 254,
"allocated": 120,
"preallocated": 30,
"unallocated": 104,
"online": 98,
"offline": 56,
"usage_rate": "47.2%"
}批量操作
批量分配
一次性分配多个 IP 地址给同一项目:
- 选择 IP 地址范围
- 指定项目和部门
- 填写共同信息(主机名前缀、描述等)
- 执行批量分配
批量释放
批量释放不再使用的 IP 地址:
- 选择要释放的 IP 地址
- 确认释放操作
- 系统重置 IP 状态为"未分配"
- 清空组织和项目关联
批量修改
批量修改 IP 地址的属性:
- 修改所属项目
- 修改使用人
- 修改描述信息
- 修改自定义字段
API 接口
IP 地址管理接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/ip-addresses | 获取 IP 列表 |
| GET | /api/ip-addresses/:id | 获取 IP 详情 |
| POST | /api/ip-addresses | 创建 IP 地址 |
| PUT | /api/ip-addresses/:id | 更新 IP 地址 |
| DELETE | /api/ip-addresses/:id | 删除 IP 地址 |
| PUT | /api/ip-addresses/:id/allocate | 分配 IP |
| PUT | /api/ip-addresses/:id/release | 释放 IP |
查询接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /api/ip-addresses/stats | 获取统计信息 |
| GET | /api/ip-addresses/available | 获取可用 IP |
| POST | /api/ip-addresses/batch-allocate | 批量分配 |
| POST | /api/ip-addresses/batch-release | 批量释放 |
最佳实践
IP 分配策略
- 预留空间:为未来发展预留足够的 IP 地址
- 按功能分组:不同功能使用不同的 IP 段
- 文档记录:详细记录每个 IP 的用途
- 定期清理:定期回收不再使用的 IP
监控策略
- 合理设置间隔:根据网络规模设置监控间隔
- 关注异常:及时处理长期离线的 IP
- 对比检查:定期对比手动和扫描的 MAC 地址
- 告警设置:对关键 IP 设置离线告警
安全建议
- 访问控制:限制 IP 管理权限
- 操作审计:记录所有 IP 操作日志
- 变更通知:IP 变更时通知相关人员
- 备份恢复:定期备份 IP 数据