Как выполнить «маршрутизацию на основе 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
- Является ли пакет частью ранее наблюдаемого потока?
НЕТ: сопоставьте этот поток L3/L4 с исходным MAC-адресом и перейдите к шагу 2.
ДА: перейдите к шагу 2
- Обработать пакет и отправить пакет
Исходящий пакет на eth0
Посмотрите поток в таблице, чтобы найти целевой MAC.
Переслать пакет на целевой MAC
Это то, что может сделать nftables? Любые советы по началу работы приветствуются.