레이턴시 측정, 패킷 캡처 및 수집 – ntap

1.
패킷을 고성능으로 캡처하는 부분은 지난 번에 다루었습니다.

단순한 캡처가 목적이 아니기 때문에 한발더 나아가야 합니다. 캡처를 한 후 저장 및 분석을 하여야 원하는 목적인 레이턴시 분석을 할 수 있습니다. 이를 위하여 Corvil 제품을 다시금 살펴보았습니다. 브로커환경에서의 레이턴시 측정과 관련한 구성입니다.

위 그림중 별모양은 TAP장비입니다. Installing the CNE with a Passive TapTAP장비와 관련하여 Corvil은 Passive Tap와 Aggregation Tap 모두를 지원한다고 합니다. Passive Tap이 무엇을 말하는지 궁금해서 확인을 해보니까 아래와 같이 정의하고 있습니다.

  • A Passive Network TAP has no physical separation between the network ports. When the power to the device is lost, the network link will remain operational without delay. It requires no extra powering.
  • An Active Network TAP does have a physical separation between the network ports, because of the relays and other electronic components inside the device. Extra powering is required by the TAP to fully operate.
  • The Difference Between Passive and Active Network TAPs중에서

    Download (PDF, 1.37MB)

    일반적으로 레이턴시 측정을 위한 제품들은 Port mirroring,GPAN 혹은 RITE(Raw IP Traffice Export)와 같이 네트워크장비를 통하여 패킷을 수집한 후 이를 다양한 분석하는 기능을 제공합니다. 이런 구성을 취하는 이유는 운영중인 환경에 대한 영향을 최소화하면서 측정을 하기 위함입니다. 문제는 비용입니다.

    그래서 고민했던 것이 소프트웨어적인 방식이었습니다. 레이턴시 측정, 패킷 갭처 – pf_ring가 출발점입니다. pf_ring으로 이런저런 시험을 하면서 어떤 구성으로 측정을 할지를 고민했습니다. 가장 좋은 방식은 앞서 Corvil처럼 Port Mirroring이나 TAP등을 이용하여 패킷을 한 곳으로 보내서 측정서버가 패킷을 캡처,저장,가공 및 분석을 하는 것입니다. 이 방식을 포기하면 선택지는 매매서버나 FEP서버에서 패킷을 생성하여 자체로 저장하거나, 측정서버로 보내서 저장하는 방식입니다. pf_ring을 기반으로 해서 분석프로그램을 개발하기 전에 어느 수준에서 가능한지 확인을 하였습니다.

    2.
    먼저,pf_ring을 만든 ntop은 소프트웨어적으로 위와 같은 구성이 가능한 제품을 공급합니다. n2disk, ntap입니다. n2disk는 패킷을 수집해서 저장까지 하는 역할을 합니다. ntap은 소프트웨어적으로 tap기능을 구현한 제품입니다. ntap_remote와 ntap_collector로 이루어져있습니다. ntap_remote를 제외하면 라이센스가 필요한 제품들입니다. 우선 ubuntu 22.04에서 pf_ring와 ntap을 설치하였습니다. ntap을 어떤 경우에 사용하는지를 설명한 부분입니다.

    When shall I use nTap ?

    nTap has been designed to collect on a central location traffic coming from remote sites when a port mirror or similar techniques cannot be used. In addition nTap delivers full packets to destination meaning that it can be used to implement cybersecurity solutions or trubleshoot using Wireshark or similar applications. This said, you should not care much about performance as you can limit the number of packets you can nTap-deliver using a filtering expression on the ntap_remote side. If you have instead a lot of traffic (1 Gbit+) to analyze you should consider deploying a network probe such as nProbe instead of nTap and deliver flows rather than packets that are much smaller in size.

    ntop은 apt 명령어로 손쉽게 설치하였습니다.

    이제 ntap_remote와 ntap_collector를 이용한 시험을 합니다. 시험환경을 위하여 Rocky linux 8에 ntap을 별도로 설치합니다.

    이상과 같이 설치한 후 확인을 하였습니다.

    이제 ubuntu서버에서 ntap_remote를 실행하고 rocky linux 서버에서 ntop_collector를 실행합니다. 우선 ntap_remote의 실행화면입니다…

    그러면 수신쪽 실행화면입니다.

    입력값이 없습니다. 무언가 이상합니다. 그래서 문서를 다시 찾아보았습니다.

    Collector Injects Received Traffic to Local Interface

    In this case you have a local collector instance that receives traffic from one or more remote tap instances and injects traffic to an existing local interface specified with -e. In essence:

    With -i you specify a virtual interface created by ntap (and destroject when ntap_collector is terminated) on which collected packets are injected
    With -e you specify an existing network interface on which collected packets are injected

    Example: – [remote host] ntap_remote -i eth0 -c 1.2.3.4:5678 -k hello – [local host] ntap_collector -p 5678 -k hello -e eth2

    도움말을 보니까 이런 부분이 있습니다.

    Options:
    [–interface|-i] | Virtual interface where received packets are injected
    [–egress|-e] | Host interface on which received packets are injected

    Virtual interface를 대신하여 Host Interface를 사용하여 실행하였습니다. 결과는 앞서와 동일합니다. Demo Mode라서 그런가 해서 tcpdump로 확인하였습니다.

    데이타가 들어옵니다. 동작중이라는 뜻이네요. 어찌되었든 예상했던 결과를 보지 못하였습니다. ntap_collector는 라이센스가 있어야 합니다. 이를 피하는 방법은 직접 개발하는 방식입니다. 관련한 API입니다.

    Developing nTap-based Applications

    nTap can be embedded in non-ntop applications by using the nTap SDK that by means of a simple API, allows the creation of custom collector applications. The SDK is part of the nTap package and ince installed it comes with:
    /usr/lib/libntap.a (under BSD systems it goes under /usr/local/lib/libntap.a)
    /usr/include/libntap.h (under BSD systems it goes under /usr/local/include/libntap.h)

    길을 찾았지만 제가 모르는 것이 있었습니다. ntap과 관련한 부분입니다. virtaul Interface라고 한 부분을 무심히 넘겼습니다. 문서대로 하였지만 머리를 쓰지 않고 하였습니다. 생각해 보면 ntap0라는 Virtual interface에 대한 이해를 하여야 했습니다. ntap이 동작하도록 enp9s0와 연결하여야 했습니다. 즉, Vitural Interface에 대한 공부가 없었습니다.

    이 부분을 추가로 정리하려고 합니다.

    Leave a Comment

    이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

    이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.