본문 바로가기

IT 이야기/네트워크(Network)

[F5] BiG-IP/ tcpdump 명령을 활용한 L4 스위치 트래픽 확인 방법

728x90
반응형

안녕하세요.
아이홀입니다.

서버 로드밸런싱을 위해 사용하는 L4 스위치 , 
그 중 F5 BiG-IP 제품에서 트래픽 흐름을 파악하기 위해 사용하는 명령어를 소개하고자 합니다.

우리가 운영하는 네트워크 장비의 경우 일반적으로 log 를 이용하여 트러블슈팅을 하고,
좀 더 깊은 분석이 필요할 경우에는 debug 명령으로 실시간 패킷캡쳐를 할 수 있는데요.

F5사의 L4 스위치는 tcpdump 명령을 통해 실시간 흐름을 파악할 수 있습니다.

 

 

TCPDUMP란?

"tcpdump는 명령 줄에서 실행하는 일반적인 패킷 가로채기 소프트웨어이다.
사용자가 TCP/IP뿐 아니라, 컴퓨터에 부착된 네트워크를 통해 송수신되는 기타 패킷을 가로채고 표시할 수 있게 도와 준다. BSD 허가서를 통해 배포되는 tcpdump는 자유 소프트웨어이다.

tcpdump는 리눅스, 솔라리스, BSD, 맥 OS X, HP-UX, AIX 따위의 대부분의 유닉스 계열 운영 체제에서 동작하며 여기서 libpcap 라이브러리를 사용하여 패킷을 포획한다. 윈도우용 tcpdump 이식판으로는 WinDump가 있으며, 이는 libpcap의 윈도 이식판인 WinPcap을 이용한다"

라고 "위키백과" 에 나와 있습니다.

F5 L4스위치의 운영체제가 유닉스 계열인 것으로 알 수 있습니다.

 

 

 

사용 방법

먼저 cli 모드로 F5 L4 스위치에 접속해 주세요.
WEB GUI 상에서는 사용이 불가합니다.

[admin@INT_SVR_L4_1:Active:In Sync] ~ # tcpdump -nni 0.0 host 192.234.19.31 -c 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on 0.0, link-type EN10MB (Ethernet), capture size 65535 bytes
f4:15:63:3a:76:05 > 00:de:fb:4c:eb:7c, ethertype 802.1Q (0x8100), length 225: vlan 19, p 0, ethertype IPv4, 192.234.19.31.50000 > 192.33.52.73.55099: Flags [P.], seq 76376550:76376674, ack 1898426442, win 1333, length 124 out slot1/tmm2 lis=/Common/VS_Exchange_any
00:de:fb:4c:eb:7c > f4:15:63:3a:76:05, ethertype 802.1Q (0x8100), length 1338: vlan 19, p 0, ethertype IPv4, 192.42.59.68.62401 > 192.234.19.31.443: Flags [P.], seq 2487878799:2487880036, ack 1728183102, win 508, length 1237 in slot1/tmm3 lis=/Common/VS_Exchange_443
00:de:fb:4c:eb:7c > f4:15:63:3a:76:05, ethertype 802.1Q (0x8100), length 1146: vlan 19, p 0, ethertype IPv4, 192.42.59.68.62401 > 192.234.19.31.443: Flags [P.], seq 1237:2282, ack 1, win 508, length 1045 in slot1/tmm3 lis=/Common/VS_Exchange_443
f4:15:63:3a:76:05 > 00:de:fb:4c:eb:7c, ethertype 802.1Q (0x8100), length 101: vlan 19, p 0, ethertype IPv4, 192.234.19.31.443 > 192.42.59.68.62401: Flags [.], ack 2282, win 513, length 0 out slot1/tmm3 lis=/Common/VS_Exchange_443
00:de:fb:4c:eb:7c > f4:15:63:3a:76:05, ethertype 802.1Q (0x8100), length 273: vlan 19, p 0, ethertype IPv4, 192.33.52.73.55099 > 192.234.19.31.50000: Flags [P.], seq 1:173, ack 124, win 253, length 172 in slot1/tmm2 lis=/Common/VS_Exchange_any
f4:15:63:3a:76:05 > 00:de:fb:4c:eb:7c, ethertype 802.1Q (0x8100), length 273: vlan 19, p 0, ethertype IPv4, 192.234.19.31.50000 > 192.33.52.73.55099: Flags [P.], seq 124:296, ack 173, win 1437, length 172 out slot1/tmm2 lis=/Common/VS_Exchange_any
00:de:fb:4c:eb:7c > f4:15:63:3a:76:05, ethertype 802.1Q (0x8100), length 1561: vlan 19, p 0, ethertype IPv4, 192.40.53.33.50738 > 192.234.19.31.50000: Flags [.], seq 2211716119:2211717579, ack 2190558403, win 929, length 1460 in slot1/tmm3 lis=/Common/VS_Exchange_any
00:de:fb:4c:eb:7c > f4:15:63:3a:76:05, ethertype 802.1Q (0x8100), length 1561: vlan 19, p 0, ethertype IPv4, 192.40.53.33.50738 > 192.234.19.31.50000: Flags [.], seq 1460:2920, ack 1, win 929, length 1460 in slot1/tmm3 lis=/Common/VS_Exchange_any
f4:15:63:3a:76:05 > 00:de:fb:4c:eb:7c, ethertype 802.1Q (0x8100), length 101: vlan 19, p 0, ethertype IPv4, 192.234.19.31.50000 > 192.40.53.33.50738: Flags [.], ack 2920, win 513, length 0 out slot1/tmm3 lis=/Common/VS_Exchange_any
00:de:fb:4c:eb:7c > f4:15:63:3a:76:05, ethertype 802.1Q (0x8100), length 1561: vlan 19, p 0, ethertype IPv4, 192.40.53.33.50738 > 192.234.19.31.50000: Flags [.], seq 2920:4380, ack 1, win 929, length 1460 in slot1/tmm3 lis=/Common/VS_Exchange_any
10 packets captured
10 packets received by filter
0 packets dropped by kernel

뭔가 상당히 복잡해 보이죠?

옵션항목에 대해 하나씩 살펴보죠.

 

-i 옵션

-i 옵션은 interface 를 뜻합니다.

 

예를 들면:

  • 특정 Interface 의 Traffic 을 보고자 할 경우: tcpdump -i 2.1
  • 매니지먼트 Interface의 Traffic을 보고자 할 경우: tcpdump -i eth0
  • 모든 트래픽을 확인할 경우(management interface 는 제외) : tcpdump -i 0.0

 

0.0 옵션의 경우 엄청 큰 용량을 차지할 수 있으므로, 사용 시 특정 IP or Count 제한 옵션을 함께 사용하세요.

 

-n 옵션

-n 옵션은 name을 비활성화 시키는 옵션입니다.(?)

뭔 소리냐구요?
기본적으로 패킷 캡쳐 시 F5 스위치는 IP 주소를 DNS Lookup 을 통해 Domain Name 으로 변환을 시도합니다.
이럴 경우 DNS Server 로부터 응답을 기다려야 하므로, 지연이 발생될 수 있어 -n 옵션을 통해 해당 기능을 비활성화 시킬 수 있습니다.

-nn 옵션은 DNS 뿐만 아니라 port 번호 확인하는 부분까지도 비활성화 시킬 수 있는 옵션입니다.

 

host 및 port 필터

특정 단말 또는 특정 포트만 필터링 걸어서 패킷을 확인할 수 있습니다.

1. Host 필터링

- 특정IP 주소를 거쳐가는(출발or목적) 모든 트래픽을 보려면: tcpdump host <IP ADDRESS>

[admin@INT_SVR_L4_1:Active:In Sync] ~ # tcpdump -i 0.0 host 192.234.19.31 -c 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on 0.0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:48:48.888238 IP 192.38.37.129.49944 > 192.234.19.31.50000: Flags [.], ack 3541606661, win 2053, length 0 in slot1/tmm1 lis=/Common/VS_Exchange_any
14:48:48.888892 IP 192.38.37.129.49944 > 192.234.19.31.50000: Flags [.], ack 2921, win 2053, length 0 in slot1/tmm1 lis=/Common/VS_Exchange_any
14:48:48.890335 IP 192.38.37.129.49944 > 192.234.19.31.50000: Flags [.], ack 5841, win 2053, length 0 in slot1/tmm1 lis=/Common/VS_Exchange_any
14:48:48.890383 IP 192.40.87.96.51889 > 192.234.19.31.50000: Flags [.], ack 3124400190, win 1026, length 0 in slot1/tmm3 lis=/Common/VS_Exchange_any
14:48:48.890461 IP 192.38.37.129.49944 > 192.234.19.31.50000: Flags [.], ack 8761, win 2053, length 0 in slot1/tmm1 lis=/Common/VS_Exchange_any
14:48:48.890541 IP 192.234.19.31.50000 > 192.40.87.96.51889: Flags [.], seq 14601:16061, ack 0, win 511, length 1460 out slot1/tmm3 lis=/Common/VS_Exchange_any
14:48:48.890547 IP 192.234.19.31.50000 > 192.40.87.96.51889: Flags [.], seq 16061:17521, ack 0, win 511, length 1460 out slot1/tmm3 lis=/Common/VS_Exchange_any
14:48:48.890551 IP 192.234.19.31.50000 > 192.40.87.96.51889: Flags [P.], seq 17521:18981, ack 0, win 511, length 1460 out slot1/tmm3 lis=/Common/VS_Exchange_any
14:48:48.891340 IP 192.38.37.129.49944 > 192.234.19.31.50000: Flags [.], ack 11681, win 2053, length 0 in slot1/tmm1 lis=/Common/VS_Exchange_any
14:48:48.891392 IP 192.38.37.129.49944 > 192.234.19.31.50000: Flags [.], ack 14601, win 2053, length 0 in slot1/tmm1 lis=/Common/VS_Exchange_any
10 packets captured
10 packets received by filter
0 packets dropped by kernel

 

- 특정IP 주소에서 출발하는 트래픽을 보려면: tcpdump src host <IP ADDRESS>

[admin@INT_SVR_L4_1:Active:In Sync] ~ # tcpdump -i 0.0 src host 192.234.19.31 -c 5 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on 0.0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:53:23.050720 IP 192.234.19.31.https > 192.40.53.67.59046: Flags [P.], seq 1422870576:1422871269, ack 3276046914, win 510, length 693 out slot1/tmm2 lis=/Common/VS_Exchange_443
14:53:23.052771 IP 192.234.19.31.50000 > 192.33.54.61.49869: Flags [P.], seq 1561676859:1561677019, ack 1454845209, win 511, length 160 out slot1/tmm2 lis=/Common/VS_Exchange_any
14:53:23.052959 IP 192.234.19.31.https > 192.33.56.190.50441: Flags [.], seq 81516551:81518011, ack 1991260726, win 513, length 1460 out slot1/tmm1 lis=/Common/VS_Exchange_443
14:53:23.052966 IP 192.234.19.31.https > 192.33.56.190.50441: Flags [.], seq 1460:2920, ack 1, win 513, length 1460 out slot1/tmm1 lis=/Common/VS_Exchange_443
14:53:23.053956 IP 192.234.19.31.https > 192.33.56.190.50441: Flags [P.], seq 2920:3360, ack 1, win 513, length 440 out slot1/tmm1 lis=/Common/VS_Exchange_443
5 packets captured
5 packets received by filter
0 packets dropped by kernel

 

- 특정IP 주소로 도착하는 트래픽을 보려면: tcpdump dst host <IP ADDRESS>

[admin@INT_SVR_L4_1:Active:In Sync] ~ # tcpdump -i 0.0 dst host 192.234.19.31 -c 5   
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on 0.0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:56:45.224939 IP 192.40.63.206.63345 > 192.234.19.31.50000: Flags [P.], seq 749382453:749383913, ack 33766138, win 1026, length 1460 in slot1/tmm0 lis=/Common/VS_Exchange_any
14:56:45.225587 IP 192.40.63.206.63345 > 192.234.19.31.50000: Flags [P.], seq 1460:2244, ack 1, win 1026, length 784 in slot1/tmm0 lis=/Common/VS_Exchange_any
14:56:45.239795 IP 192.234.55.236.51587 > 192.234.19.31.50000: Flags [.], ack 3937453762, win 2123, length 0 in slot1/tmm0 lis=/Common/VS_Exchange_any
14:56:45.240065 IP 192.234.55.236.51587 > 192.234.19.31.50000: Flags [.], ack 1743, win 2123, length 0 in slot1/tmm0 lis=/Common/VS_Exchange_any
14:56:45.240148 IP 192.234.55.236.51587 > 192.234.19.31.50000: Flags [.], ack 4475, win 2123, length 0 in slot1/tmm0 lis=/Common/VS_Exchange_any
5 packets captured
5 packets received by filter
0 packets dropped by kernel

 

 

2. Port 필터링

Port 필터링의 사용방법도 Host 필터링와 동일한 방법으로 사용 가능합니다.

- 특정 Port를 거쳐가는(출발or목적or지나가는) 모든 트래픽을 보려면: tcpdump port <port Number>
- 특정 Port를 출발하는 트래픽을 보려면: tcpdump src port <port Number>
- 특정 Port로 도착하는 트래픽을 보려면: tcpdump dst port <port Number>

[admin@INT_SVR_L4_1:Active:In Sync] ~ # tcpdump -i 0.0 port 443 -c 5   
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on 0.0, link-type EN10MB (Ethernet), capture size 65535 bytes
15:00:05.585641 IP 192.38.37.229.5552 > 192.234.19.215.https: Flags [P.], seq 116429312:116429419, ack 4177833630, win 513, length 107 in slot1/tmm0 lis=/Common/VS_Lync_edge_443
15:00:05.585654 IP 192.38.37.229.33361 > 192.234.18.215.https: Flags [P.], seq 116429312:116429419, ack 4177833630, win 513, length 107 out slot1/tmm0 lis=/Common/VS_Lync_edge_443
15:00:05.585735 IP 192.234.18.215.https > 192.38.37.229.33361: Flags [.], ack 107, win 507, length 0 in slot1/tmm0 lis=/Common/VS_Lync_edge_443
15:00:05.585743 IP 192.234.19.215.https > 192.38.37.229.5552: Flags [.], ack 107, win 507, length 0 out slot1/tmm0 lis=/Common/VS_Lync_edge_443
15:00:05.590920 IP 192.234.18.31.https > 192.234.16.42.49197: Flags [P.], seq 3370798495:3370799140, ack 133743700, win 510, length 645 in slot1/tmm0 lis=/Common/net_0.0.0.0_any
5 packets captured
5 packets received by filter
0 packets dropped by kernel

 

3. [and] 연산자를 이용한 필터 조합

and 연산자를 이용하면 위에서 말씀드린 IP 및 Port 필터를 조합해서 함께 사용할 수도 있습니다.

  • tcpdump -i 0.0 host 192.90.100.1 and port 80
  • tcpdump -i 0.0 src host 192.16.101.20 and dst port 80
  • tcpdump -i 0.0 src host 192.16.101.20 and dst host 10.90.100.1

 

-c 옵션

-c 옵션은 위에 코드블럭 보셨으면 아시겠지만,
원하는 패킷만큼 dump 를 받고 종료하는 옵션입니다.

이 옵션을 지정하지 않으면 tcpdump 는 종료하지 않고 계속 패킷을 캡쳐합니다.
운영 중인 장비에 많은 패킷을 캡쳐할 경우에는 장비 부하 예방을 위해 꼭 해당 옵션을 적용해 주시기 바랍니다.

대략 1000개의 패킷(-c 1000) 정도 캡쳐하시면 트러블슈팅하는데는 무리가 없을 겁니다.

 

tcpdump 중지

다음 방법을 사용하여 tcpdump 유틸리티를 중지할 수 있습니다 .

  • ssh 등 CLI 로 장비에 접속해서 tcpdump 를 실행하는 경우 Ctrl + C 키를 눌러 중지할 수 있습니다 .
  • 만약 백그라운드에서 tcpdump 의 여러 인스턴스를 실행하는 경우
    다음 명령을 입력하여 모든 인스턴스를 동시에 종료할 수 있습니다.  killall tcpdump

 

여러가지 조합 방법

tcpdump -nni 0.0 src host 192.168.10.100 port 80 -c 100

tcpdump -nni 0.0 host 10.10.10.10 -c 1000

tcpdump -nni 0.0 src host 192.168.10.10 and dst host 10.10.10.10 and dst port 443 -c 1000

대략 위와 같은 조합을 이용하여 필요한 패킷 흐름을 확인하고 문제를 해결하는데 도움이 될 수 있을거라 생각합니다.

트러블슈팅하는데 많은 도움이 되셨길 바랍니다.

 

 

읽어주셔서 감사합니다
티스토리 댓글과 공감은 로그인이 필요 없습니다.
로그인하시면 구독 가능합니다.

728x90
반응형