[Linux] Tcpdump로 네트워크 인터페이스 패킷 확인
리눅스 환경에서 특정 네트워크 인터페이스에 송수신되는 패킷을 확인하고자 할 때 아주 편리한 툴이 있다.
바로 Tcpdump이다.
이를 활용하여 특정 서버에 네트워크 관련 문제가 발생했을 때, 패킷이 정확하게 서버로 전송이 오는지를 확인할 수 있다.
※ Tcpdump는 기본적으로 Root 권한이 필요로 한다.
다음은 쿠버네티스 클러스터에서 생성된 파드의 네트워크 인터페이스를 tcpdump로 확인하여 해당 파드에 패킷이 전송되는 것을 확인해 볼 것이다.
파드 생성
# nginx 수신 파드 생성
kubectl run receive-nginx --image=nginx:latest
파드를 생성해 주고, 배정된 IP를 확인한다.
파드가 생성된 노드에 접속하여, 해당 IP로 라우팅 되어 있는 네트워크 인터페이스를 확인한다.
아래 예시로는 calif72303f1f25라고 되어있는 것을 볼 수 있다.
이 인터페이스에 tcpdump를 통하여 송수신되는 패킷을 확인할 것이다.
패킷 확인
tcpdump로 해당 네트워크 인터페이스의 패킷을 확인하는 명령어를 실행한다.
# 패킷 확인
tcpdump -i <네트워크 인터페이스 명>
아래와 같이 아무런 패킷이 오가고 있지 않기에, 아무것도 출력되지 않는 것을 볼 수 있다.
여기서 해당 파드에 curl을 날려보면 패킷에 대한 추적이 정상적으로 되는지 알 수 있을 것이다.
# 패킷 수신 확인을 위한 curl
curl <nginx 파드 IP>
Curl을 이용하여 간단한 HTTP Get 요청을 송신하였다.
그 후 아래와 같이 tcpdump가 남기는 nginx 파드의 네트워크 인터페이스의 패킷에 대한 추적을 확인할 수 있었다.
위 과정을 통해 tcpdump로 특정 네트워크 인터페이스로 들어오고 나가는 패킷과, 그에 대한 정보를 확인할 수 있다는 것을 알 수 있었다.
이러한 툴은 서버 간 네트워크를 구성할 때, 통신이 비정상일 때 어떤 부분에서 문제가 발생하는지에 대한 원인 파악을 하는데 요긴하게 사용될 수 있을 것이다.