Вопрос или проблема
У меня установлена свежая 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 режим. Примените следующие шаги:
-
Остановите все процессы
wpa_supplicant
, которые могут блокироватьwlan0
.sudo pkill wpa_supplicant
-
Проверьте статус всех сетевых интерфейсов:
ip link
-
Переведите
wlan0
в ad-hoc режим вручную:sudo iwconfig wlan0 mode ad-hoc channel 1 essid "MyAdHoc"
-
Назначьте статический IP-адрес:
sudo ifconfig wlan0 192.168.144.1 netmask 255.255.255.0 up
-
Убедитесь, что изменения приняты и интерфейс активен:
ip addr show wlan0
-
Для проверки работы сети используйте сетевые утилиты, такие как
ping
илиtshark
, чтобы убедиться в наличии пакетов на интерфейсе.
В долгосрочной перспективе, для обеспечения надежной работы и автоматизации, рекомендуется:
- Обновить скрипты загрузки системы, чтобы проверять и настраивать
wlan0
в нужном режиме при каждом запуске. - Исследовать возможность настройки
wpa_supplicant
так, чтобы избежать создания ненужных сетей. - Проверить совместимость драйверов и версии ядра с деятельностью вашего адаптера WiFi.
Заключение
Устройство в ad-hoc сетях достаточно специфично и требует детального понимания порядка работы беспроводных интерфейсов. Использование подхода с временным отключением wpa_supplicant
— это решением вынужденное, но в ряде случаев оно помогает продемонстрировать наличие более глубокой проблемы в конфигурациях и взаимодействии модулей системы, которые могут быть впоследствии решены через обновления или корректировку сетевых политик.