Эмуляция сетевых проблем с помощью WANem

Что такое WANem? Это дистрибутив на основе knoppix, который позволяет эмулировать различные условия сетевого подключения клиентов. В первую очередь, это полезно для тестирования и отладки приложений, которым предстоит работать в не-пойми-каких условиях без физического погружения в эти самые условия. Правила для работы можно создавать как вручную, так и через более-менее удобный web-интерфейс.

Как применять WANem?
Взять любую систему виртуализации и загрузить в ней LiveCD. Или, если вы используете решения VMWare — скачать готовую виртуальную машину. В дальнейшем я буду исходить из загрузки с LiveCD.

Подготовка

  1. Создаем новую виртуальную машину (1core/256ram будет вполне достаточно), указываем источником загрузки LiveCD
  2. Подтверждаем загрузку с LiveCD
  3. Подтверждаем конфигурацию всех сетевых интерфейсов через DHCP (или отказываемся, и позже указываем IP вручную)
  4. Стартовый скрипт создает юзера perc и спрашивает, какой пароль ему установить (ssh разрешен по умолчанию)
  5. Указав пароль, мы можем подключиться к SSH
  6. Мы попадаем в интерфейс командной строки WANem. Начнем с простой команды help, которая выведет список всех доступных команд с их кратким описанием
    • help — вывод помощи
    • about — вывод версии и копирайтов
    • clear — очистка экрана
    • reset — сброс сетевых настроек и перезапуск сервисов
    • shutdown — выключение системы
    • restart — перезапуск системы
    • status — вывод текущего статуса системы (IP-адреса, маршруты, состояния сервисов)
    • wanemreset — сброс правил самого WANem (если вы там намудрили злого и доступ к web-интерфейсу плохо работает)
    • assign — указать IP-адрес вручную (если ранее отказались от DHCP)
    • quit — выйти из консоли WANem

базовая настройка wanem 3Открываем в браузере http://IP виртуалки/WANem/ и видим интерфейс для управления. Из меню доступны:

  • WANalyzer — простое средство проверки параметров и свойств соединения, выдающее вот такие результаты
  • Basic Mode — простой режим настроек эмуляции, позволяющий ограничить пропускную способность и добавить задержку обработки пакетов в миллисекундах
  • Advanced Mode — расширенный режим настроек эмуляции, позволяющий указывать не только более детальные настройки, но и их временное распределение, что приближает эмуляцию еще на шаг ближе к реальности.
  • Save/Restore — сохранение текущих настроек в локальный файл профиля для повторного использования (пример формата)

Проверка работоспособности
базовая настройка wanem 3 Внутри себя WANem оперирует правилами, которые можно задавать явно в Advanced Mode, или по-простому выбирать из доступных в Basic Mode. Самый простой сценарий применения — включить режим, скажем ISDN 128 Kbps и задержку в 500 миллисекунд. После сохранения этих настроек нужно скомандовать машине, на которой установлено тестовое приложение, направлять весь свой трафик через WANem.

  • Windows: route add * mask 255.255.255.255 WANemIPaddress
  • Debian: route add default gw WANemIPaddress eth0
  • Всякие другие ОС: http://tinyurl.com/4yovdph

После этого нехитрого действия достаточно сделать traceroute от тестовой машины до внешнего мира и убедиться, что первый хоп — это IP виртуалки с WANem и что задержка пакетов ±совпадает с заданной в настройках.

Тонкая настройка
Тонкая настройка wanem 4 Убедившись с помощью Basic Mode, что наша тестовая станция заворачивает весь сетевой трафик через эмулятор, можно переходить к более тонкой настройке. В первую очередь, стоит обратить внимание на обширные настройки случайного распределения задержек, ошибок и патерь покетов потерь пакетов. Очередной небольшой шажок к реалистичности эмуляции.
Заранее расшифрую самые непонятные опции:

  • MTTF — среднее время до возникновения ошибки
  • MTTR — среднее время до восстановления после ошибки
  • Jitter — в контексте IP-сетей термин детально раскрыт в RFC 3393, а вкратце — это разница (в миллисекундах) между задержкой доставки пары пакетов

Например можно задать параметры пропадания и восстановления связи, можно сэмулировать наличие соединения но непрохождение пакетов с данными, потерю или повреждение % пакетов.
При необходимости WANem может работать с несколькими сетевыми интерфейсами одновременно (создавая для них разные правила), что позволяет реализовать самую изощренную сетевую конфигурацию.

Альтернативы WANem
Мне известен платный продукт для Windows, под названием SoftPerfect Connection Emulator ($99/$149).
UPD: Для OS X goshakkk_reborn рекомендует Network Link Conditioner из XCode.

Выводы
Отличный, достаточно простой и эффективный инструмент. Мне лично немного не хватает логирования на стороне WANem, но подозреваю, что это решается third-party утилитами, с которыми еще предстоит разобраться.

Вот пара примеров профилей, которые мы использовали для тестов: CDMA EV-DO rev.A, EDGE.

Официальный сайт: wanem.sourceforge.net/, дистрибутив ~400мб
Последняя версия: 2.3, 15.03.2011

<

p style=”text-align: right;”>автор: MadCat