ARP 하드웨어 유형 37, opcode 21 및 프로토콜 유형 0x90bd는 무엇입니까?

ARP 하드웨어 유형 37, opcode 21 및 프로토콜 유형 0x90bd는 무엇입니까?

현재 netfilter/nftables/nft를 테스트 중입니다. 시작점으로 들어오고 나가는 거의 모든 데이터를 삭제하는 규칙 세트를 만들고, 삭제된 모든 패킷이 기록되도록 규칙을 작성했습니다.

늘 그렇듯이, 아마도 그럴 것입니다. 나는 기계가 수행하려고 하는 첫 번째 작업과 로그에서 발견한 내용을 이해하지 못합니다.

... IN= OUT=enp0s3 ARP HTYPE=37 PTYPE=0x90bd OPCODE=21

~에 따르면이 파일:

  • Opcode 21은 MARS-Grouplist-Reply를 의미합니다. RFC나 IANA 문서 외에는 온라인에서 들어본 적도 없고 그에 대한 참조를 찾은 적도 없지만 거기에는 설명이 없습니다.
  • HTYPE 37은 HFI 하드웨어를 나타냅니다. Opcode와 마찬가지로 나는 그런 것에 대해 들어본 적이 없으며 온라인에서 어떤 설명도 찾을 수 없습니다. 나는 그런 유형의 하드웨어가 없다고 확신합니다. 이 경우 네트워크 하드웨어는 QEMU의 가상 NIC입니다.
  • PTYPE 0x90bd: 오늘 조사하는 동안 프로토콜 유형 목록을 발견했는데, 안타깝게도 어디에 있는지 기억이 나지 않습니다. 그러나 어쨌든 거기에는 0x90bd에 대한 언급이 전혀 없습니다.

opcode, 하드웨어 유형 및 프로토콜 유형이 무엇을 의미하는지, 그리고 문제의 시스템이 왜 그러한 패킷을 보내려고 하는지 설명할 수 있습니까?

이는 가상화된 표준 x64 Intel 하드웨어와 virtio NIC가 있는 가상 머신에 기본 Debian Bullseye 설치(작성 당시 최신)에서 발생합니다.

답변1

이는 Netfilter의 ARP 로그에 있는 버그입니다.


하나 있다오류 보고서이 문제에 대해. 우리는 ARP가 로깅에 올바른 데이터를 사용하고 있지 않다는 것을 발견했습니다(ARP용 네트워크 계층 데이터가 아닌 링크 계층 헤더의 데이터를 사용하고 있었습니다). ㅏ이 문제를 해결하기 위한 패치가 제공됩니다.며칠 후 커널 5.19에서:

netfilter:nf_log: 네트워크 헤더에 대한 잘못된 오프셋

NFPROTO_ARP는 네트워크 오프셋에서 ARP 헤더를 찾을 것으로 예상합니다.

ARP의 특정 경우 HTYPE= 필드는 이더넷 헤더 대상 MAC 주소의 초기 바이트를 표시합니다.

 netdev out: IN= OUT=bridge0 MACSRC=c2:76:e5:71:e1:de MACDST=36:b0:4a:e2:72:ea MACPROTO=0806 ARP HTYPE=14000 PTYPE=0x4ae2 OPCODE=49782

NFPROTO_NETDEV 송신 후크는 또한 네트워크 오프셋에서 IP 헤더를 찾을 것으로 예상합니다.

수정: 35b9395104d5("netfilter: 일반 ARP 패킷 로거 추가")
보고자: Tom Yan
서명자: Pablo Neira Ayuso

이 수정 사항은 기본 커널 5.10으로 백포트되지 않은 것으로 보입니다. 패치할 파일이 아직 다른 곳에 통합되지 않아 다른 위치에 있거나 백포트로 인해 패치가 누락되었기 때문일 수 있습니다.

수정 후(예: 바닐라2017년 5월 19일):

  ah = skb_header_pointer(skb, nhoff, sizeof(_arph), &_arph);

수정되지 않은 경우(예:원본 버전 5.10.174, 패치가 적용되지 않는 한 Debian Bullseye 포함):

  ah = skb_header_pointer(skb, 0, sizeof(_arph), &_arph);

누군가는 이에 대해 버그 보고서를 제출해야 합니다. 그동안 Bullseye-backports 커널을 사용해 볼 수 있습니다(예: 현재:6.1.12-1~bpo11+1) 다시는 갖지 못할 것을 보장합니다.


현재 Bullseye 커널(5.10.162)에서 테스트되었습니다. 그냥 ARP를 기록하세요.

table arp t {
    chain cout {
        type filter hook output priority filter; policy accept;
        log
    }
}

HTYPE=65535이 오류는 패치에 설명된 대로 브로드캐스트 MAC 주소의 시작 부분을 잘못 사용하기 때문에 LAN에 존재하지 않는 IP 주소에 액세스하려고 할 때 기록됩니다.

패키지 로그의 커널에 대해서도 linux-image-6.1.0-0.deb11.5-amd64-unsigned동일한 테스트를 수행해야 합니다.HTYPE=1

관련 정보