过去几天,我一直在研究如何在同一网络中设置两个不同的 IP 范围,它们仅用作快速标识符。硬件方面,我有以下几点:
- 各种个人设备,我将其称为 A 组。它们的地址为 192.168.0.1/24 子网。
- 一台以前的台式电脑,一旦准备就绪,将成为实际用例,但现在正在我的个人电脑上运行的虚拟机上测试网络配置。这是在 Hyper-V 上运行的 Fedora Server 38,使用桥接虚拟交换机,以便在网络上显示为自己的设备。在这两种情况下,它们正在或将运行各种容器(通过 Podman)和虚拟机(通过 libvirt)的组合。我将机器/虚拟机及其自己的容器/虚拟机称为 B 组。我希望每个容器和虚拟机都作为单独的客户端出现在网络上,并在 192.168.100.1/24 子网上进行寻址。
- 一个非常简单的旧路由器(TP-Link Archer C9),设置在 192.168.0.1。
我所要做的就是让 B 组中的机器在网络上显示为自己的机器,但与 A 组中的机器处于不同的 IP 范围内,这只是为了快速识别。到目前为止,我可以完成以下任务:
- B 组主机通过分配静态 IP 超出个人设备的 DHCP 范围。
- 使用 macvlan 网络的容器将直接以自己的 IP 地址出现在网络中
- 使用桥接虚拟网络的虚拟机将直接出现在网络中,并拥有自己的 IP 地址
但是,对于容器和虚拟机的 IP 地址,它们将使用路由器上配置的 DHCP,这将为它们分配与 A 组相同的 IP 地址范围 (192.168.0.100-192.168.0.199)。我更希望它们使用不同的 IP 地址 (例如 192.168.100.100-192.168.100-199),只是为了在语义上将两者区分开来。
我尝试了各种各样的方法,也做了大量的研究,但都遇到了障碍,因为这似乎不是一种常见或值得的场景——我对使用 VLAN 隔离网络或购买额外硬件不感兴趣(如果真的要这么做,我只想让所有东西都在同一子网中)。从我的研究中,我大致收集了以下信息,这些信息可能与设置有关,也可能无关:
我可以在路由器上设置静态路由,这样属于某个子网(例如 192.168.100.1/24)的 IP 地址将使用特定网关。我想这应该配置为指向代表 B 组的机器的 IP 地址,我已经这样做了?我必须在代表 B 组子网的 B 组机器上设置一个 DHCP 服务器吗?我需要配置 Podman 和 libvirt 虚拟网络以使用 B 组机器作为网关和 DHCP 服务器?- dnsmasq 和 dhcpd 都支持基于标准的不同 DHCP 选项 - dnsmasq 带有标签,而 dhcpd 带有类
- 理论上,我希望使用 DHCP 选项 60(供应商类别标识符)从 Podman 和 VM 发送出去,以唯一地标识这些请求并为它们分配不同的 IP 范围
- 理论上,Podman 的 macvlan 网络应该使用主机的 DHCP 设置(通过 netavark 的 dhcp-proxy),但在实践中,这似乎不起作用。也就是说,如果我将主机配置为在其自己的请求中发送供应商类标识符,macvlan 网络上的 Podman 容器似乎不会遵守这一点。
- 我可以直接配置虚拟机以发送供应商类别标识符,但理想情况下,我希望为使用给定网桥的所有虚拟机配置该标识符。不过,在网桥上配置它似乎对全局虚拟机不起作用。
此时,我尝试了各种各样的方法,我完全忘记我到底做了什么和尝试了什么,除了没有完全奏效。容器和虚拟机似乎在 B 组子网中有一个 IP,但无法以任何方式访问(无论是通过主机组 B 机器还是网络中的其他机器),或者它们一开始就无法租用 IP,或者它们最终只是使用 A 组子网。(与将精力集中在请求中发送的 DHCP 选项而不是两个不同的 DHCP 服务器上无关。)
考虑到手头的硬件,这是否可以开始?我知道这没有实际用途,因为我不打算进行任何网络隔离,我只是认为它看起来很整洁。