Как выполнить «маршрутизацию на основе MAC-адреса источника» с помощью nftables

(Это упрощенная версия: может ли Linux выполнять «маршрутизацию на основе MAC-адреса источника?» )

У меня есть устройство, которому необходимо направить исходящие пакеты обратно на интерфейс MAC, где были получены входящие пакеты. Это считается «маршрутизацией на основе MAC-адреса источника» или «обратным отправителем», поскольку только MAC-адрес источника будет использоваться для определения того, куда отправлять пакеты. IP-адреса уровня 3 и порты уровня 4 не смогут определить правильный следующий переход.

Сетевой поток будет выглядеть следующим образом:

        client1
     | NET-A
     v 1.  
+---------+   2.  +---------+ 
|         | ----> |         |
| router1 | NET-B |  myapp  | 
|         | <---- |         |
+---------+   3.  +---------+
     | NET-C
     v 4. 
  server1

Будет несколько экземпляров маршрутизатора (маршрутизатор1, маршрутизатор2, маршрутизатор3 и т. д.), и myapp (который является прозрачным прокси-сервером, что означает, что он не изменяет компоненты L3/L4) должен выбрать правильный экземпляр маршрутизатора для возврата пакетов. myapp не может выполнять обычную маршрутизацию на основе пункта назначения, поскольку пункт назначения L3 не определяет, какой маршрутизатор вообще отправил ему трафик.

Я надеюсь, что nftables сможет это сделать, но у меня очень мало опыта работы с nftables (гораздо больше с iptables, но пока он кажется недостаточным). Вот моя псевдологика для моего приложения с eth0, подключенным к NET-B.

Пакет, входящий на eth0

  1. Является ли пакет частью ранее наблюдаемого потока?

НЕТ: сопоставьте этот поток L3/L4 с исходным MAC-адресом и перейдите к шагу 2.

ДА: перейдите к шагу 2

  1. Обработать пакет и отправить пакет

Исходящий пакет на eth0

  1. Посмотрите поток в таблице, чтобы найти целевой MAC.

  2. Переслать пакет на целевой MAC

Это то, что может сделать nftables? Любые советы по началу работы приветствуются.

0 ответов

Другие вопросы по тегам