如何桥接运行 dhcp 服务器的以太网接口

如何桥接运行 dhcp 服务器的以太网接口

工作站具有eth0作为 dhcp 服务器运行的接口,具有以下设置

auto eth0
  iface eth0 inet static
  network 10.0.0.0
  address 10.0.0.1
  netmask 255.0.0.0
  gateway 10.0.0.1
  broadcast 0.255.255.255

/etc/dhcp/dhcpd.conf

default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;

  
subnet 10.0.0.0 netmask 255.0.0.0 {
    range 10.0.0.1 10.0.0.254;
    option time-servers 10.0.0.1;
    option broadcast-address 10.255.255.255;
    default-lease-time 600;
    max-lease-time 7200;
}

是否可以在eth0不更改任何 DHCP 配置设置的情况下创建桥接,以便在 QEMU 中创建的任何计算机都在 DHCP 服务器给出的定义的 NIC 上分配一个 IP 地址

工作站连接到交换机,其他计算机也连接到交换机,目标是能够使用 IP 地址从网络上的其他计算机访问虚拟机10.0.0.X

答案1

最简单的方法是将初始接口定义为桥接器。例如,删除iface eth0 ...中的定义/etc/network/interfaces,将其替换为 的定义iface br0

auto br0
iface br0 inet static
  address 10.0.0.1/8
  bridge_ports eth0
  bridge_stp off
  bridge_maxwait 0
  bridge_fd 0
  bridge_hello 2
  bridge_maxage 12

完成后,您必须将虚拟机配置为使用桥接网络br0

您将不再在 上拥有您的 IP 地址eth0。它/它们将会打开br0。这相对不重要,并且很少对任何事情产生任何影响 - 仅适用于关心接口名称的程序。大多数不会,但有些会...例如某些守护进程(例如dhcpdarpwatch),或者在运行时tcpdump您需要使用tcpdump -i br0而不是tcpdump -i eth0. dhclient当然,也是如此,但是您不应该在运行 dhcp 服务器的同一接口和计算机上运行 dhcp 客户端。无论如何,这些都需要重新配置才能使用br0

如果您的 dhcp 服务器与工作站是同一台计算机,您还需要配置dhcpd为使用br0而不是eth0.

您似乎正在运行 Debian(或 Debian 的衍生版本),因此您可以在/etc/default/isc-dhcp-server.例如,我有以下内容,用于监听 br0(用于虚拟机和 LAN 上的物理主机)和无线接口 wlan0(用于手机、笔记本电脑、平板电脑等):

INTERFACESv4="br0 wlan0"

您需要重新启动或使用类似 的命令重新启动 eth0/br0 的网络ifdown eth0 ; sleep 5; ifup br0。如果您要重复执行此操作ssh或类似操作,请将其作为一个命令行运行非常重要,否则当 eth0 关闭时您将无法启动 br0。之所以sleep 5存在,是因为我发现在关闭 iface 和将其重新启动之间等待几秒钟是很好的。

一些网络守护进程在 eth0 消失后需要重新启动 - 如果您有很多守护进程在 eth0 上侦听,那么重新启动可能比重新启动所有守护进程更容易。

答案2

当您指定 VM 是 KVM/qemu 时,您最好从 qemu 网络开始。有 3 种变体:1) 用户,2) 点击,3) 直通。

  1. -netdev user,- 意味着默认情况下,VM guest 虚拟机在私有 IP 范围子网 10.0.2.0/24 内完全隔离,并且集成的 qemu-DHCP 服务器为您的 VM 接口提供 IP:10.0.2.15 地址。该子网通过 NAT 防火墙连接到主机接口,您可以在启动时启用/禁用防火墙。即使启用,您也不能简单地从外部连接虚拟机,除非您使用参数启用端口转发:

-netdev user,id=n0,hostfwd=hostip:hostport-guestip:guestport

  1. -netdev tap,让您有机会通过 [tap] - [br0 桥] - [eth0 主机接口] 连接 VM eth0 接口。这里您需要考虑到,在主机级别您必须配置 br0 接口而不是主机 eth0。没有为虚拟机提供默认 IP,因此您必须以通常的方式配置它。如果您还想连接在同一主机上运行的更多虚拟机,并且没有限制相互查看来自虚拟机的所有端口以及从盒子外部查看所有端口,那么这非常有用。

  2. passthrough 是最终的变体,它基于将 PCI 网卡的完全控制权传递给 VM 的可能性。这不是简单的配置,您可以在一些教程示例中找到它。这完全使该卡脱离了主机内核的控制,如果您需要主机的网络连接,您的主机必须至少有两个网卡。

我的建议:首先要考虑使用虚拟机网络的目标。如果您仅需要将虚拟机用于客户端,或者您计划仅使用某些服务器服务的单个开放端口,则 -netdev 用户是最简单的方法,而主机 DHCP 服务器已过时。如果您计划更复杂地使用虚拟机或互连同一主机上运行的更多虚拟机,那么 TAP 是正确的选择。对于完全隔离的 VM,请使用 NIC 直通。

PS 是的,我没有注意到,-netdev socket,但它不是用于连接开箱即用的虚拟机,而是用于在单个主机内互连更多虚拟机。

相关内容