탭 인터페이스를 eth와 연결할 수 없습니다

탭 인터페이스를 eth와 연결할 수 없습니다

/dev/net/tun나는 이더넷 프레임을 보내고 받을 수 있고 가상 브리지와 Veth 쌍을 사용하여 이더넷 네트워크 카드와 Tap 인터페이스를 연결할 수 있는 간단한 C 프로그램을 작성했습니다 .

이더넷 카드를 캡처할 때 수도꼭지에서 약간의 트래픽이 발생하는 것을 보고 싶습니다. 문제는 내 패킷이 Tap0에서 오는 것을 보고 브리지에 도착하는 것을 보는 것입니다. 그러나 이더넷 카드를 캡처할 때 아무것도 도착하는 것을 볼 수 없습니다.

저는 솔직히 제가 무엇 을 하고 있는지 전혀 몰랐기 때문에 netplan 구성 파일 brctlip.ifconfig

동일한 서브넷의 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

브리지를 스위치로 생각하면 됩니다. 즉, 패킷만 볼 수 있습니다.enpu8s0만약 그들이enpu8s0.

트래픽을 보려면 최소한 세 가지 옵션이 있습니다(특정 순서 없음).

  • 트래픽을 직접 전송enpu8s0MAC 주소
  • 브로드캐스트 주소로 트래픽 보내기FF:FF:FF:FF:FF:FF
  • 스위치를 허브로 전환합니다(모든 포트에서 패킷을 복제합니다) brctl setageing <bridge> 0. 그러나 그것은 일반적으로 브리지가 작동하는 방식이 아닙니다.

관련 정보