Назад | Перейти на главную страницу

простая настройка для формирования трафика

У меня есть:

+---------------+          
|  switch S     +-------+  
+---+--------+--+       |  
    |        |       +--+-+
    |        |       | gw |
 +--+-+   +--+-+     +----+
 | A  |   | B  |           
 +----+   +----+

Просто для некоторых целей тестирования мне нужно формировать трафик исходящий от A до того, как он достигнет шлюза G. Я вводю трафик в A на уровне Mac с tcpreplay, поэтому я не могу формировать прямо на A.

Моя идея:

Мое решение в порядке? Есть ли более простой вариант, который не требует двух сетевых интерфейсов (Ethernet) на B?

Был бы виртуальный сетевой интерфейс на B облегчить мою жизнь?

Какие типичные команды мне нужны для развертывания вышеуказанного параметра (исключая формирование трафика)?

Для этого не нужно проделывать какие-либо уловки с маршрутизацией и виртуальный интерфейс.

Вы просто формируете свой трафик, когда он покидает систему A.

Обрисуйте в общих чертах, что вы хотите сделать, и написать для этого правило «tc» - нетрудно.

Например, скажем, вы хотите ограничить A до 1 Мбит / с для всего исходящего трафика:

# Flush tc
tc qdisc del dev eth0 root &> /dev/null

tc qdisc add dev eth0 root handle 1: htb default 1
tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit

Готово.

Запустите тест скорости из A, и вы увидите, что ваш входящий трафик, вероятно, не пострадает, но ваш исходящий трафик ограничен 1 Мебибит в секунду.

Почему я говорю "входящий" наверное незатронутый »? Потому что, если у вас очень высокая входящая скорость, ваши ACK-пакеты мощь превысите ограничение в 1 Мбит и получите троттлинг. И если ваш ACK замедляется, ваш входящий трафик тоже.


Если вы не можете использовать tc или iptables на A - например, если ваш трафик невидим для tc / iptables - например, tcpreplay, тогда вам нужно вместо этого выполнить контроль трафика на B.

Для этого есть как минимум три следующих способа сделать это.

  1. Купите сетевую карту для B и поместите A / B1 в сеть 1, а B2 / шлюз в сеть 2. т.е. B становится шлюзом. Теперь используйте "tc", чтобы сформировать трафик A.

  2. Несколько домашних eth0 на B. т. Е. Eth0: 1 -> 172.16.5.0/24 и дайте A адрес в этой сети. Настройте B для пересылки трафика между eth0 и eth0: 1, отметьте и сформируйте трафик (tc), направляющийся к главному шлюзу.

  3. Используйте brctl для создания моста на eth0 и интерфейсов для A / B и B / gw, а также снова отметьте и сформируйте трафик (tc), направляющийся к главному шлюзу.

Некоторые идеи:

  1. Вы даже можете формировать исходящий трафик, исходящий от A и B, даже на GW!
  2. Если бы ваш коммутатор был немного умнее ... разве в нем нет встроенного Linux?
  3. Если вы маршрутизируете это через B, будьте осторожны, некоторые настройки сетевого флага потребуются на B для правильной обработки перенаправлений arp.

Основная проблема с вашим решением в том, что оно сделает сеть A зависимой от B. Ваша сеть будет более нестабильной.

Хотя ваше решение делает из B linux по сути интеллектуальный маршрутизатор на базе Linux. Если «gw» и «переключатель S» фиктивные, а B - умный, вы можете даже подумать о том, чтобы выбросить хотя бы один из них и сделать B своим настоящим шлюзом.