Настройка маршрутизатора для отбрасывания пакетов, задержки, поврежденных данных

13

Мне было интересно, есть ли у кого-нибудь опыт настройки среды, специально предназначенной для низкой производительности при отправке / получении запросов по сети. Я занимаюсь разработкой приложения и хотел бы сделать его устойчивым в чрезвычайно плохо работающих сетях. Кто-нибудь знает, возможно ли настроить маршрутизатор на:

  1. периодически отбрасывать пакеты
  2. периодически вводить задержку в пакетах
  3. поврежденные данные в пакетах (этот не требуется, так как для этого потребуется открыть пакет, изменить данные и обновить контрольную сумму, так как уровень TCP может обнаружить проблему такого типа)

Если это невозможно на маршрутизаторе, можно ли настроить компьютер для работы в качестве маршрутизатора и сделать это?

Большое спасибо!

отметка
источник

Ответы:

17

Если вы используете Linux в качестве маршрутизатора, у netfilter есть несколько способов запутаться в вашем пакетном трафике.

randomМодуль может быть использован , чтобы случайно отбрасывать пакеты. Например, это:

iptables -A FORWARD -m random --average 10 -j DROP

заставит маршрутизатор случайным образом отбрасывать пакеты со средней скоростью 10%.

Вы также можете испортить случайные пакеты с помощью цели XOR, например

iptables -A FORWARD -m random --average 1 -j XOR --key "junktoxortomypacket"

повредит 1% пересылаемых пакетов, XORing их с ключом, полученным из данной строки.

Стивен Понедельник
источник
Это звучит потрясающе! Спасибо Стивен! Вы когда-нибудь настраивали это? Какой Linux дистрибутив?
Отметить
Я успешно создал маршрутизаторы для небольших сетей с использованием Debian. Но на самом деле почти любой дистрибутив Linux с последним ядром должен работать нормально, так как netfilter встроен в ядро. На самом деле я никогда не пытался создать «плохой» маршрутизатор, как описано здесь, но это может быть интересным проектом для ленивого воскресного дня ...
Стивен Понедельник
Если вы используете iptables версии 1.3.5, приведенная выше команда может привести к ошибке с сообщением «iptables v1.3.5: Не удалось загрузить совпадение« random »». У меня сработала приведенная ниже команда - iptables -A FORWARD -m статистика --mode random - вероятность 0.2 -j DROP
prashantsunkari
3

Я успешно использовал WANem для моделирования условий сети WAN между Германией и Индией. WANem поставляется в виде загрузочного компакт-диска или виртуального устройства. Вы просто загружаете его, настраиваете необходимые свойства сети и затем маршрутизируете свой трафик через него. Цитирую официальное описание:

WANem - это эмулятор глобальной сети, предназначенный для обеспечения реального опыта работы с глобальной сетью / Интернетом при разработке / тестировании приложений в среде локальной сети. Как правило, разработчики приложений разрабатывают приложения в локальной сети, в то время как предполагаемая цель для этого может быть, клиенты получают доступ к тому же через глобальную сеть или даже Интернет. Таким образом, WANem позволяет группе разработчиков приложений настроить прозрачный шлюз приложений, который можно использовать для имитации характеристик WAN, таких как задержка в сети, потеря пакетов, повреждение пакетов, разъединения, переупорядочение пакетов, дрожание и т. Д. WANem можно использовать для моделирования глобальной сети. Условия сети для трафика данных / голоса и выпущены под широко приемлемой лицензией GPL v2.

knweiss
источник
2

Установите порт восходящей линии связи на 10 Мбит / с и полудуплекс, если можете. Затем используйте хост в сети, чтобы пропинговать сопли из него. Это должно кастрировать тебя прилично: D

SpacemanSpiff
источник
Также установите размеры пакетов на эхо-запросах, значительно превышающие стандартные. Это может быть действительно эффективным и простым способом имитации насыщенных / обычно плохих сетевых соединений - если вы можете нанести вред конкретному соединению, как было отмечено, целенаправленно установив его пропускную способность ниже, чем у «атакующей» машины.
Эндрю Барбер
Вы также можете связываться с MTU, выбрать настоящий размер для странного игрока :)
SpacemanSpiff