Enabling WiFi Connection on Ubuntu Server 20.04.1 LTS
Servers are supposed to connect to the network with the plain-old copper cables. No doubt about that, but what if your home router stands on an unreachable position at your hallway and you have only 2 meters of network cable?
Hello from one of my other needless topic. 🙂 You may ask, why do I need a wifi connection on a server computer? Here is why: Quarantine is boring! I need to distract myself from the pandemic, endless recession in the country, future anxiety, etc.
Joking aside, I needed a home server to run a simple back-end application. Previously, I was using my “Raspberry Pi 3 Model B” for such cases, but this time I needed some more resources. So, I unearthed my old laptop computer from some drawer and started to install Ubuntu Server 20.04.1 LTS in it. That is how it began.
Before You Begin
- This post doesn’t have an answer for “setting up wifi with systemd-networkd and wpasupplicant together”. I couldn’t manage to setup wifi connection with this combination.
The post consists of 2 parts.
Seting up WiFi with NetworkManager
The first one is “I’ve a lot of time to read” part. By default, I’m debug-mode enabled, that means the content written by me is story-rich in the first place.
Step-by-Step Summary
The second one is “Just give me the recipe” part. If you’re chasing for a quick “how-to” answer.
Seting up WiFi with NetworkManager
- Install Ubuntu Server 20.04.1 LTS from a bootable disk.
- Ethernet auto configuration should fail and you should continue with selecting Continue without network at Network connections step.
- Setup a user account.
- Accept installing of OpenSSH server.
- Then login with your user credentials.
- In short, select all defaults and additionally, select Install Select OpenSSH option to enable remote access by SSH.
For the starters, I’ll get my server’s network interfaces and their assigned IP addresses, if there are any. There are tons of ways to do the same thing in Linux terminal environment. To get the assigned IP addresses to the network interfaces, we may use ip address command:
For a basic laptop computer, expected network interfaces are, an active loopback interface (which controls your localhost ) and two passive interfaces; one for ethernet device and one for wifi interface. Here is my result:
- lo up 127.0.0.1/8
- enp1s0 down no-ip-assigned
- wlp2s0 down no-ip-assigned
Now we know our network interfaces. It is predictable that wlp2s0 is the wireless interface and enp1s0 is the ethernet interface. To be sure you may list hardware devices with:
Next step is configuring server networking with Netplan utility. Netplan is the helper tool to configure networking on Linux servers with text-based description files in YAML-syntax. I’ll skip definitions for the utility. You can check utility webpage at netplan.io. This page is also the primary source for most of this writing.
Netplan has a default configuration file at the /etc/netplan/ directory. To edit its content in the terminal window, run:
Initially, you should have an empty configuration like below:
With these configuration files, you won’t have a persistent network configuration object for your system. It will be auto-generated dynamically at system boot time or when you call one of these commands, sudo netplan apply or sudo netplan try from these YAML configuration files.
Netplan supports two renderers, networkd (default) and NetworkManager. We’ll change default renderer. It is possible to set renderer globally, at device-type level or to a specific device configuration.
I’ll use NetworkManager as renderer, and add it at device-level to my wireless interface which is wlp2s0.
This is how the updated configuration file is supposed to look like:
Update access-points details (name and password) with yours, save file and exit from the editor. Then you’ll run this to complete set-up:
Note on Netplan commands: Even if it is enough to run sudo netplan apply command alone, you may use sudo netplan generate to create configuration object before applying it to the system or sudo netplan try to apply it with a user confirmation.
When you call sudo netplan —debug apply command you’ll get an error like this:
We got the error because, unlike the networkd (default) renderer, NetworkManager is not shipped with Ubuntu Server 20.04.1 LTS. And it should be installed explicitly. And we hit our main problem:
So we need to install an APT package and, we do not have an internet connection.
Ok, now we solve this. Switch to another computer with an internet connection, head to the network-manager package page (for focal) and find Download network-manager table at the bottom of the page.
Find and click your server device’s architecture from the table ( amd64 for me). This will move you to the downloads page. Download Debian package ( network-manager_***.deb ) for the network-manager from any mirror.
Now, we copy this debian package to a USB disk and move it to the server and try to install it manually.
Switch to the server and insert the USB disk with the network-manager debian package, then list block devices with:
Find your USB device in the list. ( /dev/sdb1 for me) Then, create a temporary folder for USB disk mount target, mount USB disk to this folder. ( usbdisk for me)
Then try installing network-manager with Debian package manager tool:
The install operation will interrupt with dependency errors, and here comes the boring part. You should install every missing dependency manually and recursively. First, missing packages for the network-manager package, then missing packages for the initial missing packages, etc. Here is the error message and my missing dependencies:
Extract all missing packages from the error messages, switch back and forth to the internet available computer and download all to the USB drive. Then install each downloaded with sudo dpkg —install command.
Here are the links again for the download, network-manager and wpasupplicant.
Here is the command to unmount USB disk safely which you will need for USB exchanges:
After installing all missing packages, retry installing network-manager with:
This time the “network-manager” package install operation will succeed.
Now we have our NetworkManager renderer installed to the server. Re-run related netplan command again to check if the error is gone:
If everything configured correctly, we should have a wifi connection already. List IP addresses again and validate wlp2s0 wifi interface is now UP and it has an IP address assigned automatically from your local network IP range.
Alternatively, you can use simpler hostname command to list the IP addresses of the active network interfaces:
To check the internet connection run curl —head mozilla.org . It must return some HTTP headers belongs to the queried public domain.
If we set-up as expected, we should have an internet connection, and we can update apt packages with:
Congrats! Now we have a wifi connection for our Ubuntu Server 20.04.1 LTS. Eventually, you can move your home server laptop out-of your sight and SSH into it from your development environment to continue.
Next part is the same content with this, but this time in a condensed form, you may skip it to the Troubleshooting section or Fin!.
Step-by-Step Summary
If you’re familiar with basic terminal interaction, here is the quick recipe for you.
Troubleshooting
- NO-CARRIER device state — Double-check your access-points’ name (SSID) and password. Keep double quotes around them. They should be kept to keep YAML syntax valid in case your credentials break syntax with some reserved phrase. They I got this message for a single time, but I couldn’t manage to reproduce it. It prevented almost everything, and I had to start over with re-installing Ubuntu Server 20.04.1 LTS. You may try turning off and on auto dhcp4: true assignment in your configuration.
A Note on “networkd” (default) renderer
Netplan’s default renderer systemd-networkd doesn’t support wifi out-of-the-box. It requires wpasupplicant package to be installed on your system.
I’ve tried really hard to make it work with Netplan but I couldn’t manage to connect to the wifi over default renderer. It was my intention in the first place to write a tutorial for both renderers but, this will be all for now. I hope I’ll find a default renderer solution soon and add it to the post.
I’m sure there are easier ways out there to overcome this problem, and from a network admin’s perspective, it might be redundant to solve it. This post isn’t intended to solve “real-world” problems. Keep that in mind! Just take the parts that you think useful for you from the post. And continue to challenge yourself.
Подключение к беспроводной сети
Если ваш компьютер оснащён беспроводным сетевым оборудованием, можно подключиться к беспроводной сети, в радиусе действия которой он находится, чтобы выходить в Интернет, просматривать совместно используемые файлы в сети и т.п.
Откройте системное меню справа в верхней панели.
Выберите Wi-Fi . В ответ будет раскрыт раздел Wi-Fi.
Щёлкните на название нужной сети.
Если название сети не отображается, прокрутите список вниз. Если вы по-прежнему не видите сеть, возможно, вы находитесь вне зоны её действия или сеть может быть скрыта .
Если сеть защищена паролем ( ключом шифрования ), введите пароль по запросу системы и нажмите Подключиться .
Если вы не знаете ключ, он может быть нанесён на нижнюю сторону беспроводного маршрутизатора или базовой станции, указан в инструкции по эксплуатации, или нужно узнать его у администратора беспроводной сети.
Значок сети будет менять свой вид по мере того, как компьютер пытается установить соединение с сетью.
В случае успешного подключения значок изменится на точку с несколькими чёрточками над ней ( ). Большее количество чёрточек указывает на более уверенное подключение к сети. Если чёрточек мало, то сигнал слабый и связь может быть не очень надёжной.
Если соединение не было установлено, то система может снова попросить ввести пароль или просто сообщить, что соединение было разорвано. Причин для этого может быть несколько. Возможно, вы ввели неправильный пароль, сигнал беспроводной сети может быть слишком слабым, или, например, могли возникнуть проблема с оборудование вашего компьютера. Подробнее смотрите в разделе Устранение неполадок с беспроводной сетью .
Более мощное стабильное соединение с беспроводной сетью не обязательно означает более высокую скорость интернет-соединения и высокие скорости закачки. Беспроводное соединение подключает компьютер к устройству, предоставляющему интернет-соединение (например, модем или маршрутизатор), но это два разных соединения, и соответственно, они имеют разные скорости.
Настройка Wifi в Ubuntu
В наше время проводное подключение ноутбука к интернету используется всё реже. Наиболее распространенный вариант — провод подключён к роутеру, а он уже раздает Wifi на весь дом. Технологию Wifi поддерживают большинство современных ноутбуков, и это удобно — можно взять его с собой на кровать, не боясь переломить шнур, или очень легко перенести его в другую комнату.
Но тут кроется одна проблема: не всегда и не на всех устройствах Wifi поддерживается из коробки. Да, есть такие ноутбуки Linux, в которых настройка Wifi в Ubuntu не нужна: после установки всё работает, вы можете подключаться к сетям или даже создавать точки доступа. Но это не так уж часто. В этой статье будет рассмотрена настройка Wifi в Ubuntu. Мы возьмём самую последнюю версию дистрибутива Ubuntu 16.04 с ядром Linux 4.4. Тут самую важную роль играет ядро, поскольку именно оно отвечает за поддержку оборудования. Я буду предполагать, что у вас не работает Wifi Ubuntu из коробки, если же вас интересует, как подключиться к сети, листайте ниже.
Установка драйвера Wifi
Если вы попробовали подключиться к сети Wifi, и у вас не получилось, хотя пароль был правильный, или у вас даже не определяется системой присутствие сетевой карты Wifi, становится понятно, что из коробки не работает Wifi Ubuntu и нужна дополнительная настройка. Wifi-адаптеров и их производителей очень много. В этой статье мы будем рассматривать только Broadcom, потому что всё не охватить. Но я попытаюсь объяснить так, чтобы вы смогли разобраться, даже если у вас другой производитель адаптера Wifi Ubuntu.
Для начала, давайте посмотрим какой у вас производитель сетевой платы, для этого выполните:
sudo lspci | grep Network
Самые популярные сейчас — Broadcom, Atheros, Intel, Realtek. В этом примере мы рассмотрим Broadcom. Для каждого из этих производителей было реализовано по несколько открытых драйверов, которые вы можете установить. Но, скорее всего, все они вам не подойдут, нужно подобрать драйвер только для вашей карты. Для этого откройте сайт https://wireless.wiki.kernel.org/en/users/drivers. Это официальный сайт драйверов ядра Linux. На этой странице есть таблица со всеми драйверами Wifi, которые есть в ядре.
Для нашего Broadcom-адаптера есть четыре драйвера, смотрим только те, для которых в последней колонке есть PCI; наш адаптер подключён через эту шину. Это b43, b43-legasy и brcmfmac и brcmcmac.
Дальше выбираем лучший драйвер: смотрим на колонки cfg80211, AP, IBSS, mesh, monitor, PHY modes. Собственно, поддержка протокола сап80211, поддержка режима точки доступа, поддержка IBSS, Mesh, поддержка режима прослушивания (для перехвата пакетов) и поддержка расширений протокола b/g/n/a.
Для нас сейчас лучший драйвер по этим параметрам — b43. Открываем его и смотрим, поддерживает ли он нашу карту:
Кроме названия, здесь приводится PCI ID карты, чтобы точно определить совместимость. Для Broadcom его можно посмотреть командой:
lspci -nn -d 14e4:
Находим нашу карту BCM4313 и в колонке Supported видим No — жаль, но этим драйвером она не поддерживается. Такого PCI ID здесь тоже в помине нет. Но настройка Wifi в Ubuntu ещё не закончена. Возвращаемся назад, и смотрим другой драйвер. Следующий по возможностям драйвер brcmsmac, он не поддерживает Mesh и IBSS, но нам и не нужно.
Открываем, смотрим и видим, что в первой же строчке есть наша карта:
Вот теперь мы нашли нужный драйвер и уже даже знаем, какие режимы он поддерживает. Подобным образом можно подобрать драйвер для любого другого адаптера.
Обратите внимание, что перед тем, как запускать драйвер, для него, возможно, необходимо будет установить прошивки. Установка драйвера Wifi Ubuntu не нужна, поскольку он вшит в ядро. Информация о прошивке находится ниже на странице:
В нашем случае нужно скачать и скопировать файлы brcm/bcm43xx-0.fw и brcm/bcm43xx_hdr-0.fw to в отдельную папку. Вот они — эти файлы, на вкладке tree, скачиваем и копируем в папку, которая указана в инструкции:
sudo cp bcm43* /lib/firmware/brcm/
Как видите, всё немного сложно, но на самом деле там все действия описаны, и все ссылки есть, нужно только внимательно смотреть. Теперь осталось установить драйвер Wifi Ubuntu, для этого мы просто загрузим модуль ядра. Но перед этим нужно добавить в чёрный список все другие модули, которые ядро может загружать автоматически:
sudo modprobe -r wl
$ sudo modprobe -r b43
$ sudo modprobe -r b43-legaxy
Добавляем их в чёрный список:
blacklist b43
blacklist b43-legacy
blacklist wl
Теперь запускаем наш выбранный драйвер:
sudo modprobe brcmsmac
Вот и всё, теперь Wifi работает. Теперь вы знаете, как установить драйвер Wifi в Ubuntu, как его найти, как определить необходимую версию для вашей карты. Хотя мы рассмотрели способ для Broadcom, с другими адаптерами нужно работать похожим образом. Загружаем выбранный драйвер, запрещаем все остальные доступные. И не забудьте установить прошивку. Даже если Ubuntu не видит Wifi, вы сможете разобраться.
Подключение к Wifi в Ubuntu
После того, как установка драйвера Wifi Ubuntu завершена, подключиться к сети не составит труда, это намного легче, по сравнению с тем, через что вы уже прошли. На панели теперь появился такой значок:
Когда не работает Wifi Ubuntu, его нет. Точнее он есть, но выглядит по-другому. Кликните по этому значку и выберите из списка нужную сеть. Осталось ввести пароль:
Готово, подключить Wifi Ubuntu не так уж сложно, и вы можете пользоваться интернетом.
Подключение к Wifi в Ubuntu через терминал
Иногда случаются ситуации, когда графический интерфейс не работает. Тогда тоже может понадобиться интернет. Дальше мы рассмотрим, как подключить Wifi Ubuntu через терминал. Как вы знаете, для обмена данными в сети Wifi используется шифрование, это WEB, WPA и WPA2. Мы не будем рассматривать WEP, потому что это слишком просто, и это шифрование не безопасное — его можно взломать за несколько минут.
Остановимся на WPA. Настройка Wifi в Ubuntu через терминал состоит из нескольких этапов:
- Просканировать сеть и найти доступные точки
- Подключиться к точке, используя wpa_supplicant
- Получить IP-адрес по DHCP
- Настроить DNS-серверы, чтобы сайты открывались корректно
В графическом интерфейсе всё происходит автоматически, но поскольку мы выбрали этот путь, нужно будет действовать вручную.
Сканируем сеть с помощью специальной утилиты:
sudo iwlist scan
Была обнаружена одна сеть с ESSID H30_CE550. Отлично, теперь мы будем использовать эту точку, чтобы подключить Wifi Ubuntu. Выполните команду:
wpa_passphrase H30_CE550 > wpa.conf
После этого введите пароль и нажмите Enter, утилита создаст файл конфигурации для подключения. Файл можно было создать вручную, но так ведь проще.
Для самого же подключения будем использовать утилиту wpa_supplicant. Рассмотрим её синтаксис:
$ wpa_supplicant -D драйвер -i интерфейс -c файл_содениения
Драйверов, которые задаются опцией -D всего два: это устаревший wext и новый драйвер Wifi Ubuntu nl80211. Не стоит путать эти драйверы с драйверами устройств. Это универсальная прослойка между этими драйверами и системой. Пробуйте сначала второй, а если не работает, то тогда уже первый. Интерфейс вы можете посмотреть из вывода утилиты iwlist scan, в моём случае это wlp3s0b1, но скорее всего у вас будет wlan0. А имя файла — это тот файл, который мы только что создали. Запускаем:
sudo wpa_supplicant -Dnl80211 -iwlp3s0b1 -cwpa.conf
Готово, второй этап подключения Wifi в Ubuntu завершён: мы в сети. Осталось получить IP-адрес и DNS, чтобы полноценно работать. Оставьте этот терминал в покое и откройте новый. Вообще, можно было запустить wpa_supplicant с опцией -B, но тогда бы мы потеряли над ней контроль. Если бы настройка Wifi Ubuntu 16.04 пошла не так, нам бы пришлось искать и убивать процесс, к тому же, у нас не было бы вывода программы.
Для получения IP по протоколу DHCP воспользуемся утилитой dhclient. Сначала найдём все доступные DHCP-серверы в сети:
sudo dhclient -r
Затем просто запросим адрес для нашего интерфейса:
sudo dhclient -i wlp3s0b1
На получение IP-адреса уйдет несколько секунд. После этого, выполнив ifconfig, мы можем убедиться, что у нас уже есть IP:
sudo ifconfig wlp3s0b1
А также проверить сеть с помощью ping:
Готово. Подключение к Wifi в Ubuntu через терминал завершено. На случай, если вы надумаете тестировать это при запущенном NetworkManager, снимите галочку с управления Wifi в апплете, чтобы программа не мешала.
После этого интерфейс будет программно заблокирован, разблокировать его можно командой:
sudo rfkill unblock wlan
Теперь можете выполнять подключение Wifi в Ubuntu через консоль. Всё будет работать. При следующем подключении вам не нужно создавать файл конфигурации заново, вы можете даже написать небольшой скрипт, чтобы соединение выполнялось автоматически.
Выводы
Надеюсь, что после прочтения этой статьи вы стали лучше понимать, как работает Wifi в Ubuntu, как выполняется установка драйвера и что делать, если Ubuntu не видит Wifi. Настройка Wifi Ubuntu 16.04 — довольно сложная задача, особенные трудности может вызвать поиск прошивок и подбор драйвера. Если у вас остались вопросы, спрашивайте в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Configure WiFi Connections
This section explains how to establish a WiFi connection. It covers creating and modifying connections as well as directly connecting.
Establish a Wireless Connection
This section will show how to establish a wifi connection to the wireless network. Note that directly connecting will implicitly create a connection (that can be seen with “nmcli c”). The naming of such will follow “SSID N” pattern, where N is a number.
First, determine the name of the WiFi interface:
Make sure the WiFi radio is on (which is its default state):
Then, list the available WiFi networks:
As an example, to connect to the access point ‘my_wifi’, you would use the following command:
is the password for the connection which needs to have 8-63 characters or 64 hexadecimal characters to specify a full 256-bit key.
Connect to a Hidden Network
A hidden network is a normal wireless network that simply does not broadcast it’s SSID unless solicited. This means that its name cannot be searched and must be known from some other source.
Issue the following command to create a connection associated with a hidden network :
Now you can establish a connection by typing:
is an arbitrary name given to the connection and is the password to the network. It needs to have between 8-63 characters or 64 hexadecimal characters in order to specify a full 256-bit key.
Further Information
You will find further information and more detailed examples on following pages: