리눅스 tc Traffic Control 사용 방법 포트 미러링 방법
- IT/리눅스(Linux)
- 2023. 6. 27.
Traffic Control 줄여서 TC는 네트워크 트래픽을 제어하는 유틸리티 패키지입니다.
TC는 네트워크 대역폭 제한, 패킷 필터링, 대기 시간 및 패킷 손실 제어 등 다양한 기능을 수행할 수 있습니다. 오늘은 리눅스 TC를 사용해서 포트 미러링을 하는 방법에 대해서 알아보겠습니다.
대역폭 제한 적용할 클래스 생성
# sudo tc qdisc add dev eth0 root handle 1: htb default 10
위 명령어는 eth0 인터페이스의 루트 클래스를 1:로 지정하고, HTB(Hierarchical Token Bucket) 클래스를 생성합니다. 10은 기본 클래스로 지정됩니다.
클래스에 대한 대역폭 제한을 설정
# sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbps
위 명령어는 클래스 1:1을 생성하고, 이 클래스의 대역폭 제한을 1Mbps로 설정합니다.
TC를 사용하여 미러링(Mirroring) 기능 구현하기
미러링 수행할 두 개의 네트워크 인터페이스 선택
첫 번째 인터페이스에 대한 ingress(입력) 트래픽 캡쳐, 두 번째 인터페이스에 대한 egress(출력) 트래픽 캡쳐하는 각각의 캡쳐 포인트 생성
# sudo tc qdisc add dev eth0 handle 1: ingress
# sudo tc qdisc add dev eth1 handle 1: ingress
eth0 및 eth1 네트워크 인터페이스 모두에 수신 qdisc를 추가합니다. (ingress : 들어오는 트래픽)
# sudo tc qdisc add dev eth1 handle 2: root htb default 1
위 명령어들은 eth0와 eth1 인터페이스의 ingress 트래픽을 캡처하는 캡처 포인트를 각각 1:로 지정합니다. 또한 eth1 인터페이스의 egress 트래픽을 캡처하는 캡처 포인트를 2:로 지정하고, 기본 클래스를 1로 설정합니다.
ingress 캡쳐 포인트에서 캡쳐된 패킷을 두 번째 인터페이스의 egress 캡쳐 포인트로 복사
# sudo tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 10.0.0.0/8 flowid 1:1 action mirred egress mirror dev eth1
# sudo tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip dst 10.0.0.0/8 flowid 2:1
위 명령어는 eth0 인터페이스의 ingress 캡처 포인트에서 10.0.0.1 송신지 IP 주소를 가진 패킷을 캡처하고, 해당 패킷을 eth1 인터페이스의 egress 캡처 포인트로 복사합니다. 이때, 복사된 패킷은 mirror 명령어를 사용하여 복사된 것임을 표시합니다. 마지막으로, eth1 인터페이스의 egress 캡처 포인트에서 해당 패킷을 전송합니다.
필요한 경우, 미러링할 패킷을 필터링하여 선택적으로 캡처할 수 있습니다.
# sudo tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 10.0.0.1 match ip dst 10.0.0.2 flowid 1:1 action mirred egress mirror dev eth1
위 명령어는 eth0 인터페이스의 ingress 캡처 포인트에서 10.0.0.1 송신지 IP 주소와 10.0.0.2 수신지 IP 주소를 가진 트래픽을 eth1로 미러링합니다.
[IT/네트워크(Network)] - [네트워크] 스위치(Switch) - L2, L3, L4 스위치 - L7 스위치
[IT/리눅스(Linux)] - 네트워크 netstat 통신 상태 확인(포트, 서비스)