golang 的 netlink 包对 ip命令做了封装可能方便的实现创建vxlan
直接贴代码
func createVxlan() {
fmt.Println("多播方式 -i= 指数据从哪个接口传输 -h 指定VTEP端点ip")
i := flag.Int("i", 2, "-i= 指数据从哪个接口传输")
h := flag.String("h", "", "指定VTEP端点ip 无类型ip")
flag.Parse()
fmt.Println("端口index: ", *i)
fmt.Println("ip地址:", *h)
attrs := netlink.NewLinkAttrs()
attrs.Name = "vxlan0"
attrs.MTU = 1600
//构建一个vxlan 结构体
//以下配置方式类似命令 ip link add vxlan0 type vxlan id 4100 group 224.1.1.1 dstport 4789 dev enp0s3
vxlan := &netlink.Vxlan{
LinkAttrs: attrs, //可以配置 VTEP端点的信息 例如名字 MTU
VxlanId: 4100, //指定 VNI
Group: net.IPv4(224, 1, 1, 1), //配置多播ip
Port: 4789, //指定端口
VtepDevIndex: *i, //代表 VXLAN 数据从哪个接口传输 使用 ip link show 可以看到对应的ip
}
netlink.LinkAdd(vxlan)
netlink.LinkSetUp(vxlan)
addr, _ := netlink.ParseAddr(*h)
netlink.AddrAdd(vxlan, addr) //给vxlan VTEP 网桥配置ip
}
使用 go build 后可以在局域网内的主机上执行