У меня есть:
+---------------+ | 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.
Для этого есть как минимум три следующих способа сделать это.
Купите сетевую карту для B и поместите A / B1 в сеть 1, а B2 / шлюз в сеть 2. т.е. B становится шлюзом. Теперь используйте "tc", чтобы сформировать трафик A.
Несколько домашних eth0 на B. т. Е. Eth0: 1 -> 172.16.5.0/24 и дайте A адрес в этой сети. Настройте B для пересылки трафика между eth0 и eth0: 1, отметьте и сформируйте трафик (tc), направляющийся к главному шлюзу.
Некоторые идеи:
Основная проблема с вашим решением в том, что оно сделает сеть A зависимой от B. Ваша сеть будет более нестабильной.
Хотя ваше решение делает из B linux по сути интеллектуальный маршрутизатор на базе Linux. Если «gw» и «переключатель S» фиктивные, а B - умный, вы можете даже подумать о том, чтобы выбросить хотя бы один из них и сделать B своим настоящим шлюзом.