Формування трафіку (імітувати затримку та втрату пакету) у точці доступу Wi-Fi Linux


1

У мене налаштування Pi 3 B + як точка доступу Wi-Fi, і я хотів би імітувати затримки пакетів та втрату пакету для підключених пристроїв, що спілкуються через AP. Я думав, що можу досягти цього за допомогою tc та iptables, щоб викликати тремтіння та втрату пакетів для підключених пристроїв, що спілкуються через AP, але ці пакети не впливають. Єдині пакети, на які впливає, - це пакети від підключеного пристрою, який призначений для IP-адреси, - це пакети AP або AP, хто в IP-адреса, який є адресатом, є підключеним пристроєм. Будемо дуже вдячні за будь-яке розуміння того, як вплинути на підключені пристрої, що спілкуються через AP. Також я не можу змінювати програмне забезпечення або конфігурацію на пристроях, підключених до AP. Я успішно пробував команди, схожі на наведені нижче в AP.

tc qdisc змінити dev wlan0 root netem затримка 100ms 10ms

tc qdisc зміни dev wlan0 втрата кореня netem 0,1

iptables -D INPUT -m статистика --mode random - імовірність 0,2 -j DROP

iptables -D OUTPUT -m статистика --mode random - імовірність 0,2 -j DROP

iptables -D FORWARD -m статистика --mode random - імовірність 0,2 -j DROP

Відповіді:


1

Ви повинні мати можливість використовувати netem для цієї мети, не вимагаючи iptables. Ви можете поєднати потрібні вам затримки та втрати в одному екземплярі.

Однак кожен 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, але я не думаю, що це потрібно у вашому випадку.


Я спробував це, але з наступною командою без успіху, оскільки команда фільтра tc не працювала. Будь-які інші ідеї будуть дуже вдячні # modprobe ifb # ip встановити посилання dev ifb0 up # tc qdisc додати dev eth0 вхід # tc фільтр додати dev eth0 батьківський ffff: \ протокол ip u32 матч u32 0 0 flowid 1: 1 дію дзеркального виходу перенаправлення dev ifb0 # tc qdisc add dev ifb0 root netem затримка 750ms
user9773452

@ user9773452 Як саме команда tc filter "не працювала"? Чи було повідомлення про помилку?
Хроматикс

Це була помилка розбору
user9773452

@ user9773452 У такому випадку спробуйте версію в моїй відредагованій відповіді.
Хроматикс

Команди тепер працюють, але тільки пакунки, на які впливає, - це пакети від підключеного пристрою, який призначений для IP-адреси, - це AP або AP, хто вказує, хто в IP-адреса призначення - це підключений пристрій.
користувач9773452
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.