我有一台 Ubuntu 机器,上面创建了四个 VLAN,分别是eth0.100
、eth0.200
和。我想使用 DHCP 服务器动态获取 IP 地址。它应该从不同的 IP 地址范围中提供一个 IP,eth0.300
即eth0.400
for VLAN interface eth0.100,--> 192.168.0.20 - 192.168.0.40
for VLAN interface eth0.200 --> 192.168.0.50 - 192.168.0.70
for eth0.300 and eth0.400 --> likewise
我该如何实现这一点?如何读取请求 IP 地址的接口的 VLAN ID?如何将有关客户端上运行的 VLAN 的信息传达给 DHCP 服务器?
我认为我也应该在 DHCP 服务器上创建 VLAN 接口。如果这样做,如何让 DHCP 服务器知道 VLAN 的存在?
我陷入了困境。我该怎么办?
答案1
VLAN 是第 2 层功能,而 IP/DHCP 是第 3 层功能,我只是想说清楚这一点,但在这种情况下,它们彼此之间有很大关系。
基本上,您真正需要做的就是确保您的 L2/3 交换机/路由器配置为允许您的 DHCP 服务器不仅路由到/从所有 VLAN,而且还提供“DHCP Helper”服务,以便所有 VLAN 中的所有客户端在发出 DHCP 请求时都引用它。在 Cisco L2/3 设备上,“dhcp helper”命令可配置此功能。
一旦完成,任何 VLAN 上的任何机器都可以通过 DHCP 请求地址,并且该请求将被正确路由到 DHCP 服务器,如果配置正确,DHCP 服务器将返回适当的地址。
它实现的方式是这样的(老实说,这更多是为了供其他人将来参考);
- 客户端从自身发送一个 DHCP 广播,范围为 0.0.0.0 到 255.255.255.255(或 NM 给出的任何内容),其中包含其 MAC 地址,请求 IP。
- 如果您的 L2/3 交换机/路由器配置为充当 DHCP 助手,则会查看广播进入的接口,检查其 DHCP 助手列表以找出将请求发送到的位置,然后将其发送到该 DHCP 服务器,但这次作为包含每个网段/VLAN 都有自己的网关IP 地址(即客户端路由通过的可能 DG),但保留客户端计算机的 MAC,以便 DHCP 服务器可以应用客户端特定的设置(如保留等)。这样做是为了让 DHCP 服务器知道要为哪个网络发出地址,以及如何将其返回到 L2/3 交换机/路由器。
- DHCP 服务器从 L2/3 交换机/路由器获取此单播请求,发现它来自某个网络,如果它具有为此定义的范围并且有一个空闲或保留的(因为它知道客户端的 MAC)地址,则它会通过单播将发出的 IP 发送回 L2/3 交换机/路由器(它知道其 IP 记住) - 以及任何特定于客户端的设置。
- L2/3 交换机/路由器接收来自 DHCP 服务器的响应,并通过将 IP 地址更改为客户端的 IP 地址将其传递给客户端 - 这将包括任何特定于客户端的设置。
明白了吗?
重点是 DHCP 服务器不需要知道任何事物关于 L2 网络/VLAN 的全部信息 - 仅关于 L3 网络和匹配范围。
答案2
您的网络似乎本质上有点非 cidr。这将使路由难以处理。如果您想为整个网络使用一个 /24 并将其分成 4 个 vlan 网络,那么每个网络都应该是 /26。
这意味着您的网络将会看起来像这样。
- VLAN 100 192.168.0.0/26
- VLAN 200 192.168.0.64/26
- VLAN 300 192.168.0.128/26
- VLAN 400 192.168.0.192/26
对于 DHCP 服务器,您还需要在每个 VLAN 上为其设置接口。并且连接到这两个服务器的交换机上的端口必须是中继端口。至于设置 DHCP 服务器以使用不同的接口,我们需要知道您计划使用什么操作系统和 DHCP 服务器,以帮助您解决任何具体问题。但一般来说,如果 DHCPD 正在监听的每个接口在给定网络中都有一个 ip 地址,它将从与该网络关联的池中返回一个 ip 地址。