0 голосов вниз любимый

У меня есть 20-портовый коммутатор, подключенный к ПК с 20 сетевыми картами (1-к-1), и я хочу загрузить его трафиком. Конечно, настройка всех сетевых адаптеров с разными IP-адресами и запуск сценариев мой клиент / сервер (Python3) (или iperf3) будут генерировать только локальный трафик, если я не вытесню трафик через сетевые карты.

Я нашел (здесь) два основных «трюка» для достижения этой цели:

а.) Использование сетевого пространства имен:

[+] Это будет делать именно то, что я хочу, изолируя (как VM/docker) каждый сетевой адаптер в коробку

[+] Python3 поддерживает netns (Pyroute2)

[-] Не уверен, как открыть сокет в потоке netns/python (10 потоков x 2 (клиент / сервер))

б.) Используя призрачный IP (iptable: S/D-NAT + предварительная / пост-маршрутизация):

[+] Все сетевые адаптеры остаются в пространстве имен корневой сети (все еще могут собирать данные с помощью psutil) и настраиваются на глобальном уровне.

[+] Поточный сценарий Python TCP может запускаться без специальной библиотеки lib/ для поддержки netns.

[-] В случае перенастройки моей настройки (IPs, VLAN, ...) сценарий IPTable должен быть соответствующим образом адаптирован.

Я хотел бы знать, пропускаю ли я другую возможность здесь и / или если для.) Я все понял (все) неправильно (так как я не могу найти достойный пример с сокетом, открытым в одном скрипте Python для разных сетей ...)

2 ответа2

1

Я не уверен, в чем проблема с использованием python в сетевом пространстве имен - как только вы переместили интерфейс в пространство имен и запустили в нем интерпретатор python, вы можете просто открыть обычный сокет. Поскольку в пространстве имен только один сетевой адаптер, все будет правильно маршрутизировано.

Я не понимаю ваш второй метод, и я не понимаю, зачем вам нужен NAT.

Третий метод - настроить каждый сетевой адаптер с другим IP-адресом, сохранить их все в корневом пространстве имен и привязать приложения к определенному сокету. Это часть нормального сокета API; Мне нужно посмотреть, как это поддерживает Python, но я уверен, что это так. В качестве альтернативы, используйте что-то вроде socat для генерации сетевого трафика; у него есть опции для привязки к интерфейсам / адресам источника, и вам не нужно писать специальный скрипт Python.

редактировать

Ах, я, возможно, нашел точку отсчета, и почему вы думаете, что вам нужен NAT.

Если вы не просто хотите "загрузить коммутатор трафиком", но хотите, чтобы пункт назначения трафика был таким же, как и источник, у вас есть проблема: существуют различные меры предосторожности, которые предотвращают такой цикл маршрутизации, и "бумеранг" пакеты. Смотрите здесь для деталей. И да, для решения этой проблемы можно использовать NAT, но есть и более эффективные способы: с пространствами имен это действительно просто, и достаточно просто указать место назначения где-то еще (например, в пространстве имен или на другой машине, подключенной к коммутатору).

1

Чтобы действительно загрузить коммутатор, попробуйте многоадресную рассылку!

Использование socat или dvblast для многоадресной передачи петли небольшого видео с очень высоким качеством / пропускной способностью обеспечивает очень хороший генератор трафика, и многоадресный трафик всегда будет выходить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .