Linux Wi-Fi 액세스 포인트에서 트래픽 셰이핑 (패킷 지연 및 손실 시뮬레이션)


1

Wi-Fi 액세스 포인트로 Pi3B + 설정이 있고 AP를 통해 통신하는 연결된 장치의 패킷 지연 및 패킷 손실을 시뮬레이트하고 싶습니다. 나는 tc와 iptables를 사용하여 패킷 지터와 AP를 통해 통신하는 연결 장치의 손실을 일으킬 수 있다고 생각했지만 그 패킷은 영향을받지 않습니다. 영향을받는 유일한 패킷은 연결된 장치의 패킷이며 대상 IP는 대상 IP가 연결된 장치 인 대상인 AP 또는 AP 패킷입니다. AP를 통해 통신하는 연결된 장치에 영향을 줄 수있는 방법에 대한 통찰력이 있으면 대단히 감사하겠습니다. 또한 AP에 연결된 장치의 소프트웨어 또는 구성을 수정할 수 없습니다. 아래 명령과 비슷한 명령을 AP에서 성공하지 못했습니다.

tc qdisc 변경 dev에 wlan0 루트 netem 지연 100ms 10ms

tc qdisc 변경 dev에 wlan0 루트 netem 손실 0.1

iptables -D INPUT -m 통계 - 모드 랜덤 - 확률 0.2 -j DROP

iptables -D OUTPUT -m 통계 - 모드 임의의 - 확률 0.2 -j DROP

iptables -D FORWARD -m 통계 - 모드 랜덤 - 확률 0.2 -j DROP

답변:


1

iptables를 요구하지 않고 이러한 목적으로 netem을 사용할 수 있어야합니다. 단일 지연 인스턴스에서 필요한 지연 및 손실을 결합 할 수 있습니다.

그러나 각 qdisc는 기본적으로 인터페이스에서 나가는 트래픽 만 처리합니다. 들어오는 트래픽에는 다른 경로가 필요하므로 경로에 영향을주는 별도의 qdisc를 넣어야합니다. 두 번째 netem 인스턴스를 이더넷 인터페이스에 연결하거나 Wifi 입구 트래픽이 가상 중간 장치를 통과하도록 할 수 있습니다. 후자는 다음을 요구합니다.

ifconfig ifb0 up
tc qdisc add dev wlan0 handle ffff: ingress
tc filter add dev wlan0 parent ffff: protocol all u32 match u32 0 0 action mirred egress redirect dev ifb0
tc qdisc add dev ifb0 root netem ...

iptables가 작동하지 않는 한 가지 이유는 기본적으로 브리지 된 트래픽이 효율성을 위해 전달되지 않으므로 라우팅 된 트래픽 만 수행한다는 것입니다. iptables를 통해 브리지 된 트래픽을 보내는 컴파일 타임 커널 설정 옵션이 있지만, 필자의 경우에는 필요하지 않다고 생각합니다.


나는 이것을 시도했지만 tc 필터 명령이 작동하지 않아서 성공하지 못한 명령을 사용했다. # modprobe ifb # ip link set dev ifb0 위로 # tc qdisc add dev eth0 ingress # tc 필터 add dev eth0 부모 ffff : \ protocol ip u32 match u32 0 0 flowid 1 : 1 동작 mirred egress redirect dev ifb0 # tc qdisc add dev ifb0 루트 netem 지연 750ms
user9773452

@ user9773452 tc 필터 명령이 "작동하지 않음"은 얼마나 정확합니까? 오류 메시지가 있었습니까?
Chromatix

파싱 ​​오류입니다.
user9773452

@ user9773452이 경우 편집 된 답변의 버전을 사용해보십시오.
Chromatix

명령은 이제 작동하지만 영향을받는 패킷은 연결된 장치의 패킷이며 대상 IP는 대상 IP가 연결된 장치 인 대상인 AP 또는 AP 패킷입니다.
user9773452
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.