파일 설명자를 통해 작성된 패킷을 Tap 장치에서 수신합니다.

파일 설명자를 통해 작성된 패킷을 Tap 장치에서 수신합니다.

포인트 앤 클릭 장치를 사용하는 방법을 완전히 이해하는 데 어려움을 겪고 있습니다.

Tap 장치를 만들어서 실행해 보았습니다. 사용자 공간 프로그램은 파일 설명자를 열고 장치로 전송된 이더넷 프레임을 수신합니다. Tap 장치는 10.254.0.1/24의 IP 주소와 넷마스크를 얻습니다.
여태까지는 그런대로 잘됐다. echo "test" | netcat -uq0 10.254.0.2 12345프로그램이 패킷을 수신하고 다른 통신 방법을 통해 다른 시스템으로 전달하는 프로그램을 만들었습니다 .

그러나 반대 접근 방식은 전혀 작동하지 않습니다.
사용자 공간 프로그램은 유효한 이더넷 프레임을 Tap 장치의 파일 설명자에 기록합니다. 그러나 A는 netcat -ul 12345아무것도 받지 못했다. 와 동일합니다 socat. 또한 브리지를 만들고 여기에 탭 장치를 추가해 보았지만 역시 작동하지 않았습니다.

Wireshark로 Tap 장치를 모니터링하면 모든 패킷을 볼 수 있고 모든 패킷이 정확하기 때문에 혼란스럽습니다. 명령의
카운터는 사용자 공간 프로그램이 Tap 장치에 쓰는 각 프레임마다 증가합니다. 이제 IP 패킷만 처리되므로 ARP가 비활성화됩니다.tx packets: XYifconfig
ip link set dev tap0 arp off

내 설정을 다음과 같이 상상할 수 있습니다.

         host1              (some channel)               host2
netcat --> tap0 --> prog   --------------->    prog  -->  tap0  -->  netcat
<=============== works ========================================>| does not work

Tap 장치의 "다른 쪽 끝"에서 패킷을 수신할 수 있는 방법을 알고 계십니까? 아니면 어디서 더 읽을 수 있나요?

편집 2: 수정사항이 삭제되었습니다. (잘못된 테스트로 인해 잘못된 결론이 나왔습니다. 체크섬에 문제가 있었습니다. 이제 패킷은 유효하지만 수신되지 않습니다.)

답변1

몇 가지 추가 조사를 통해 netstat -s원인을 찾는 데 도움이 되었습니다. 역방향 경로 필터가 내 패킷을 삭제하고 있었습니다. (아직도 이유를 완전히 이해하지 못함...)

작동하려면 탭 장치의 필터를 완화 모드로 설정하세요.

sudo sysctl -w net.ipv4.conf.tap0.rp_filter=2

(이것을 설정하여 비활성화합니다 0.아니요나를 위해 작동합니다. )

관련 정보