IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Ubuntu2204创建KVM桥接网络

    chancel发表于 2023-04-23 00:00:00
    love 0
    <![CDATA[

    1. 简介

    KVM (Kernel-based Virtual Machine) 是一种开源虚拟化技术,它是 Linux 内核的一部分。KVM 能够将 Linux 系统转化为一个 hypervisor,允许多个虚拟机在同一台物理服务器上运行。KVM 可以在 x86 架构的服务器上运行,并支持多种操作系统,包括 Linux、Windows、BSD 等,KVM 提供了高性能、安全性和可扩展性。

    2. 实践

    2.1. 初始化

    安装Ubuntu2204后,安装KVM软件

    sudo apt update
    sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    sudo systemctl enable libvirtd
    sudo systemctl start libvirtd
    

    查看当前网络配置,网络配置文件位于 /etc/netplan/00-installer-config.yaml,内容参考如下

    network:
      ethernets:
        eno1: # 这是我的物理网卡,通过`ip a`可以确认,这里配置静态IPV4和动态IPV6
          dhcp4: no
          dhcp6: yes
      bridges:
        virbr1: # 创建一个桥接网卡,设置IP与DNS
          dhcp4: no
          addresses: [192.168.1.100/24]   
          nameservers:
            addresses: 
              - 114.114.114.114
          routes: # Ubuntu2204取消了Gateway4的写法,采用路由写法,`192.168.1.1` 是我的网关(路由器)
            - to: default
              via: 192.168.1.1
              on-link: true
          interfaces: [eno1] # 桥接到我的物理网卡
    

    使上述配置生效

    sudo netplan apply --debug
    

    以下是检查桥接网络的方法(来自fabianlee.org)

    # 查看所有桥接状态
    sudo networkctl -a
    # 查看virbr1状态
    sudo networkctl status virbr1
    # 显示所有桥接信息
    brctl show
    # 查看virbr1的网络信息
    ip a show virbr1
    

    此时你的网络配置看起来应该类似如下,virbr1即我们配置的桥接网卡

    ➜  netplan ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr1 state UP group default qlen 1000
        link/ether 1c:69:7a:0c:a5:be brd ff:ff:ff:ff:ff:ff
        altname enp0s31f6
    3: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
        link/ether 72:de:2b:99:77:26 brd ff:ff:ff:ff:ff:ff
        inet 192.168.1.100/24 brd 192.168.1.255 scope global virbr1
           valid_lft forever preferred_lft forever
    

    2.2. 网络配置

    确认virbr1信息正常后,我们开始创建KVM的桥接网络配置,首先是编辑 /tmp/host-bridge.xml 文件,文件内容如下

    <network>
      <name>host-bridge</name>
      <forward mode="bridge"/>
      <bridge name="virbr1"/>
    </network>
    

    让kvm读取这个文件作为网络配置

    virsh net-define /tmp/host-bridge.xml
    virsh net-start host-bridge
    virsh net-autostart host-bridge
    

    检查是否设置成功,检查方法如下,请确保Autostart和State输出正常

    ➜ sudo virsh net-list --all 
     Name          State      Autostart   Persistent
    ----------------------------------------------- host-bridge   active     yes         yes
    

    再修改 /etc/sysctl.conf文件,添加允许ipv4转发,如下

    net.ipv4.ip_forward=1
    

    让上述ipv4转发设置生效

    sudo sysctl -p
    

    KVM的桥接网络便配置结束

    2.3. 创建虚拟机

    创建一个Alpine3.16操作系统的虚拟机,附带VNC远程,创建指令如下

    sudo virt-install \
        -n Alpine3.16 \
        --description "Test VM with Alpine3.16" \
        --os-type=Linux \
        --os-variant=Alpine3.16 \
        --ram=512 \
        --vcpus=2 \
        --disk path=/var/lib/libvirt/images/Alpine3.16.img,bus=virtio,size=64 \
        --graphics vnc,listen=127.0.0.1 --noautoconsole \
        --cdrom /var/lib/libvirt/images/Alpine3.16.iso
    

    通过VNC+SSH隧道的方式连接到这个虚拟机,顺利完成安装,安装完成先关机,再编辑虚拟机的配置文件

    sudo virsh edit Alpine3.16
    

    添加如下部分配置

    <interface type='network'>
        <source network='host-bridge'/>
        <model type='virtio'/>
        <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    

    2.4. 检查

    配置Alpine3.16静态IP为192.168.1.101,访问192.168.1.1没有问题则表示桥接网络配置成功

    3. 结尾

    参考资料

    • https://fabianlee.org/2022/09/20/kvm-creating-a-bridged-network-with-netplan-on-ubuntu-22-04/



沪ICP备19023445号-2号
友情链接