Поиск по сайту:

Подключитесь к Wi-Fi из терминала в Ubuntu 22.04/20.04 с помощью WPA Supplicant

В этом уроке мы научимся подключаться к сети Wi-Fi из командной строки на сервере и настольном компьютере Ubuntu 22.04/20.04 с помощью wpa_supplicant. В современной домашней беспроводной сети связь защищена с помощью WPA-PSK (предварительный общий ключ), в отличие от WPA-Enterprise, который предназначен для корпоративных сетей. WPA-PSK также известен как WPA-Personal. wpa_supplicant — это реализация компонента-запрашивателя WPA. Соискателем в беспроводной локальной сети является клиентское программное обеспечение, установленное на компьютере конечного пользователя, которое необходимо пройти аутентификацию для подключения к сети.

Обратите внимание, что перед подключением к Wi-Fi вам необходимо будет установить программное обеспечение wpa_supplicant, поэтому сначала вам необходимо подключиться к проводному Ethernet, что делается только один раз. Если вам не нравится этот метод, пожалуйста, не сердитесь на меня. Возможно, когда-нибудь Ubuntu выпустит wpa_supplicant при чистой установке.

Шаг 1. Найдите имя вашего беспроводного интерфейса и беспроводной сети.

Запустите команду iwconfig, чтобы найти имя вашего беспроводного интерфейса.

iwconfig

wlan0 раньше было общим именем беспроводного сетевого интерфейса в системах Linux без Systemd. Поскольку Ubuntu использует Systemd, вы обнаружите, что ваш интерфейс беспроводной сети называется примерно так: wlp4s0. Вы также можете видеть, что сейчас он не связан ни с одной точкой доступа.

Если ваш беспроводной интерфейс не отображается, возможно, вам нужно вызвать его с помощью следующей команды.

sudo ifconfig wlp4s0 up

Затем найдите имя своей беспроводной сети, просканировав близлежащие сети с помощью приведенной ниже команды. Замените wlp4s0 собственным именем беспроводного интерфейса. ESSID — идентификатор имени сети.

sudo iwlist wlp4s0 scan | grep ESSID

Шаг 2. Подключитесь к сети Wi-Fi с помощью WPA_Supplicant.

Теперь установите wpa_supplicant в Ubuntu 22.04/20.04 из репозитория программного обеспечения по умолчанию.

sudo apt install wpasupplicant

Нам нужно создать файл с именем wpa_supplicant.conf с помощью утилиты wpa_passphrase. wpa_supplicant.conf — это файл конфигурации, описывающий все сети, к которым пользователь хочет подключить компьютер. Запустите следующую команду, чтобы создать этот файл. Замените ESSID и парольную фразу Wi-Fi на свои собственные.

wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee /etc/wpa_supplicant.conf

Обратите внимание, что на приведенном выше снимке экрана я заключил свой ESSID в двойные кавычки, поскольку мой ESSID содержит пробелы.

Вывод команды wpa_passphrase будет передан в tee, а затем записан в файл /etc/wpa_supplicant.conf. Теперь используйте следующую команду для подключения беспроводной карты к точке беспроводного доступа.

sudo wpa_supplicant -c /etc/wpa_supplicant.conf -i wlp4s0

Следующий вывод показывает, что ваша беспроводная карта успешно подключена к точке доступа.

Successfully initialized wpa_supplicant
wlp4s0: SME: Trying to authenticate with c5:4a:21:53:ac:eb (SSID='.Com Network' freq=2437 MHz)
wlp4s0: Trying to associate with c5:4a:21:53:ac:eb (SSID='.Com Network' freq=2437 MHz)
wlp4s0: Associated with c5:4a:21:53:ac:eb
wlp4s0: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
wlp4s0: WPA: Key negotiation completed with c5:4a:21:53:ac:eb [PTK=CCMP GTK=CCMP]
wlp4s0: CTRL-EVENT-CONNECTED - Connection to c5:4a:21:53:ac:eb completed [id=0 id_str=]

Обратите внимание: если вы используете настольную версию Ubuntu, вам необходимо остановить Network Manager с помощью следующей команды, иначе это вызовет проблемы с подключением при использовании wpa_supplicant.

sudo systemctl stop NetworkManager

И отключите автозапуск NetworkManager во время загрузки, выполнив следующую команду.

sudo systemctl disable NetworkManager-wait-online NetworkManager-dispatcher NetworkManager

По умолчанию wpa_supplicant работает на переднем плане. Если соединение установлено, откройте другое окно терминала и запустите

iwconfig

Вы можете видеть, что беспроводной интерфейс теперь связан с точкой доступа.

Вы можете нажать CTRL+C, чтобы остановить текущий процесс wpa_supplicant и запустить его в фоновом режиме, добавив флаг -B.

sudo wpa_supplicant -B -c /etc/wpa_supplicant.conf -i wlp4s0

Хотя мы прошли аутентификацию и подключены к беспроводной сети, у нас пока нет IP-адреса. Чтобы получить частный IP-адрес от DHCP-сервера, используйте следующую команду:

sudo dhclient wlp4s0

Теперь ваш беспроводной интерфейс имеет частный IP-адрес, который можно отобразить с помощью:

ip addr show wlp4s0

Теперь вы можете получить доступ к Интернету. Чтобы освободить частный IP-адрес, запустите

sudo dhclient wlp4s0 -r

Подключение к скрытой беспроводной сети

Если ваш беспроводной маршрутизатор не передает ESSID, вам необходимо добавить следующую строку в файл /etc/wpa_supplicant.conf.

scan_ssid=1

Как показано ниже:

network={
        ssid=".Com Network"
        #psk="12345qwert"
        psk=68add4c5fee7dc3d0dac810f89b805d6d147c01e281f07f475a3e0195
        scan_ssid=1
}

Шаг 3. Автоматическое подключение во время загрузки

Чтобы автоматически подключаться к беспроводной сети во время загрузки, нам нужно отредактировать файл wpa_supplicant.service. Рекомендуется скопировать файл из каталога /lib/systemd/system/ в каталог /etc/systemd/system/, а затем отредактировать содержимое файла, поскольку мы не Я не хочу, чтобы новая версия wpa_supplicant переопределяла наши изменения.

sudo cp /lib/systemd/system/wpa_supplicant.service /etc/systemd/system/wpa_supplicant.service

Отредактируйте файл с помощью текстового редактора командной строки, например Nano.

sudo nano /etc/systemd/system/wpa_supplicant.service

Найдите следующую строку.

ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant

Измените его на следующее. Здесь мы добавили файл конфигурации и имя беспроводного интерфейса в команду ExecStart.

ExecStart=/sbin/wpa_supplicant -u -s -c /etc/wpa_supplicant.conf -i wlp4s0

Рекомендуется всегда пытаться перезапустить wpa_supplicant при обнаружении сбоя. Добавьте следующее прямо под строкой ExecStart.

Restart=always

Если вы можете найти следующую строку в этом файле, закомментируйте ее (добавьте символ # в начале строки).

Alias=dbus-fi.w1.wpa_supplicant1.service

Сохраните и закройте файл. (Чтобы сохранить файл в текстовом редакторе Nano, нажмите Ctrl+O, затем нажмите Enter для подтверждения. Чтобы выйти, нажмите Ctrl+X. ) Затем перезагрузите systemd.

sudo systemctl daemon-reload

Включите службу wpa_supplicant, чтобы она запускалась во время загрузки.

sudo systemctl enable wpa_supplicant.service

Нам также необходимо запустить dhclient во время загрузки, чтобы получить частный IP-адрес от DHCP-сервера. Этого можно добиться, создав сервисный модуль systemd для dhclient.

sudo nano /etc/systemd/system/dhclient.service

Поместите следующий текст в файл.

[Unit]
Description= DHCP Client
Before=network.target
After=wpa_supplicant.service

[Service]
Type=forking
ExecStart=/sbin/dhclient wlp4s0 -v
ExecStop=/sbin/dhclient wlp4s0 -r
Restart=always
 
[Install]
WantedBy=multi-user.target

Сохраните и закройте файл. Затем включите эту услугу.

sudo systemctl enable dhclient.service

Как получить статический IP-адрес

Если вы хотите получить статический IP-адрес, вам необходимо отключить dhclient.service.

sudo systemctl disable dhclient.service

Нам нужно использовать netplan для настройки статического IP-адреса в Ubuntu 22.04/20.04. Создайте файл конфигурации в /etc/netplan/.

sudo nano /etc/netplan/10-wifi.yaml

Добавьте в этот файл следующие строки. Замените 192.168.0.102 на предпочитаемый вами IP-адрес. Пожалуйста, будьте осторожны с отступами. Дополнительное пространство сделает конфигурацию недействительной.

network:
    ethernets:
        wlp4s0:
            dhcp4: no
            addresses: [192.168.0.102/24]
            gateway4: 192.168.0.1
    version: 2

Сохраните и закройте файл. Затем примените конфигурации.

sudo netplan apply

Вы также можете включить опцию --debug, если она не работает должным образом.

sudo netplan --debug apply

Если в каталоге /etc/netplan/ есть другие файлы .yaml, то netplan автоматически объединит конфигурации из разных файлов. netplan использует systemd-networkd в качестве внутреннего средства сетевого рендеринга. Рекомендуется настроить запуск wpa_supplicant.service перед запуском systemd-networkd.service, чтобы система сначала связывалась с точкой доступа Wi-Fi, а затем получала частный IP-адрес. .

sudo nano /etc/systemd/system/wpa_supplicant.service

Найдите следующую строку.

Before=network.target

Измените его на:

Before=network.target systemd-networkd.service

Сохраните и закройте файл.

Другой способ получить статический IP-адрес — войти в интерфейс управления вашего маршрутизатора и назначить статический IP-адрес MAC-адресу вашей беспроводной карты, если ваш маршрутизатор поддерживает эту функцию.

Использование имени хоста для доступа к службам в Ubuntu

На самом деле вам не обязательно получать статический IP-адрес для вашего компьютера с Ubuntu. Ubuntu может использовать mDNS (многоадресную DNS) для объявления своего имени хоста в локальной сети, и клиенты могут получать доступ к службам на вашем компьютере Ubuntu с этим именем хоста. Это имя хоста всегда можно преобразовать в IP-адрес вашего компьютера с Ubuntu, даже если IP-адрес изменится.

Чтобы использовать mDNS, вам необходимо установить avahi-daemon, который представляет собой реализацию mDNS/DNS-SD с открытым исходным кодом.

sudo apt install avahi-daemon

Запустите службу.

sudo systemctl start avahi-daemon

Включите автозапуск во время загрузки.

sudo systemctl enable avahi-daemon

Avahi-daemon прослушивает UDP 5353, поэтому вам необходимо открыть этот порт в брандмауэре. Если вы используете UFW, выполните следующую команду.

sudo ufw allow 5353/udp

Затем вам следует установить уникальное имя хоста для вашего компьютера Ubuntu с помощью команды hostnamectl. Замените ubuntubox на предпочитаемое имя хоста, которое не должно быть занято другими устройствами в локальной сети.

sudo hostnamectl set-hostname ubuntubox

Теперь перезапустите avahi-daemon.

sudo systemctl restart avahi-daemon

Если вы проверите статус с помощью

systemctl status avahi-daemon

вы можете увидеть имя хоста mDNS, которое заканчивается доменом .local.

На клиентском компьютере также необходимо установить программное обеспечение mDNS/DNS-SD.

  • Пользователям Linux следует установить avahi-daemon.
  • Пользователям Windows необходимо включить службу Bonjour, установив службу печати Bonjour или установив iTunes.
  • В macOS предустановлен Bonjour.

Теперь вы можете получить доступ к службам, используя имя хоста ubuntubox.local, что избавляет от необходимости проверять и вводить IP-адрес.

Разблокировать Wi-Fi на Raspberry Pi

ОС Ubuntu ARM для Raspberry Pi по умолчанию блокирует беспроводной интерфейс. Вам необходимо разблокировать его с помощью:

sudo rfkill unblock wifi

Чтобы разблокировать его во время загрузки, создайте сервисный модуль systemd.

sudo nano /etc/systemd/system/unblock-wifi.service

Добавьте в него следующие строки.

[Unit]
Description=RFKill Unblock WiFi Devices
Requires=wpa_supplicant.service
After=wpa_supplicant.service

[Service]
Type=oneshot
ExecStart=/usr/sbin/rfkill unblock wifi
ExecStop=
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Сохраните и закройте файл. Включите автозапуск во время загрузки.

sudo systemctl enable unblock-wifi

Я обнаружил, что unblock-wifi.service должен запускаться после запуска wpa_supplicant.service, иначе он не сможет разблокировать Wi-Fi. Обратите внимание: если вы установили среду рабочего стола, возможно, работает сетевой менеджер, который может мешать соединению. Вам необходимо отключить его. Например, я использую облегченную среду рабочего стола LXQT на Raspberry Pi (sudo apt install lubuntu-desktop), и мне нужно отключить connman.service и NetworkManager.service.

sudo systemctl disable connman.service NetworkManager.service

Рекомендуется к прочтению

  • Как использовать Systemd в Linux — управление службами, уровнями запуска и журналами

Несколько сетей Wi-Fi

Файл конфигурации /etc/wpa_supplicant.conf может включать несколько сетей Wi-Fi. wpa_supplicant автоматически выберет лучшую сеть на основе порядка сетевых блоков в файле конфигурации, уровня безопасности сети и уровня сигнала.

Чтобы добавить вторую сеть Wi-Fi, запустите

wpa_passphrase your-ESSID your-wifi-passphrase | sudo tee -a /etc/wpa_supplicant.conf

Обратите внимание, что вам нужно использовать опцию -a с командой tee, которая добавит вместо удаления исходного содержимого новую сеть Wi-Fi в файл.

Безопасность Wi-Fi

Не используйте WPA2 TKIP или WPA2 TKIP+AES в качестве метода шифрования на маршрутизаторе Wi-Fi. TKIP больше не считается безопасным. В качестве метода шифрования вы можете использовать WPA2-AES.

Для сетей WPA2 следует использовать очень длинный пароль. Я использую инструмент командной строки pwgen для генерации случайного пароля из 63 символов.

sudo apt install pwgen

pwgen -sy 63

pwgen распечатает список случайных паролей. Вам нужно выбрать одну из строк в качестве пароля.

PjF<OUz/W0`t[6!%mcP1?wLo&"y+iCF7_48nJjv.@>/qT:3/F\>4k:_>)1lKf:I
o*S+CEKf]I~\MudHu9}r%cjv@wE&^*7Wpuf5#%6y8"SlsaHlJ9;lCMYO6d"LHzz
093=t.'$g[!#twvgrY[t"d?J0!j9c\|el,;HhieC<gETlT=AK(z^T["w@o*kLsI
h&agCTMcjFQ<6NIk43&QP3'0N]wc;R1Nv=#)7cDlbdIl|or#3SM&nfU><~g;gb/
v`"<U=bkl0WJ\@~W5Gj*r?Khmgc_n@'`'qmRqg;"/Kz$$nP4G_/h%=MU|=ksp1"
Q}p4UcN*4)JNLox?!b(~7znsKARI]j{N5v5s=DcUuVuE,_H}N):/^P@<eFxlqIP
zsX#nkGWX]-GT1&-8g6E8$htcv_sq7V7DWTRg.^r].$w"=>vswoxcV_Yi#Ji=Pw
PVhk7]=kBMO3]S;Bb<`\?]CC5=|Lt/t%Sb>PaLLC3>3u!zguCcd$1P!.a@CR/cB
4Lgi3ZB(pGaM+(X#f."A6HC3lSbJQPUTJ5NWCWlG3q9[nB9#Z##sR(<VPi&IsL|
R]@klw4qRf&=(`/jcC6KcsQ~)*Mz7qJtfv.G7Ha}M@/hM]wv^=`nQAe$T.;{b}b
(M0^bIXjGNHdXwH.\C(b8`f3T}mU?C_v+PCz6>bACEV'<p*7%bagbKbL?UxN$g7
L1]6EI=0}N[LF9OGk)|#fnaCMc@7o;?<5pQp;3nEKp/421Zd=`JZ"3=W{#m%Y>)
"N*#43Nmf~R?i1<}vePGah;TU4_pJdg,tBSx-3T$;>dqYXA@1Hq3nwvAqX{dwgh
;Mhc7`G2ola&5FjoeiO9"$*%uE@i<}QL|";E2vkOY(Y4QNk5-<lI2`.}ZQ?lOXP
eUV=}'h*08owz%?J"r+:j@V)*jDEZQ%:eK(j9w%L$e`T]`d6[\E-kWmLsClqO/c
RY;2[88jqTjgg)gE5g[to8.$6rW45|cob~8i#jZt@Uf;wd0n`V2C#?Q}uL}i@@E
4jEZaxaw?rqFy8jVD@vlC(WE#Wxyu^aE#Y|x:=@yXk>A8utviqctR/D9Qe$VW[x
cZ<yeyj&&h\'09mK}mS1JXV`;#0@c}rI&9`$Oz86Brd^kDmGokQy_pQQGR2gNEJ
2pmK"wLx<8]|*E*jEuYC]g-vaow-YJ,XR?0m"W|`^y"@7i~n47/#cunU:t3j/4M
;_"phXzS2YACUeJuX6c99l.H&tYOW(@Qoa1?BKg|dn`6C!S``POteF\)m\?p-J)

Чтобы пользователям смартфонов было проще подключиться к вашей сети, вы можете использовать утилиту командной строки qrencode для создания QR-кода, который будет сохранен как wi-fi.png файл.

sudo apt install qrencode

sudo qrencode -o wi-fi.png -s 10 'WIFI:S:your_ssid;T:WPA;P:your_password;;'

Затем отсканируйте QR-код своим смартфоном, и вы сможете подключиться к беспроводной сети. Я распечатываю этот QR-код на принтере и помещаю его на маршрутизатор Wi-Fi, чтобы мои гости могли легко подключиться к моей домашней сети.

Подведение итогов

Я надеюсь, что это руководство помогло вам подключить Ubuntu 22.04/20.04 к сети Wi-Fi из командной строки с помощью WPA Supplicant. Как всегда, если этот пост оказался для вас полезным, подпишитесь на нашу бесплатную рассылку, чтобы получать больше советов и подсказок 🙂

Статьи по данной тематике