已发表的技术专栏(订阅即可观看所有专栏)
0 grpc-go、protobuf、multus-cni 技术专栏 总入口
1 grpc-go 源码剖析与实战 文章目录
2 Protobuf介绍与实战 图文专栏 文章目录
3 multus-cni 文章目录(k8s多网络实现方案)
4 grpc、oauth2、openssl、双向认证、单向认证等专栏文章目录
本篇文章介绍一下,使用
github.com/vishvananda/netlink
来操作tun设备
1、安装github.com/vishvananda/netlink |
go get github.com/vishvananda/netlink
2、源代码如下 |
代码如下:
package main
import (
"github.com/vishvananda/netlink"
)
const tunName = "tun19"
func main() {
la := netlink.LinkAttrs{
Name: tunName,
Index: 8,
MTU: 1500,
}
tun := netlink.Tuntap{
LinkAttrs: la,
Mode: netlink.TUNTAP_MODE_TUN,
}
l, err := netlink.LinkByName(tunName)
if err == nil {
// 先将tun虚拟网络设备Down掉
netlink.LinkSetDown(l)
// 将tun虚拟网络设备删掉
netlink.LinkDel(l)
}
// 每次创建新的tun设备
err = netlink.LinkAdd(&tun)
if err != nil {
panic(err)
}
l, err = netlink.LinkByName(tunName)
ip, err := netlink.ParseIPNet("10.244.1.3/24")
addr := &netlink.Addr{IPNet: ip, Label: ""}
if err = netlink.AddrAdd(l, addr); err != nil {
panic(err)
}
err = netlink.LinkSetUp(l)
if err != nil {
panic(err)
}
}
3、本地编译 |
编译运行,上传到测试服务器上
为了多次测试运行方便,提供了
Makefile文件
具体内容如下:
build:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
scp:
scp main root@10.211.55.122:/root
all:
make build && make scp
4、登录到测试服务器上 |
ip a s eth0
ip link sh tun19
./main
ip link sh tun19
ethtool -i tun19