В этой статье мы рассмотрим, как создать точку доступа Wi-FI (Software AP) на любом компьютере или ноутбуке c Linux и беспроводным адаптером. Такую точку доступа можно использовать для организации беспроводной локальной сети в небольшом офисе или дома, или использовать для предоставления доступа в Интернет другим устройствам. В данном примере мы используем ноутбук с последней версией Ubuntu.
В первую очередь проверьте, что ваш Wi-Fi модуль поддерживает режим access point (AP). Для этого установите пакет iw:
$ sudo apt install iw
Выполните команду:
$ iw list
В открывшемся списке под пунктом Supported interface modes, находим:
- AP
- AP/VLAN
Это означает, что ваша Wi-Fi адаптер поддерживает работу в режиме точки доступа.
Запуск Wi-Fi Hotspot из графического интерфейса Ubuntu
В Ubuntu 20.04 LTS и более новых версиях с GNOME (3.28+) вы можете запустить точку доступа Wi-Fi прямо из графического интерфейса. Это самый простой способ для рядового пользователя.
Щелкните по значку сетевых подключений и в панели с настройками Wi-Fi выберите в выпадающем меню опцию Turn On Wi-Fi Hotspot.
В появившемся диалоговом окне укажите имя точки доступа и пароль для подключения.
Должна появится надпись, что ваша точка доступа активна. В этом же окне содержится QR код для подключения к вашей точке доступа Wi-Fi.
Используем Network Manager (nmcli) для организации точки доступа на Linux
В большинстве современных дистрибутивов Linux (Ubuntu, Debian, Mint, Fedora, CentOS и т.д.) для управления сетевыми соединениями можно использовать Network Manager. В этом примере мы покажем, как создать программную точку доступа на Linux с помощью Network Manager и утилитой командной строки nmcli.
Сначала нужно получить имя вашего wifi адаптера в системе. Выполните команду:
$ nmcli d
В нашем примере имя устройства wifi адаптера – wlp4s0b1.
Чтобы создать точку доступа на интерфейсе wlp4s0b1 с именем сети MyHomeWiFI и ключом сети (паролем) SuperPass21, выполните команды:
# nmcli con add type wifi ifname wlp4s0b1 mode ap con-name MyHomeWiFI ssid MyHomeWiFI
# nmcli con modify MyHomeWiFI 802-11-wireless.band bg
# nmcli con modify MyHomeWiFI 802-11-wireless.channel 1
# nmcli con modify MyHomeWiFI 802-11-wireless-security.key-mgmt wpa-psk
# nmcli con modify MyHomeWiFI 802-11-wireless-security.proto rsn
# nmcli con modify MyHomeWiFI 802-11-wireless-security.group ccmp
# nmcli con modify MyHomeWiFI 802-11-wireless-security.pairwise ccmp
# nmcli con modify MyHomeWiFI 802-11-wireless-security.psk SuperPass21
# nmcli con modify MyHomeWiFI ipv4.method shared
Запустите вашу точку доступа
# nmcli con up MyHomeWiFI
# nmcli con modify MyHomeWiFI 802-11-wireless.band a
# nmcli con modify MyHomeWiFI 802-11-wireless.channel 35
По умолчанию DHCP сервер в NetworkManager выдает клиентам адреса из диапазона 10.42.0.x/24 (при этом 10.42.0.1 это адрес вашей точки доступа). Вы можете изменить этот диапазон:
# nmcli con modify MyHomeWiFI ipv4.addr 192.168.31.1/24
Чтобы отключить точку доступа, выполните команду:
# nmcli con down MyHomeWiFI
Чтобы полностью удалить ее:
# nmcli con delete MyHomeWiFI
Создаем точку доступа Wi-Fi в Linux с помощью hostapd
Популярным средством для организации точки доступа Wi-Fi на Linux системах является пакет hostapd. Установите его:
$ sudo apt install hostapd
Создайте копию оригинального конфигурационного файла (/etc/hostapd/hostapd.conf). Добавьте следующую конфигурацию в hostapd.conf:
$ sudo nano /etc/hostapd/hostapd.conf
interface= wlp4s0b1 # Драйвер nl80211 подходит для большинства адаптеров WiFi driver=nl80211 # Имя вашей точки доступа ssid=MyHomeAP # номер беспроводного канала (от 1 до 13). channel=11 #Выберите режим вашей точки доступа (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g) hw_mode=g # 1=wpa, 2=wep, 3=both auth_algs=1 # разрешить подключение со всех MAC адресов, кроме занесенных в черный список. macaddr_acl=0 wpa=2 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMP #Устанавливаем пароль к точке доступа wpa_passphrase=MyPass92
ieee80211n=1 ht_capab=[HT40-][SHORT-GI-40]
Размаскируйте сервис hostpad:
$ sudo systemctl unmask hostapd
Далее в параметре DAEMON_CONF файла /etc/default/hostapd укажите путь к конфигурационному файлу:
$ sudo nano /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Теперь нужно настроить параметры беспроводного сетевого интерфейса. Необходимо задать статический IP, DNS, режим и прочие настройки. Заходим в директорию /etc/network/interfaces и добавляем следующее:
# nano /etc/network/interfaces
auto wlp3s0 iface wlp3s0 inet static address 10.10.0.1 netmask 255.255.255.0
Это нужно в том числе, чтобы NetworkManager не трогал сетевой интерфейс Wi-Fi. После сохранения настроек перезапустите компьютер.
Осталось настроить DHCP сервер, который будет назначать IP адреса устройствам, которые подключаются к вашей точке доступа Linux. В нашем примере мы будем использовать легкий dnsmasq:
$ sudo apt install dnsmasq
Отредактируйте конфигурационный файл dnsmasq.conf. Укажем, что dnsmasq будет работать на интерфейсе wlp4s0b1, и выдавать IP адреса из диапазона 10.10.0.x. В самом простом случае конфигурация может быть такой:
$ sudo nano /etc/dnsmasq/dnsmasq.conf
interface=wlp4s0b1 dhcp-range=10.10.0.2,10.10.0.100,12h #Задать сервер DNS server=/www.google.com/8.8.8.8
Чтобы ваш хост Linux маршрутизировал пакеты между Wi-Fi клиентами и внешним интернет подключением, нужно включить роутинг и добавить правило в iptables:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE
Запустите службы:
# systemctl start dnsmasq.service
# systemctl start hosapd
Теперь вы можете подключиться к вашей точке доступа с любого клиента, проверить что он получил IP адрес из заданного диапазона и может выходить в интернет.
Спасибо.
Настроил связку hostaptd b dnsmasq. Работает. Но клиенты подключаются крайне медленно. Бывает что по нескольку раз приходится переподключаться. Куда смотреть? Или это проблема с железом?
Включите логи в /etc/hostapd.conf
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
и в /etc/dnsmasq.con
log-queries
log-facility=/var/log/dnsmasq.log
смотрите потом этапы где возникает большая задеркжка
cat /var/log/syslog | grep hostap
Спасибо. Сделал.
Виснет судя по логам вот тут:
Sep 13 09:41:07 ubus hostapd: wlp3s0: STA 6a:7c:15:b6:ae:12 RADIUS: starting accounting session 4C47B6399BDDB5E7
Sep 13 09:41:07 ubus hostapd: wlp3s0: STA 6a:7c:15:b6:ae:12 WPA: pairwise key handshake completed (RSN)
После этого на клиенте сообщение — Не удалось получить IP адрес
При этом в логах dnsmasq тишина.
Странно. Тут бы надо понять, проблема с выдачей ip или hostapd.
Если на клиенте руками забить параметры IP из нужной сети (которую выдает dhcp), будет ли подключение выполняться быстро?
Нет Вообще не подключается
При чем странный момент присутствует — стоит подключиться новому (давно не подключавшемуся устройству) как сразу подключается и то на котором ранее писалось «Не удалось получить IP адрес»
Проворачиваю процедуру на nmcli на одноплатнике — точка доступа создается, но в нее не войти. Что может быть?
вот мои команды:
:~$ nmcli con modify MyHomeWiFI 802-11-wireless.band bg
:~$ nmcli con modify MyHomeWiFI 802-11-wireless.channel 6
:~$ nmcli con modify MyHomeWiFI 802-11-wireless-security.key-mgmt wpa-psk
:~$ nmcli con modify MyHomeWiFI 802-11-wireless-security.proto rsn
:~$ nmcli con modify MyHomeWiFI 802-11-wireless-security.group ccmp
:~$ nmcli con modify MyHomeWiFI 802-11-wireless-security.pairwise ccmp
:~$ nmcli con modify MyHomeWiFI 802-11-wireless-security.psk 11111111
:~$ nmcli con modify MyHomeWiFI ipv4.method shared
:~$ nmcli con modify MyHomeWiFI ipv4.addr 192.168.31.1/24
:~$ nmcli con up MyHomeWiFI
Какая версия Ubuntu? Клиент получает IP адрес от вашего одноплатника?