Pull to refresh

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

Reading time 3 min
Views 29K
Картинка для привлечения внимания Недавно один из заказчиков TestLab² пожелал узнать, как будет работать его инсталлятор (с закачкой всякого на лету) на разных каналах. Внезапно первые подходы показали, что нам везет и обычные edge, umts и wimax-каналы (не говоря о проводных) в нашей округе как-то уж очень хорошо работают.
Чтобы создать тяжелые условия мы нашли и применили специализированный инструмент WANem, о котором я расскажу под катом.

Что такое WANem?

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

Как применять WANem?

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

Подготовка WANem

  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 0.0.0.0 mask 0.0.0.0 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.
UPD: Для Windows x1shn1k подсказал также TMnetSim Network Simulator (freeware, есть версии ×32 и ×64)

Выводы

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

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

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

Articles