본문 바로가기
IT

리눅스 네트워크 수신 패킷만 drop하도록 시뮬레이션하는 방법

by eddy's warehouse 2024. 1. 29.

실제 환경에서 Rx만 drop 되는 네트워크 환경을 시뮬레이션해야 하는 문제가 생겼습니다. 그래서, 리눅스에서 패킷을 특정 확률로 drop 하는 방법을 알아보았습니다. 그뿐 아니라 리눅스에서 수신 패킷(RX packet)만 드롭하도록 시뮬레이션하는 방법도 있다는 것을 알게 되었습니다. 

리눅스 네트워크 수신 패킷만 drop하도록 시뮬레이션하는 방법 썸네일

NetEm과 한계점

네트워크 패킷을 제어하는 것 중 하나는 NetEm(Network Emulator)을 사용하는 것입니다. 하지만 NetEm은 주로 송신 패킷에 대한 제어를 제공하며, 수신 패킷에 대한 제어는 제한적입니다.

NetEm은 한쪽 방향의 패킷만 제어하지 못하는 문제가 있었습니다. 

NetEm 사용법은 다음 링크를 참고하시면 됩니다. 

 

수신 패킷만 Drop하는 법

수신 패킷을 특정하게 드롭하려면 iptables을 사용할 수 있습니다. iptables은 리눅스의 네트워크 패킷 필터링 시스템으로, 패킷의 송수신을 제어할 수 있습니다. 다음은 iptables을 사용하여 TCP 패킷의 50%를 무작위로 드롭하는 예입니다

iptables -A INPUT -m statistic --mode random --probability 0.5 -j DROP

이 명령은 INPUT 체인에 규칙을 추가하여 들어오는 패킷의 50%를 무작위로 드롭합니다. `--probability` 옵션을 사용하여 드롭 확률을 조절할 수 있습니다.

 

리눅스의 `iptables` 명령어는 네트워크 패킷 필터링을 제어하는 데 사용됩니다. 앞에서 설명한 명령어를 하나씩 설명드리면 다음과 같습니다.

 

  •  '-A INPUT': '-A'는 규칙을 추가(append)하는 옵션을 의미하며, 'INPUT'은 이 규칙이 적용되는 체인을 나타냅니다. 'INPUT' 체인은 시스템으로 들어오는 패킷에 적용됩니다.
  •  '-m statistic': '-m' 옵션은 일치 조건 모듈을 지정하며, 'statistic'은 통계 모듈을 사용하겠다는 것을 의미합니다.
  •  '--mode random': 이는 통계 모듈의 동작 모드를 무작위(random)로 설정합니다.
  •  '--probability 0.5': 이는 무작위 모드에서 패킷이 선택될 확률을 0.5(즉, 50%)로 설정합니다.
  •  '-j DROP': '-j' 옵션은 패킷이 규칙과 일치할 경우 수행할 작업을 지정하며, 'DROP'은 패킷을 드롭하겠다는 것을 의미합니다.


따라서, 이 명령어는 시스템으로 들어오는 패킷 중 50%를 무작위로 선택하여 드롭하는 규칙을 추가하는 것을 의미합니다.

추가로 더 자세한 iptables에 대한 명령은 아래 리눅스 man page를 참고하시면 되겠습니다. 

iptables(8) - Linux man page (die.net)

facebook twitter kakaoTalk kakaostory naver band shareLink