Переслать пакет из интерфейса обратной связи на основе таблицы маршрутизации

У меня проблема, при которой мне нужно обработать некоторые пакеты и отправить их более чем в один интерфейс / сеть.

] Мое решение состоит в том, чтобы отправить пакет в замкнутый / фиктивный интерфейс, и на основе таблицы маршрутизации Linux пакет должен быть направлен на соответствующий интерфейс / сеть.

Проблема: пакеты из приложения отправляются в замкнутый / фиктивный интерфейс, но не пересылается на основе таблицы маршрутизации.

Есть ли способ переадресовать пакет из замкнутого / фиктивного интерфейса на основе таблицы маршрутизации?

Я попытался принять пакет в цепочке FORWARD в iptables, но пакет сюда не поступал. Устал включать / ipv4 / ip_forwarding, это тоже не помогло.

редактировать Мое устройство - это промежуточное устройство, которое собирает пакеты с одного интерфейса (WAN), обрабатывает каждый пакет и пересылает его в нужное место назначения (другую локальную сеть). Теперь моя проблема в том, что я не знаю, какой интерфейс отправлять, так как количество выходных интерфейсов n. Мне нужно направить пакет на основе ip.dst во входящем пакете.

-2
задан 26 November 2020 в 14:54
3 ответа

Проблема решена с использованием VETH и пространства имен вместо фиктивного / замкнутого интерфейса.

0
ответ дан 4 January 2021 в 10:29

Я думаю, вы слишком долго об этом думаете.

Если ваше приложение является сервером, вы просто привязываетесь к 0.0.0.0 , который будет прослушивать ВСЕ доступные локальные интерфейсы ( это будет работать по мере добавления / удаления интерфейсов). Если вы просто ответите на сокет, возвращаемый accept () , когда клиент подключается, он автоматически выберет правильный локальный IP-адрес для ответа, и он будет перенаправлен через правильный интерфейс.

Если ваш приложение инициирует соединение с удаленным компьютером, тогда вам нужно будет знать адрес хоста заранее, чтобы установить правильный адрес назначения, вы не можете просто отправить один пакет и ожидать, что ОС отправит его через все интерфейсы, если вы используете одноадресную передачу. Для этого вам НЕОБХОДИМО отслеживать все активные интерфейсы на вашем компьютере, а затем получить IP-адрес назначения на основе локального адреса / подсети.

0
ответ дан 4 January 2021 в 10:29

Учитывая комментарии, я думаю, вы, вероятно, захотите посмотреть на расширение iptables, поскольку это позволит вам перехватывать / изменять / повторно отправлять пакет на лету и просто позволить нормальной маршрутизации делать это.

например что-то вроде this

0
ответ дан 4 January 2021 в 10:29

Теги

Похожие вопросы