Слепой мост беспроводного клиента с 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, в котором:
Пакет приходит от
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)
Пакет приходит от
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)
Входящие 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 просто работают.