tcpdump는 TAP 인터페이스에서 들어오는 패킷을 볼 수 있지만 iptables는 볼 수 없는 이유는 무엇입니까?

tcpdump는 TAP 인터페이스에서 들어오는 패킷을 볼 수 있지만 iptables는 볼 수 없는 이유는 무엇입니까?

Linux에 패킷을 주입하는 프로그램수도꼭지인터페이스(이러한 패킷은 가상 머신에서 옵니다). 특히 이는 DHCP 요청입니다(따라서 UDP임). 가 있는 패킷은 볼 수 있지만 tcpdump가 있는 패킷은 볼 수 없으며 iptables로컬 DHCP 서버에 도달하지 않습니다. 왜 안 되고 어떻게 이 문제를 해결할 수 있나요?

고쳐 쓰다:인터페이스 주소에 IP 패킷을 주입하려고 합니다 tap0. 가상 머신에서 ARP 요청이 들어오는 것을 볼 수 있지만 tcpdump -i tap0네트워크 계층에서는 응답이 없습니다. 가상 머신에 ARP 요청을 보내면 가상 머신이 이를 확인하고 호스트에 응답합니다(응답은 표시되지만 tcpdump손실됨).

또 다른 관찰: ifconfig tap0호스트에 주입된 모든 패킷에 대해 TX 삭제 패킷 수가 증가한다는 것을 보여줍니다. 왜 텍사스인가?

# ifconfig tap0
          TX packets:0 errors:0 dropped:958 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

간단히 말해서:Linux 호스트(Ubuntu 10.04 실행)에서 에뮬레이트된 이더넷 카드가 있는 가상 머신을 실행하고 있습니다. 호스트의 네트워크 스택에 이더넷 패킷을 주입하고 캡처하는 역할을 하는 도우미 프로그램과 통신하여 이를 수행합니다. 가상 머신은 ARM 칩 에뮬레이터이며 도우미 프로그램을 호출합니다 nicserver. 내가 아는 것은 다음과 같습니다.ARM 문서.

가상 머신과 호스트 사이에 이더넷 링크를 설정하고 그 위에 IP 링크를 설정하고 싶습니다. VM은 DHCP를 통해 IP 주소를 얻습니다. 가상 머신과 나머지 세계 사이의 통신은 원하지 않고 호스트 머신만 통신하고 싶기 때문에 가상 네트워크 tap0인터페이스를 만들었습니다.

tunctl -u gilles
ifconfig tap0 192.168.56.1 netmask 255.255.255.0 up
nicserver -p 7801 -a tap0 &

이제 VM을 시작하면 DHCP 요청을 보내는 것을 볼 수 있습니다 tcpdump -n -i tap0 -vv(DHCP 클라이언트는 시간 초과되지 않으며 여기에는 샘플 요청이 표시됩니다).

tcpdump: listening on tap0, link-type EN10MB (Ethernet), capture size 96 bytes
18:29:23.941574 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto UDP (17), length 576)
    0.0.0.0.68 > 255.255.255.255.67: [no cksum] BOOTP/DHCP, Request from 02:52:56:47:50:03, length 548, xid 0x238a7979, secs 46, Flags [none] (0x0000)
          Client-Ethernet-Address 02:52:56:47:50:03 [|bootp]

요청을 처리하기 위해 호스트에 Dnsmasq를 설정했지만 들어오는 요청이 표시되지 않습니다. Dnsmasq 서버는 들어오는 요청조차 보지 못합니다(저는 그것을 추적했습니다). 그래서 Iptables를 사용하여 패킷을 관찰해 보았습니다. (모든 필터/입력 규칙을 표시합니다. mangle 또는 nat 규칙은 표시하지 않습니다.)

Chain INPUT (policy ACCEPT 2366K packets, 5334M bytes)
 pkts bytes target     prot opt in     out     source               destination 
  119 39176 LOG        udp  --  *      *       0.0.0.0/0            0.0.0.0/0           udp dpt:67 LOG flags 4 level 4 prefix `[DHCP request] '
  119 39176 DROP       udp  --  eth1   *       0.0.0.0/0            0.0.0.0/0           udp dpt:67
    2   490 LOG        udp  --  tap0   *       0.0.0.0/0            0.0.0.0/0           LOG flags 4 level 4 prefix `[in=tap0] '
   26  6370 ACCEPT     udp  --  tap0   *       0.0.0.0/0            0.0.0.0/0   
    0     0 ACCEPT     all  --  tap0   *       0.0.0.0/0            0.0.0.0/0   
 3864  457K ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0   

이러한 들어오는 DHCP 요청은 모두 켜져 있습니다 eth1(동료와 네트워크 관리자를 화나게 하지 않도록 이 요청을 무시하지 않도록 주의합니다). 이러한 UDP 패킷은 tap0로컬 Samba 서버에서 제공됩니다. tcpdump를 사용하여 본 DHCP 요청 패킷이 패킷 필터를 통과하지 못하는 것 같습니다!

tap0tcpdumpwith에서 들어오는 브로드캐스트 패킷이 표시 되지만 with에서는 표시되지 않는 이유는 무엇입니까 iptables(컴퓨터에서 수신 대기하는 프로그램이 없음)? 이러한 패킷이 이더넷 인터페이스에서 오는 것처럼 보려면 무엇을 수정해야 합니까?

답변1

이것은 추가적인 추측입니다. 이것이 도움이 되기를 바라지만, 틀릴 수도 있습니다.

tap0에는 커널 네트워크 스택 끝과 프로그램 인터페이스 끝이라는 두 개의 끝이 있습니다. "nicserver"를 제공하기 위해 tap0을 사용하는 경우 Tap 장치가 의도한 방식으로 연결하기 위해 프로그램 인터페이스를 사용하지 않는 것 같습니다. 대신 nicserver는 네트워크 스택 측에서만 쓰며 프로그램 인터페이스 측에서는 애플리케이션을 읽지 않으므로 결국 장치 대기열이 오버플로됩니다. 이것은 삭제된 패킷에 대해 설명합니다. 또한 iptables 결과를 설명할 수 있는 패킷이 전달되지 않습니다.

제 생각에는 tap0에서 tcpdump 캡처를 허용하면 실제로 tap0의 프로그램 인터페이스 측면에 연결되고 짜잔, 패킷이 표시될 것입니다. 인터넷에서 검색했지만 이 동작을 확인하는 출처를 찾지 못했습니다. 이 이론을 반박하려면 tap0을 캡처하여 패킷 손실 및 iptables 로그에 어떤 영향을 미치는지 확인하세요.

마지막으로 원래 질문에 대한 제안: 루프백 장치를 사용하는 것은 어떻습니까? 이와 같이:

nicserver -p 7801 -a lo

답변2

이것iptable 테이블당신이 인쇄하고 있는 것은필터테이블.

이것필터체크리스트성냥라우팅 결정이 내려진 후에만 가능합니다.

이 블로그의 다이어그램을 확인하세요. https://www.garron.me/en/linux/iptables-manual.html

트래픽을 전달할 때 패킷 수가 증가하는지 확인하려면 다른 테이블을 확인하세요.

iptables -nvL -t raw;
iptables -nvL -t nat;
iptables -nvL -t mangle;

관련 정보