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

如何实现LXD容器与主机同时捕获同一物理网卡的流量?

解决方案:通过禁用MAC学习的网桥实现主机与LXD容器共享镜像流量

要让主机和LXD容器同时捕获同一物理网卡的镜像流量,核心是打破普通网络设备的MAC过滤机制,让镜像流量能转发到主机和容器的接口。以下是具体实现步骤:

步骤1:清理现有无效配置

先移除之前的容器网卡和错误网桥:

# 移除容器内的eth1设备
lxc config device remove centos-worker1 eth1
# 删除之前创建的ens35网桥(如果存在)
ip link del ens35

步骤2:创建专用抓包网桥

创建一个禁用MAC地址学习、开启混杂模式的网桥,确保所有流量能广播到所有端口:

# 创建名为br-mirror的网桥
ip link add br-mirror type bridge
# 禁用网桥MAC地址学习(关键:让所有流量转发到所有端口)
ip link set br-mirror type bridge learning off
# 开启网桥混杂模式
ip link set br-mirror promisc on
# 将ens34添加到网桥,并确保ens34保持混杂模式
ip link set ens34 master br-mirror
ip link set ens34 promisc on
# 启动网桥和ens34接口
ip link set ens34 up
ip link set br-mirror up

步骤3:为容器添加网桥连接

将容器的网卡连接到br-mirror网桥,并在容器内开启混杂模式:

# 给容器添加bridged类型的网卡
lxc config device add centos-worker1 eth1 nic name=eth1 nictype=bridged parent=br-mirror
# 进入容器,开启eth1的混杂模式并启动接口
lxc exec centos-worker1 -- ip link set eth1 promisc on
lxc exec centos-worker1 -- ip link set eth1 up

验证效果

  • 主机上执行:tcpdump -i ens34 或 tcpdump -i br-mirror,可正常捕获镜像流量
  • 容器内执行:tcpdump -i eth1,现在能捕获到和主机一致的全部镜像流量

为什么之前的方法失败?

  1. nictype=physical:会独占物理网卡,导致主机无法使用,不符合共享需求
  2. macvlan:基于MAC地址过滤流量,仅转发目标MAC匹配容器的包,而镜像流量的目标MAC并非容器,因此无法捕获
  3. 普通网桥:默认开启MAC地址学习,仅将流量转发到匹配目标MAC的端口,镜像流量无法到达容器端口;禁用MAC学习后,网桥会将所有流量广播到所有连接的端口,容器就能获取全部镜像包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:00:14