DHCP自动给网络里的设备分配 IP 地址和相关的网络配置,而不是让你手动去设置。
在 OpenStack 里,DHCP 的作用和原理跟传统网络类似,但它是由 Neutron(网络服务组件)来实现的,并且依赖一个专门的代理:neutron-dhcp-agent。
1. OpenStack 里的 DHCP 是干嘛的?
在虚拟机(VM)启动时,需要自动获取 IP、网关、DNS 等网络信息。
这些信息不是手动配置的,而是 由 DHCP agent 在后台动态分配。
- 它给虚拟机分配固定或动态的 IP(来自子网的 IP 池)。
- 它会下发网关地址、DNS 地址。
- 它还能保证同一个 VM 重启后拿到相同的 IP(如果是 DHCP 保留)。
2. 它是怎么实现的?
- DHCP agent 本质上是运行在宿主机上的服务,它会为每个虚拟网络子网启动一个 dnsmasq 进程。
dnsmasq
就是一个轻量的 DHCP+DNS 服务,用来给虚拟机分配 IP。- 当虚拟机接入某个 Neutron 子网时,它会发送 DHCP Discover 广播,Open vSwitch/OVN 会把这个请求转发给对应子网的 dnsmasq,再由它分配地址。
3. 相关命令
你可以用 OpenStack CLI 查看 DHCP 的分配情况:
- 查看子网的 DHCP 是否启用:
openstack subnet show <subnet-id> -c enable_dhcp
- 查看 DHCP agent:
openstack network agent list --agent-type dhcp
- 查看某个网络绑定在哪些 DHCP agent 上:
openstack network agent list --network <network-id>
4. 特点
- 分布式:每个网络可能会在不同的 DHCP agent 上启动进程。
- 高可用:多个 DHCP agent 可以同时为同一个子网服务,避免单点故障。
- 隔离性:不同租户的 DHCP 服务互相隔离,互不影响。