Формирование трафика (симуляция задержки и потери пакетов) в точке доступа Wi-Fi Linux
Я настроил Pi 3 B+ в качестве точки доступа Wi-Fi и хотел бы имитировать задержки пакетов и потерю пакетов для подключенных устройств, осуществляющих связь через точку доступа. Я думал, что смогу добиться этого, используя tc и iptables, чтобы вызвать дрожание пакетов и потери для подключенных устройств, осуществляющих связь через точку доступа, но эти пакеты не затрагиваются. Единственные затронутые пакеты - это пакеты от подключенного устройства, чей IP-адрес назначения является AP, или пакеты AP, чей IP-адрес назначения является подключенным устройством. Любая идея о том, как повлиять на подключенные устройства, взаимодействующие через точку доступа, будет принята с благодарностью. Также я не могу изменить программное обеспечение или конфигурацию на устройствах, подключенных к точке доступа. Я попробовал команды, подобные приведенным ниже на AP, но безуспешно.
tc qdisc change dev wlan0 корневая задержка netem 100 мс 10 мс
tc qdisc change dev wlan0 потеря корневых сетей 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 ответ
Вы должны быть в состоянии использовать netem для этой цели, не требуя iptables. Вы можете объединить задержку и потерю, которые вам требуются, в одном экземпляре netem.
Однако каждый qdisc по умолчанию обрабатывает только исходящий трафик на своем интерфейсе. Входящий трафик включает в себя другой путь, и вы должны поместить отдельный qdisc на этот путь, чтобы повлиять на них. Вы можете либо присоединить второй экземпляр netem к интерфейсу Ethernet, либо направить входящий трафик 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, но я не думаю, что это необходимо в вашем случае.