You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firecracker VM中veth与tap接口的关联及作用技术问询

Firecracker VM 网络配置:tap与veth接口关联分析

环境信息

CNI配置文件 /etc/cni/conf.d/fcnet.conflist

{
  "name": "fcnet",
  "cniVersion": "1.0.0",
  "plugins": [
    {
      "type": "ptp",
      "ipMasq": true,
      "ipam": {
        "type": "host-local",
        "subnet": "10.0.0.0/18",
        "resolvConf": "/etc/resolv.conf"
      }
    },
    {
      "type": "tc-redirect-tap"
    }
  ]
}

主机侧接口信息(ip a)

74: veth8d52e569@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 0e:0c:9c:36:83:54 brd ff:ff:ff:ff:ff:ff link-netns e5d1188b-598a-409d-a125-844d0558f21e
    inet 10.0.0.1/32 scope global veth8d52e569
       valid_lft forever preferred_lft forever
    inet6 fe80::b408:58ff:fe66:e16d/64 scope link
       valid_lft forever preferred_lft forever
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: veth0@if74: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 6a:c1:a5:c8:f9:6c brd ff:ff:ff:ff:ff:ff link-netnsid 0
3: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 6e:92:e2:26:e8:e2 brd ff:ff:ff:ff:ff:ff

VM内部接口信息(ip a)

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 6a:c1:a5:c8:f9:6c brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.29/18 brd 10.0.63.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::68c1:a5ff:fec8:f96c/64 scope link
       valid_lft forever preferred_lft forever

Firecracker启动日志

INFO[0000] Attaching NIC tap0 (hwaddr 6a:c1:a5:c8:f9:6c) at index 1

问题解答

1. tap0与veth0的关联方式:TC流量重定向

看不到网桥或iptables规则,是因为这里使用了**tc-redirect-tap CNI插件**,它通过Linux流量控制(TC)的redirect动作实现tap0与veth0的双向流量转发,无需依赖网桥。

具体逻辑:

  • 插件会在命名空间内的tap0和veth0接口上配置TC过滤规则,将tap0收到的流量重定向到veth0,再通过veth对的主机侧接口(veth8d52e569)转发至主机网络;
  • 反向同理,veth0收到的流量会被重定向到tap0,再传入VM内部。

可通过以下命令验证TC规则:

sudo ip netns exec e5d1188b-598a-409d-a125-844d0558f21e tc filter show dev tap0 ingress
sudo ip netns exec e5d1188b-598a-409d-a125-844d0558f21e tc filter show dev veth0 ingress

输出中会包含redirect to dev <目标接口>的规则,明确两者的关联关系。

2. tap0的作用及与VM内eth0的关联

tap0的作用

tap0是用户态虚拟网络接口,作为Firecracker VM与主机网络栈的桥梁:

  • 接收VM内核发送的以太网帧,传递给主机侧进行网络处理;
  • 接收主机侧发来的帧,转发至VM内核。

与VM内eth0的关联

Firecracker启动时,会将tap0直接绑定到VM的虚拟PCI NIC设备(日志中"Attaching NIC tap0"即为该操作)。VM启动后,内核识别到该虚拟NIC,自动创建对应的eth0接口,两者的MAC地址完全一致(VM内eth0的MAC6a:c1:a5:c8:f9:6c与Firecracker日志中tap0的hwaddr完全匹配)。

这种关联是内核级直接映射:VM内eth0发送的所有帧都会进入tap0的接收队列,tap0收到的帧也会直接传递给VM内的eth0。

3. 查看关联关系的方法

查看tap0与veth0的TC关联

使用TC命令查看接口上的过滤规则:

# 查看tap0的入向过滤规则
sudo ip netns exec <你的命名空间ID> tc filter show dev tap0 ingress
# 查看veth0的入向过滤规则
sudo ip netns exec <你的命名空间ID> tc filter show dev veth0 ingress

规则中的redirect to dev <接口名>就是两者的关联依据。

查看tap0与VM内eth0的关联

有三种验证方式:

  1. MAC地址匹配:Firecracker日志中tap0的hwaddr与VM内eth0的MAC完全一致,这是最直接的关联证据;
  2. Firecracker API查询:若通过API启动Firecracker,调用GET /network-interfaces接口,返回信息会明确显示tap设备路径与VM内NIC的对应关系;
  3. 进程关联查询:在主机上查看tap0的所属进程:
sudo lsof | grep tap0

输出会显示tap0被Firecracker进程打开,间接证明该tap0与对应VM的eth0关联。


内容的提问来源于stack exchange,提问作者Betflop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:17:02