Теоретически: интерфейс TAP с родительским интерфейсом WIFI

Теоретически: интерфейс TAP с родительским интерфейсом WIFI

Я пытаюсь создать несколько интерфейсов Linux TAP и разрешить им отправлять/получать пакеты через один адаптер WIFI. Для всех намерений и целей я хотел бы, чтобы интерфейсы TAP действовали как полноценные сетевые адаптеры. Они должны иметь возможность запрашивать собственные адреса DHCP и взаимодействовать в локальной сети, как любой другой сетевой адаптер.

Мне удалось заставить это работать с адаптером Ethernet, но я слышал, что WiFi — это совсем другой зверь. Я не могу вспомнить точную причину, но это было как-то связано с «1 IP-адресом на адрес радиовещания».

Возможно ли, используя интерфейсы TAP, по сути, сделать мостовую сеть через соединение WiFi? Могу ли я выполнить какую-либо настройку с помощью networkmanager? Может кто-нибудь дать ссылку на статью или две? Мне сложно найти что-либо по этому поводу.

решение1

Эта ссылка Network Engineering SEЧетыре адреса уровня 2 в заголовке кадра 802.11достаточно хорошо объясняет разницу между Ethernet и Wi-Fi.

Wifi требует дополнительных MAC-адресов для связи: в дополнение к адресу отправителя (SA) и адресу назначения (DA), которые совпадают с MAC-адресами источника и назначения Ethernet, Wifi для работы нужны адрес передатчика (TA) и адрес приемника (RA): это составляет в общей сложности 4 MAC-адреса. Поскольку распространенным случаем является то, что когда клиент (STA) отправляет, TA = SA, а когда точка доступа (AP) отправляет STA, DA = RA, обычно требуется только 3 адреса, и именно так настраиваются AP: использовать только 3 адреса из 4 возможных.

Клиент в режиме моста означает, что выше TA != SA или DA != RA и все 4 адреса необходимы, в то время как AP настроен только на 3. Вот почему в обычных конфигурациях невозможно объединить Wi-Fi в мост. Режим 4 адресов должен быть включен как на AP, так и на STA для работы моста клиента. Обычно это называетсяБеспроводная система распределения (WDS), но, вероятно, существует несколько несовместимых реализаций. AP и все STA должны использовать совместимую реализацию.

Так:

  • Если системный мост — это точка доступа, то вы можете организовать мост Wi-Fi без проблем: именно это делают все точки доступа, используя режим 3 адресов по умолчанию.

  • Если система, пытающаяся создать мост, является простым клиентом (STA), это не сработает. Последние драйверы даже не позволят установить беспроводной интерфейс в качестве порта моста с такой ошибкой:

    # ip link set wlan0 master bridge0
    Error: Device does not allow enslaving to a bridge.
    
  • если вы можете настроитьобаAP и STA в совместимый WDS, например, если все они работают под управлением Linux с драйверами, совместимыми с mac80211, это можно включить на STA с помощью:

    # iw dev wlan0 set 4addr on
    

Тогда его можно поработить:

    # ip link set wlan0 master bridge0
    # ip link show wlan0
    3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noqueue master bridge0 state DOWN mode DEFAULT group default qlen 1000
    [...]

Некоторую документацию о режиме 4 адресов с командой iw можно найти на вики-сайте по беспроводным сетям Linux:Использование 4-адресного режима для точки доступа и клиента

Настройка точки доступа здесь не рассматривается. При использованииhostapd, есть специальная настройка для включения:

# WDS (4-address frame) mode with per-station virtual interfaces
# (only supported with driver=nl80211)
# This mode allows associated stations to use 4-address frames to allow layer 2
# bridging to be used.
#wds_sta=1

Все еще существует обходной путь, позволяющий использовать несколько контейнеров или виртуальных машин одновременно с отдельными IP-адресами через одно соединение Wi-Fi по умолчанию (режим с 3 адресами), но с использованием толькоодинMAC-адрес (тот, который используется как STA): это такобычно несовместим с DHCPкоторый по умолчанию полагается на MAC-адрес (если DHCP-сервер не принимаетидентификатор-клиента-dhcpвариант). Это называетсяIPVLAN(обычно для контейнеров) и его аналог TAP (обычно для виртуальных машин) называетсяИПВТАППри использовании в режиме L2 он выглядит как стандартный интерфейс Ethernet.

Для (простого)ip netnsсетевой) контейнер, который можно использовать следующим образом после того, как вы уже установили Wi-Fi-соединение в IP-сети LAN 192.0.2.0/24 со шлюзом 192.0.2.1 на хосте с использованием интерфейсаwlan0:

# ip netns add testwifi
# ip link add link wlan0 name ipvl0 type ipvlan mode l2
# ip link set dev ipvl0 netns testwifi up
# ip -n testwifi address add 192.0.2.99/24 dev ipvl0
# ip -n testwifi route add default via 192.0.2.1
# ip netns exec testwifi ping -q -c1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.372/5.372/5.372/0.000 ms

Я серьезно сомневаюсь, что у NetworkManager есть какая-либо опция, связанная с режимом 4 адресов. Что касаетсяIPVLAN/IPVTAPэто должно поддерживаться приложением контейнера/виртуализации, напримерLXCили libvirt (который, судя по всему, изначально не поддерживает IPVTAP), на самом деле не NetworkManager.

Связанный контент