Слепой мост беспроводного клиента с MAC NAT

Это обычный вопрос "Я хочу соединить Wi-Fi с Ethernet", но мне нужно кое-что конкретное здесь.

Моя коробка Linux имеет wlan0 интерфейс, который находится в режиме станции, с MAC aa:aa:aa:aa:aa:aaи интерфейс VLAN (vlan0) с MAC bb:bb:bb:bb:bb:bb, Только один конкретный хост говорит со мной через VLAN, поэтому все пакеты, поступающие из VLAN, будут иметь MAC-адрес источника cc:cc:cc:cc:cc:cc,

И из-за трехадресного фрейминга в WiFi все пакеты, поступающие с wlan0 будет иметь MAC-адрес назначения aa:aa:aa:aa:aa:aa, Это правильно, или я упрощаю?


То, что я хочу сделать, это простой мост MAC NAT, в котором:

  1. Пакет приходит от wlan0 получает MAC-адрес назначения, измененный на cc:cc:cc:cc:cc:cc и вслепую отправил через VLAN.

    Got from wlan0                       Sent through vlan0
    SRC: whatever it is                  SRC: whatever it is
    DST: aa:aa:aa:aa:aa:aa      -->      DST: cc:cc:cc:cc:cc:cc
    (payload)                            (payload)
    
  2. Пакет приходит от vlan0 получает исходный MAC-адрес изменен на aa:aa:aa:aa:aa:aa и вслепую wlan0,

    Sent through wlan0                   Got from vlan0
    SRC: aa:aa:aa:aa:aa:aa               SRC: cc:cc:cc:cc:cc:cc
    DST: whatever it is         <--      DST: whatever it is
    (payload)                            (payload)
    
  3. Входящие ARP ответы от vlan0 также обновите ARP MAC. Пример:

    Sent through wlan0                   Got from vlan0
    SRC: aa:aa:aa:aa:aa:aa               SRC: cc:cc:cc:cc:cc:cc
    DST: whatever it is         <--      DST: whatever it is
    1.2.3.4 can be found at              1.2.3.4 can be found at
    aa:aa:aa:aa:aa:aa                    cc:cc:cc:cc:cc:cc
    

ebtables звучит как идеальный способ сделать это... если бы я только мог соединить два интерфейса вместе.
Любая идея? Я слышал о relaydМожет ли это помочь?

0 ответов

Я знаю, что это старый вопрос, но мне нужно было решить именно эту проблему, и мне пришлось потратить несколько дней на то, чтобы найти лучший способ ее решения. https://xkcd.com/979/

Назовем интерфейсы на Linux box A (wlan0), B (vlan0) и клиентский хост C (vlan0). Итак, вам нужно что-то вроде моста между A и B (wlan0 и vlan0), за исключением того, что вы не можете соединить эти интерфейсы в Linux (и WiFi STA все равно не заставит C работать).

Что я в итоге сделал и подтвердил, что это работает:

  • изменил MAC-адрес C (client vlan0) на тот же, что и A (host wlan0)
  • очищенные IP-адреса A, B и C
  • написал демон для перемещения кадров Ethernet между A и B

Демон открывает необработанные сокеты для чтения как из A, так и из B, фильтрации и передачи на другой интерфейс. Уловка заключается в фильтрации на основе MAC-адреса источника, чтобы избежать петель (исходящие должны быть такими же, как wlan0, входящие не должны быть wlan0).

Вот и все. ARP, DHCP, ping и HTTP просто работают.

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