无法将tap接口与eth连接

无法将tap接口与eth连接

我编写了一个简单的 C 程序,可以使用它发送和接收以太网帧/dev/net/tun,并使用虚拟桥和 ​​veth 对将 Tap 接口与以太网网卡连接起来。

我希望在捕获以太网卡时看到来自我的水龙头的一些流量。问题是看到我的数据包来自 Tap0,我看到它们到达网桥,但在捕获以太网卡时我看不到任何东西到达。

老实说,我不知道我在做什么,所以我尝试使用 netplan 配置文件brctlipifconfig.

我尝试将同一子网的 IP 地址添加到 br0 tap 和 enp8s0,并且我尝试只向网桥提供一个 IP 地址,但始终得到相同的结果,使用 veth 时也是如此

目前我的设置是:

    #create tap0
    sudo ip tuntap add tap0 mode tap
    sudo ip link set tap0 promisc on

    #create Br0
    sudo ip link add br0  type bridge
    sudo ip link set enp8s0 promisc on

    #set to up
    sudo ip link set br0 up              #To add an interface br0s state must be up
    sudo ip link set enp8s0 up           #To add an interface its state must be up
    sudo ip link set dev tap0 up         #To add an interface its state must be up

    #Adding the interface into the bridge is done by setting its master to bridge_name: 
    sudo ip link set enp8s0 master br0
    sudo ip link set tap0 master br0
    sudo ip addr add dev br0 192.168.4.10/24

我正在将此结构写入 Tap 文件描述符:

struct eth_hdr
{
    unsigned char h_dest    [6];
    unsigned char h_source  [6];
    uint16_t ethertype;
    unsigned char payload[];
} __attribute__((packed)); 

wireshark 显示了一个有效的以太网帧,但我不确定哪个源 mac 是合适的

我该怎么做才能将以太网标头从 tap0 更改为 enp8s0

答案1

您可以将桥视为交换机。这意味着您只会看到数据包恩普8s0如果它们是为了恩普8s0

要查看流量,您至少有三个选项(无特定顺序):

  • 将流量直接发送至恩普8s0的 MAC 地址
  • 将流量发送到广播地址FF:FF:FF:FF:FF:FF
  • 将交换机变成集线器(它将在所有端口上复制数据包)brctl setageing <bridge> 0。但这并不是桥梁通常的工作方式。

相关内容