You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Linux中配置KVM使用路由器的DHCP服务

如何在Linux中配置KVM使用路由器的DHCP服务

嘿,刚接触KVM的话,这个问题确实容易搞混,我来一步步帮你搞定,让你的VM用上路由器的DHCP服务~

首先得明白:你现在用的是KVM默认的NAT网络模式,这种模式下KVM会自己创建一个虚拟网桥virbr0,并运行本地DHCP服务,所以VM只能拿到192.168.122.x段的IP。要用上路由器的DHCP,我们需要把KVM网络改成桥接模式——相当于把VM的网卡直接“接”到你的物理网络里,这样路由器就能直接给VM分配IP了。

第一步:在系统层面创建桥接设备

首先得在你的Linux主机上创建一个桥接接口,把物理网卡和这个桥接接口绑定:

  • 先查看你的物理网卡名称,执行命令:
    ip link show
    
    输出里类似enp0s3或者eth0的就是你的物理网卡(选那个连接着路由器的网卡)。
  • 用NetworkManager命令创建桥接(适合大多数发行版):
    • 创建桥接设备br0
      sudo nmcli con add type bridge ifname br0
      
    • (可选)关闭桥接的STP协议(如果你的网络不需要的话):
      sudo nmcli con modify br0 bridge.stp no
      
    • 把物理网卡加到桥接设备里:
      sudo nmcli con add type bridge-slave ifname 你的物理网卡名 master br0
      
    • 停用原来的物理网卡连接:
      sudo nmcli con down 你的物理网卡名
      
    • 启用桥接连接:
      sudo nmcli con up br0
      
  • 验证桥接是否正常:执行ip addr show br0,你应该能看到桥接设备拿到了路由器分配的192.168.100.x段的IP。

第二步:修改KVM默认网络为桥接模式

接下来修改KVM的默认网络配置,让它使用我们刚创建的桥接设备:

  • 先备份原来的配置文件,以防出错:
    sudo cp /etc/libvirt/qemu/networks/default.xml /etc/libvirt/qemu/networks/default.xml.bak
    
  • 停止当前的默认NAT网络:
    sudo virsh net-destroy default
    
  • 编辑默认网络的XML文件:
    sudo nano /etc/libvirt/qemu/networks/default.xml
    
    把原来的内容替换成下面的配置(保留你的UUID,不用改):
    <network>
      <name>default</name>
      <uuid>21f9eef3-c1ac-49a1-b413-574011a2c4d5</uuid>
      <forward mode="bridge"/>
      <bridge name="br0"/>
    </network>
    
    这里核心是把<forward mode='nat'/>改成<forward mode="bridge"/>,并指定桥接设备为br0,同时删掉原来的<ip><dhcp>段(因为现在用路由器的DHCP了)。
  • 重新定义并启动默认网络:
    sudo virsh net-define /etc/libvirt/qemu/networks/default.xml
    sudo virsh net-start default
    sudo virsh net-autostart default
    

第三步:修改现有虚拟机的网卡配置

如果你已经有像plutokali这样的虚拟机,需要把它们的网卡改成桥接模式:

  • 先关闭目标虚拟机:
    sudo virsh shutdown pluto
    
  • 编辑虚拟机的XML配置:
    sudo virsh edit pluto
    
  • 找到原来的<interface>段(大概是这样的):
    <interface type='network'>
      <mac address='52:54:00:05:d8:ba'/>
      <source network='default'/>
      <model type='virtio'/>
    </interface>
    
    把它替换成你看到的桥接配置(保留原来的MAC地址,避免冲突):
    <interface type='bridge'>
      <mac address='52:54:00:05:d8:ba'/>
      <source bridge='br0'/>
      <model type='e1000e'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>
    
  • 保存退出后,启动虚拟机:
    sudo virsh start pluto
    
  • 进入虚拟机后,执行ip addr就能看到它拿到了路由器分配的192.168.100.x段的IP啦~

备注:内容来源于stack exchange,提问作者Joao Henrique da Silva

火山引擎 最新活动