前言
今天在 Rock Linux 9 系统下配置 Tap 网卡,使用常规的例如 ip tuntap
指令手动创建的 Tap 网卡都只在当前有效,系统重启后并不会自动创建;所以还是要想办法由 NetworkManager
来管理和创建 Tap 网卡,才能保证在系统启动时自动创建和激活 Tap 网卡;
网上找的好多教程,包括问 GPT 给出的方案都是如下直接通过如下 nmcli
指令创建一个类型为 Tap 的网络接口;
nmcli connection add type tap ifname tap0 con-name tap0
但在目前较新版本的 NetworkManager(1.42.2)版本下,这条命令会报如下的错误信息,提示不支持创建 tap 类型的连接
错误:错误的连接类型:"tap" 不在 [6lowpan, 802-11-olpc-mesh (olpc-mesh), 802-11-wireless (wifi), 802-3-ethernet (ethernet), adsl, bluetooth, bond, bridge, cdma, dummy, generic, gsm, hsr, infiniband, ip-tunnel, loopback, macsec, macvlan, ovs-bridge, ovs-dpdk, ovs-interface, ovs-patch, ovs-port, pppoe, team, tun, veth, vlan, vpn, vrf, vxlan, wifi-p2p, wimax, wireguard, wpan, bond-slave, bridge-slave, team-slave] 中
后来经过仔细查阅 NetwrokManager 和 nmcli 的帮助文档总算找到了正确的通过 nmcli 命令配置 tap 网卡的方法,这里记录以下;
正确的方法
新版本的 NetworkManager 也是支持创建 Tap 接口的连接的,不过它不是直接创建 type 为 tap 的连接;而是通过创建 type 为 tun 类型的连接,然后指定 mode 为 tap 来创建;完整的指令如下:
//创建 tun 类型的连接,并指定 mode 为 tap
nmcli con add type tun ifname tap0 con-name tap0 mode tap owner `id -u`
//为 tap0 这个 connection 设置静态IP地址
nmcli connection modify tap0 ipv4.method manual ipv4.addresses 10.0.5.1/24
//激活 connection
nmcli connection up tap0
这样创建的 tap0 连接就是一个由 NetworkManager
服务管理的,可以随操作系统启动而自动配置激活的 Tap 网络连接;
虽然查看 connection 和 device 的 type 都显示为 tun;
但其实该连接所对应的接口已经是 Tap 接口了,可以看到 tun.mode 为 2(tap),同时该网络接口也有自己的 MAC 地址(tun接口是没有MAC地址的);
经过多次重启系统测试,这个 tap 接口已经可以正常加载并激活!