在 libvirt 中创建网络时,可以手动配置 IPv4 子网、网关、IPv6 子网和网关,也可以让 libvirt 自动分配。如果不手动配置,libvirt 将根据默认配置自动分配。

以下是使用 Golang 调用 libvirtxml.Network 结构体创建网络的示例:

package main

import (
	"fmt"
	"github.com/libvirt/libvirt-go"
	libvirtxml "github.com/libvirt/libvirt-go-xml"
)

func main() {
	conn, err := libvirt.NewConnect("qemu:///system")
	if err != nil {
		fmt.Println("Failed to connect to libvirt:", err)
		return
	}
	defer conn.Close()

	// 创建一个 libvirtxml.Network 结构体实例
	network := libvirtxml.Network{
		Name: "example_network",
		Bridge: &libvirtxml.NetworkBridge{
			Name: "virbr0",
		},
		Forward: &libvirtxml.NetworkForward{
			Mode: "nat",
		},
	}

	// 设置 IPv4 子网和网关
	network.IPv4 = &libvirtxml.NetworkIPv4{
		Addresses: []libvirtxml.NetworkIPv4Address{
			{
				IP:      "192.168.122.0",
				Netmask: "255.255.255.0",
			},
		},
		DHCP: &libvirtxml.NetworkDHCP{
			Ranges: []libvirtxml.NetworkDHCPRange{
				{
					Start: "192.168.122.2",
					End:   "192.168.122.254",
				},
			},
		},
	}

	// 设置 IPv6 子网和网关
	network.IPv6 = &libvirtxml.NetworkIPv6{
		Addresses: []libvirtxml.NetworkIPv6Address{
			{
				IP:      "2001:db8::",
				Prefix:  "64",
			},
		},
		DHCP: &libvirtxml.NetworkDHCP{
			Ranges: []libvirtxml.NetworkDHCPRange{
				{
					Start: "2001:db8::2",
					End:   "2001:db8::ffff:ffff:ffff:ffff",
				},
			},
		},
	}

	// 将 libvirtxml.Network 结构体转换为 XML 格式
	xml, err := network.Marshal()
	if err != nil {
		fmt.Println("Failed to marshal network XML:", err)
		return
	}

	// 创建网络
	net, err := conn.NetworkDefineXML(xml)
	if err != nil {
		fmt.Println("Failed to define network:", err)
		return
	}

	// 启动网络
	err = net.Create()
	if err != nil {
		fmt.Println("Failed to start network:", err)
		return
	}

	fmt.Println("Network created and started successfully.")
}

请根据您的实际需求修改 IPv4 和 IPv6 的子网、网关、DHCP 范围等参数。

Libvirt 网络配置:IPv4/IPv6 子网、网关和自动分配

原文地址: https://www.cveoy.top/t/topic/fC8r 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录