Настройка произвольной WiFi сети с помощью netplan на Ubuntu 24.04 сервере на Raspberry Pi 5

Вопрос или проблема

У меня установлена свежая Raspberry Pi 5, на которую я установил Ubuntu 24.04 server (aarch). Пакеты wpasupplicant, iw и wireless-tools установлены, но в Raspberry Pi imager я не ввел данные для настройки WiFi. Я хотел бы настроить адаптер WLAN для работы в режиме ad-hoc с статически настроенным IP-адресом.

Я добавил следующую конфигурацию в файл 60-setup-myadhocnetwork.yaml в директорию /etc/netplan/:

network:
  version: 2
  wifis:
    wlan0:
      addresses: [192.168.144.1/24]
      dhcp4: false
      dhcp6: false
      access-points:
        "MyAdHoc":
          mode: adhoc
          band: 2.4GHz
          channel: 1

Я дважды проверил, что в этой конфигурации нет табов. Вывод sudo netplan --debug apply предполагает, что интерфейс wlan0 каким-то образом обрабатывается netplan, что конфигурация для wlan0 действительна, и ни одно из приведенных там сообщений не вызывает тревогу (если нужно, я могу предоставить вывод). Сгенерированный файл /run/netplan/wpa-wlan0.conf выглядит следующим образом:

ctrl_interface=/run/wpa_supplicant

network={
  ssid=P"MyAdHoc"
  frequency=2412
  mode=1
  key_mgmt=NONE
}

Проблема в том, что интерфейс wlan0 не активируется (как проверяется с помощью ip link), и tshark тоже ничего не захватывает на этом интерфейсе (хотя должен).

Вопрос: Кто-нибудь знает примеры конфигураций netplan, которые успешно настраивают WLAN в режиме ad-hoc на WiFi-адаптере на Raspberry Pi 5 с использованием Ubuntu 24.04 server?

Я должен добавить, что хотел бы избежать перехода на операционную систему Raspberry Pi (там я заставил адаптер WLAN работать так, как мне нужно, после редактирования /etc/network/interfaces и перезагрузки). Для некоторых вещей, которые мне нужно сделать, базовый Debian Bookworm просто слишком стар.

ОБНОВЛЕНИЕ, 7 февраля Вот вывод sudo lshw -C network:

  *-network                 
       description: Ethernet controller
       product: RP1 PCIe 2.0 South Bridge
       vendor: Raspberry Pi Ltd
       physical id: 0
       bus info: pci@0000:01:00.0
       version: 00
       width: 32 bits
       clock: 33MHz
       capabilities: pm pciexpress msix bus_master cap_list
       configuration: driver=rp1 latency=0
       resources: irq:41 memory:1f00410000-1f00413fff memory:1f00000000-1f003fffff memory:1f00400000-1f0040ffff
  *-interface:0
       description: Wireless interface
       product: 4345
       vendor: Broadcom
       physical id: 1
       bus info: mmc@1:0001:1
       logical name: mmc1:0001:1
       logical name: wlan0
       serial: 2c:cf:67:71:23:8f
       capabilities: ethernet physical wireless
       configuration: broadcast=yes driver=brcmfmac driverversion=7.45.234 firmware=01-996384e2 multicast=yes wireless=IEEE 802.11
  *-network
       description: Ethernet interface
       physical id: f
       logical name: eth0
       serial: 2c:cf:67:71:23:8e
       size: 1Gbit/s
       capacity: 1Gbit/s
       capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=macb driverversion=6.8.0-1018-raspi duplex=full ip=xx.yy.zz.ww link=yes multicast=yes port=twisted pair speed=1Gbit/s

А также вывод sudo netplan --debug apply:

** (generate:30441): DEBUG: 13:10:13.644: starting new processing pass
** (generate:30441): DEBUG: 13:10:13.644: starting new processing pass
** (generate:30441): DEBUG: 13:10:13.644: wlan0: adding wifi AP 'MyAdHoc'
** (generate:30441): DEBUG: 13:10:13.644: We have some netdefs, pass them through a final round of validation
** (generate:30441): DEBUG: 13:10:13.644: wlan0: setting default backend to 1
** (generate:30441): DEBUG: 13:10:13.644: Configuration is valid
** (generate:30441): DEBUG: 13:10:13.644: eth0: setting default backend to 1
** (generate:30441): DEBUG: 13:10:13.644: Configuration is valid
** (generate:30441): DEBUG: 13:10:13.645: Generating output files..
** (generate:30441): DEBUG: 13:10:13.645: Open vSwitch: definition eth0 is not for us (backend 1)
** (generate:30441): DEBUG: 13:10:13.645: NetworkManager: definition eth0 is not for us (backend 1)
** (generate:30441): DEBUG: 13:10:13.645: Creating wpa_supplicant config
** (generate:30441): DEBUG: 13:10:13.645: wlan0: Creating wpa_supplicant configuration file run/netplan/wpa-wlan0.conf
** (generate:30441): DEBUG: 13:10:13.645: Creating wpa_supplicant unit /run/systemd/system/netplan-wpa-wlan0.service
** (generate:30441): DEBUG: 13:10:13.650: Creating wpa_supplicant service enablement link /run/systemd/system/systemd-networkd.service.wants/netplan-wpa-wlan0.service
** (generate:30441): DEBUG: 13:10:13.651: Open vSwitch: definition wlan0 is not for us (backend 1)
** (generate:30441): DEBUG: 13:10:13.651: NetworkManager: definition wlan0 is not for us (backend 1)
DEBUG:netplan generated networkd configuration changed, reloading networkd
DEBUG:Cannot call Open vSwitch: Cannot apply OVS cleanup: ovsdb-server.service is 'not-found'.
DEBUG:no netplan generated NM configuration exists
** (process:30440): DEBUG: 13:10:15.168: starting new processing pass
** (process:30440): DEBUG: 13:10:15.170: starting new processing pass
** (process:30440): DEBUG: 13:10:15.170: wlan0: adding wifi AP 'MyAdHoc'
** (process:30440): DEBUG: 13:10:15.170: We have some netdefs, pass them through a final round of validation
** (process:30440): DEBUG: 13:10:15.170: wlan0: setting default backend to 1
** (process:30440): DEBUG: 13:10:15.170: Configuration is valid
** (process:30440): DEBUG: 13:10:15.170: eth0: setting default backend to 1
** (process:30440): DEBUG: 13:10:15.170: Configuration is valid
DEBUG:Merged config:
b''
DEBUG:Link changes: {}
DEBUG:netplan triggering .link rules for lo
DEBUG:netplan triggering .link rules for eth0
DEBUG:netplan triggering .link rules for wlan0
** (process:30440): DEBUG: 13:10:15.307: starting new processing pass
** (process:30440): DEBUG: 13:10:15.307: starting new processing pass
** (process:30440): DEBUG: 13:10:15.307: wlan0: adding wifi AP 'MyAdHoc'
** (process:30440): DEBUG: 13:10:15.307: We have some netdefs, pass them through a final round of validation
** (process:30440): DEBUG: 13:10:15.307: wlan0: setting default backend to 1
** (process:30440): DEBUG: 13:10:15.307: Configuration is valid
** (process:30440): DEBUG: 13:10:15.307: eth0: setting default backend to 1
** (process:30440): DEBUG: 13:10:15.307: Configuration is valid
DEBUG:Merged config:
b''

Вывод ip link:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 2c:cf:67:71:23:8e brd ff:ff:ff:ff:ff:ff
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DORMANT group default qlen 1000
    link/ether 2c:cf:67:71:23:8f brd ff:ff:ff:ff:ff:ff

Теперь мне удалось обойти проблему. Когда я попытался использовать команду sudo iwconfig wlan0 mode ad-hoc channel 1 essid "MyAdHoc", чтобы вручную перевести адаптер WLAN в режим ad-hoc, я получил ошибку ‘Устройство или ресурс заняты’. Оказалось, что wpa_supplicant по какой-то причине уже создал (на мой взгляд, ошибочную) peer-to-peer IBSS сеть. Для моего конкретного случая грубое, но работающее решение было просто убить все экземпляры wpa_supplicant, после чего я мог выполнять все необходимые команды iwconfig и другие. Это неустойчивое и недолговременное решение, но для моих целей этого достаточно.

.

Ответ или решение

Настройка сети ad-hoc WiFi на Raspberry Pi 5 под управлением Ubuntu 24.04 Server может представлять собой нетривиальную задачу, особенно если система не изначально сконфигурирована для таких задач. Рассмотрим, как можно решить проблему, основанную на описанном сценарии.

Теория

Сети ad-hoc позволяют устройствам напрямую взаимодействовать друг с другом без необходимости в центральной точке доступа или маршрутизаторе. Это может быть полезно для временных сетей или когда отсутствует доступ к традиционной инфраструктуре. Настройка ad-hoc сети включает в себя перевод беспроводного адаптера в соответствующий режим и назначение статического IP-адреса. На Ubuntu для настройки сетей чаще всего используются netplan, iw, wpa_supplicant и wireless-tools.

Пример

У вас возникли сложности с подъемом интерфейса wlan0 несмотря на то, что конфигурация YAML-файла 60-setup-myadhocnetwork.yaml выглядит корректно. Пример конфигурационного файла:

network:
  version: 2
  wifis:
    wlan0:
      addresses: [192.168.144.1/24]
      dhcp4: false
      dhcp6: false
      access-points:
        "MyAdHoc":
          mode: adhoc
          band: 2.4GHz
          channel: 1

Этот файл указывает netplan переводить интерфейс wlan0 в режим ad-hoc на частоте 2.4 ГГц с использованием 1 канала, устанавливая при этом статический IP-адрес 192.168.144.1.

Однако, как видно из результатов диагностики и технической информации, wpa_supplicant создает конфигурацию, которая инициализирует интерфейс в peer-to-peer IBSS сеть, что блокирует ваши попытки установить ad-hoc соединение.

Применение

Для того чтобы обойти данную проблему, вам стоит временно остановить процесс wpa_supplicant и вручную перевести интерфейс в ad-hoc режим. Примените следующие шаги:

  1. Остановите все процессы wpa_supplicant, которые могут блокировать wlan0.

    sudo pkill wpa_supplicant
  2. Проверьте статус всех сетевых интерфейсов:

    ip link
  3. Переведите wlan0 в ad-hoc режим вручную:

    sudo iwconfig wlan0 mode ad-hoc channel 1 essid "MyAdHoc"
  4. Назначьте статический IP-адрес:

    sudo ifconfig wlan0 192.168.144.1 netmask 255.255.255.0 up
  5. Убедитесь, что изменения приняты и интерфейс активен:

    ip addr show wlan0
  6. Для проверки работы сети используйте сетевые утилиты, такие как ping или tshark, чтобы убедиться в наличии пакетов на интерфейсе.

В долгосрочной перспективе, для обеспечения надежной работы и автоматизации, рекомендуется:

  • Обновить скрипты загрузки системы, чтобы проверять и настраивать wlan0 в нужном режиме при каждом запуске.
  • Исследовать возможность настройки wpa_supplicant так, чтобы избежать создания ненужных сетей.
  • Проверить совместимость драйверов и версии ядра с деятельностью вашего адаптера WiFi.

Заключение

Устройство в ad-hoc сетях достаточно специфично и требует детального понимания порядка работы беспроводных интерфейсов. Использование подхода с временным отключением wpa_supplicant — это решением вынужденное, но в ряде случаев оно помогает продемонстрировать наличие более глубокой проблемы в конфигурациях и взаимодействии модулей системы, которые могут быть впоследствии решены через обновления или корректировку сетевых политик.

Оцените материал
Добавить комментарий

Капча загружается...