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

Я ищу способ в Linux выполнить маршрутизацию на основе MAC-адреса источника.

Моя цель — иметь маршрутизатор со следующей маршрутизацией:

      echo 100 inbound >> /etc/iproute2/rt_tables
ip rule add iif eth0 priority 100 table inbound
ip route add default via <myproxy> dev eth1 table inbound

echo 200 returntosender >> /etc/iproute2/rt_tables
ip rule add iif eth1 priority 200 table returntosender
*use source MAC from the initial packet to find the next-hop through dev eth0*

Пакеты, попадающие на мой маршрутизатор на eth0, будут отправлены на eth1 на прозрачный прокси-сервер, который не изменяет источник/назначение уровня 3 или 4, и прокси-сервер отправит пакеты обратно на eth1. Затем маршрутизатору необходимо решить, куда пересылать пакеты, что должно быть основано на исходном MAC-адресе, откуда он получил исходный пакет на eth0.

Есть ли в Linux способ сделать это? Меня устраивает использование quagga/VyOS/frr или чего-либо еще, что позволит добиться этой цели. Я просто не нашел «переключение MAC»/«возврат отправителю»/«симметричный возврат»; механизма в Linux пока нет. Очевидно, он есть в некоторых проприетарных продуктах: https://www.kareemccie.com/2019/12/what-is-source-mac-address-based-routing.html

РЕДАКТИРОВАТЬ

      192.0.2.0/24 (TEST-NET-1)
198.51.100.0/25 (TEST-NET-2a)
198.51.100.128/25 (TEST-NET-2b)
203.0.113.0/25 (TEST-NET-3a)
203.0.113.128/25 (TEST-NET-3b)

client: 192.0.2.100/24 (TEST-NET-1)
routerA1: 192.0.2.1/24 (TEST-NET-1), 198.51.100.1/25 (TEST-NET-2a), and 203.0.113.1/24 (TEST-NET-3a)
routerA2: 192.0.2.2/24 (TEST-NET-1), 198.51.100.2/25 (TEST-NET-2a), and 203.0.113.2/24 (TEST-NET-3a)
routerAN: 192.0.2.N/24 (TEST-NET-1), 198.51.100.N/25 (TEST-NET-2a), and 203.0.113.N/24 (TEST-NET-3a) for 1<=N<=50
myrouter: 198.51.100.100/25 (TEST-NET-2a), 198.51.100.129/25 (TEST-NET-2b)
myproxy: 198.51.100.200/25 (TEST-NET-2b)
server: 203.0.113.222/25 (TEST-NET-3b)

L2 SRC | Client MAC     | RA1 MAC       | MyR MAC        | MyPrxy MAC     | MyR MAC        | RA1 MAC      
L2 DST | RA1 MAC        | MyR MAC       | MyPrxy MAC     | MyR MAC        | RA1 MAC        | NextHop MAC    
L3 SRC | 192.0.2.100    | 192.0.2.100   | 192.0.2.100*   | 192.0.2.100*   | 192.0.2.100    | 192.0.2.100  
L3 DST | 203.0.113.222  | 203.0.113.222 | 203.0.113.222* | 203.0.113.222* | 203.0.113.222  | 203.0.113.222
L4 SRC | 35555 (client) | 35555         | 35555*         | 35555*         | 35555          | 35555        
L4 DST | 80 (server)    | 80            | 80*            | 80*            | 80             | 80           
(* means maintaining L3/L4 at this point in the flow is not critical)

client      ->     routerA1     ->    myrouter   ->  myproxy   ->   myrouter   ->   routerA1      ->      server
       (TEST-NET-1)       (TEST-NET-2a)    (TEST-NET-2b)   (TEST-NET-2b)   (TEST-NET-2a)   (TEST-NET-3a,TEST-NET-3b)

Когда получает пакеты отrouterA1, он не увидит адрес L3 маршрутизатора A1, а только адрес L3 клиента и сервера.myproxyвыполнит некоторую обработку пакетов и вернет обработанные пакеты в , который должен вернуть пакеты маршрутизатору A1. Есть несколько случаевrouterAи правильный экземпляр должен использоваться для исходящего трафика, но единственный способ определить, какой экземпляр отправилmyrouterпакет находится по MAC-адресу источника.

RouterA в этом примере является «черным ящиком». Он будет обрабатывать один и тот же пакет дважды, когда пакеты передаются от клиента к серверу, и дважды, когда пакеты возвращаются с сервера на клиент. Т.е. он не будет постоянно зацикливать входящие пакеты обратно на мой маршрутизатор.

Проще говоря, myproxy — это просто еще один маршрутизатор со шлюзом по умолчанию myrouter. Т.е. все, что попадает на мой прокси, возвращается на мой маршрутизатор. Затем myrouter должен отправить пакеты обратно правильному экземпляру routerA на основе исходного MAC-адреса входящего пакета.

0 ответов

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