У меня проблема, при которой мне нужно обработать некоторые пакеты и отправить их более чем в один интерфейс / сеть.
] Мое решение состоит в том, чтобы отправить пакет в замкнутый / фиктивный интерфейс, и на основе таблицы маршрутизации Linux пакет должен быть направлен на соответствующий интерфейс / сеть.
Проблема: пакеты из приложения отправляются в замкнутый / фиктивный интерфейс, но не пересылается на основе таблицы маршрутизации.
Есть ли способ переадресовать пакет из замкнутого / фиктивного интерфейса на основе таблицы маршрутизации?
Я попытался принять пакет в цепочке FORWARD в iptables, но пакет сюда не поступал. Устал включать / ipv4 / ip_forwarding, это тоже не помогло.
редактировать Мое устройство - это промежуточное устройство, которое собирает пакеты с одного интерфейса (WAN), обрабатывает каждый пакет и пересылает его в нужное место назначения (другую локальную сеть). Теперь моя проблема в том, что я не знаю, какой интерфейс отправлять, так как количество выходных интерфейсов n. Мне нужно направить пакет на основе ip.dst во входящем пакете.
Проблема решена с использованием VETH и пространства имен вместо фиктивного / замкнутого интерфейса.
Я думаю, вы слишком долго об этом думаете.
Если ваше приложение является сервером, вы просто привязываетесь к 0.0.0.0
, который будет прослушивать ВСЕ доступные локальные интерфейсы ( это будет работать по мере добавления / удаления интерфейсов). Если вы просто ответите на сокет, возвращаемый accept ()
, когда клиент подключается, он автоматически выберет правильный локальный IP-адрес для ответа, и он будет перенаправлен через правильный интерфейс.
Если ваш приложение инициирует соединение с удаленным компьютером, тогда вам нужно будет знать адрес хоста заранее, чтобы установить правильный адрес назначения, вы не можете просто отправить один пакет и ожидать, что ОС отправит его через все интерфейсы, если вы используете одноадресную передачу. Для этого вам НЕОБХОДИМО отслеживать все активные интерфейсы на вашем компьютере, а затем получить IP-адрес назначения на основе локального адреса / подсети.