Это обычный вопрос «Я хочу связать 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
также обновите MAC-адрес ARP. Пример:
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
может это помочь?
Я знаю, что это старый вопрос, но мне нужно было решить именно эту проблему, и мне пришлось потратить несколько дней на то, чтобы найти лучший способ ее решения. https://xkcd.com/979/
Назовем интерфейсы на Linux box A (wlan0), B (vlan0) и клиентский хост C (vlan0). Итак, вам нужно что-то вроде моста между A и B (wlan0 и vlan0), за исключением того, что вы не можете связать эти интерфейсы в Linux (и WiFi STA все равно не заставит C работать).
Что я в итоге сделал и подтвердил, что это работает:
Демон открывает необработанные сокеты для чтения как из A, так и из B, фильтрации и передачи на другой интерфейс. Уловка состоит в том, чтобы фильтровать на основе MAC-адреса источника, чтобы избежать петель (исходящие должны быть такими же, как wlan0, входящие не должны быть wlan0).
Вот и все. ARP, DHCP, ping и HTTP просто работают.