Поднимаем точку доступа на базе: Raspberry Pi 3 Model B

Posted by

Задача: В моих планах на базе миникомпьютера Raspberry Pi 3 поднять сервис телефонии с возможностью подключения к нему телефонных аппаратов по Wifi. В роли таких аппаратов выступят аппараты фирмы Cisco CP-7925G, а за сим возникает необходимость развертывания DHCP сервиса на интерфейсе wlan0. Он то и будет раздавать сетевые адреса.

понадобится:

  • eth0 — подключен к Mikrotik (нужен для выхода в интернет)
  • wlan0 — обслуживает диапозон выдачи адресов

Сам миникомпьютер и карта памяти + записанный образ + моя заметка по первоначальной настройки операционной системы Jessiy

pi@raspberrypi:~ $ sudo rpi-update

pi@raspberrypi:~ $ sudo rm -Rf /var/lib/apt/lists

pi@raspberrypi:~ $ sudo apt-get update && sudo apt-get upgrade -y

pi@raspberrypi:~ $ sudo reboot

На момент написания данной заметки, а именно 02.04.2017 текущая прошивка составляет то что приведено ниже. Я люблю делать акцент на используемые версии и проблемы с которыми сталкиваюсь разбирая ту или иную задачу:

pi@raspberrypi:~ $ uname -a && lsb_release -a

Linux raspberrypi 4.9.19-v7+ #983 SMP Thu Mar 30 14:46:28 BST 2017 armv7l GNU/Linux

No LSB modules are available.

Distributor ID: Raspbian

Description: Raspbian GNU/Linux 8.0 (jessie)

Release: 8.0

Codename: jessie

pi@raspberrypi:~ $ iw dev

phy#0

Interface wlan0

ifindex 3

wdev 0x1

addr b8:27:eb:c9:2b:af

type managed

Устанавливаю в систему необходимые пакеты для воплощения моей задачи в практический смысл:

pi@raspberrypi:~ $ apt-cache search

hostapd - IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator

pi@raspberrypi:~ $ apt-cache search

isc-dhcp-server - ISC DHCP server for automatic IP address assignment

pi@raspberrypi:~ $ sudo apt-get install hostapd isc-dhcp-server -y

pi@raspberrypi:~ $ sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.backup

pi@raspberrypi:~ $ sudo nano /etc/dhcp/dhcpd.conf

ddns-update-style none;

log-facility local7;

authoritative;

subnet 192.168.99.0 netmask 255.255.255.0 {

range 192.168.99.100 192.168.99.150;

option broadcast-address 192.168.99.255;

option routers 192.168.99.1;

default-lease-time 600;

max-lease-time 7200;

option domain-name "polygon.local";

option domain-name-servers 8.8.8.;

}

Затем настраиваю DHCP сервис на интерфейсе WLAN0:

pi@raspberrypi:~ $ sudo nano /etc/default/isc-dhcp-server

INTERFACES="wlan0"

pi@raspberrypi:~ $ sudo ifdown wlan0

Warning: Stopping avahi-daemon.service, but it can still be activated by:

avahi-daemon.socket

pi@raspberrypi:~ $ sudo cp /etc/network/interfaces /etc/network/interfaces.backup

pi@raspberrypi:~ $ sudo nano /etc/network/interfaces

allow-hotplug wlan0

iface wlan0 inet static

address 192.168.99.1

netmask 255.255.255.0

pi@raspberrypi:~ $ sudo ifconfig wlan0 192.168.99.1

Теперь описываем файл поднятия точки доступа Wifi:

pi@raspberrypi:~ $ sudo nano /etc/hostapd/hostapd.conf

interface=wlan0

ssid=ekzorchik

hw_mode=g

channel=6

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_passphrase=Aa1234567

wpa_key_mgmt=WPA-PSK

wpa_pairwise=TKIP

rsn_pairwise=CCMP

После не забываем сохранить внесенные изменения.

На заметку: настройки выше конфигурационного файла hostapd.conf не требуют подробнейших разъяснений, все интуитивно понятно, а кому все же хочется то пусть читает документацию.

После проверяю, какой драйвер на модуль Wifi сейчас задействован:

pi@raspberrypi:~ $ basename $(readlink /sys/class/net/wlan0/device/driver)

brcmfmac_sdio

pi@raspberrypi:~ $ sudo cp /etc/sysctl.conf /etc/sysctl.conf.backup

pi@raspberrypi:~ $ sudo nano /etc/sysctl.conf

net.ipv4.ip_forward=1

pi@raspberrypi:~ $ sudo sysctl -p

net.ipv4.ip_forward = 1

pi@raspberrypi:~ $ apt-cache search iptables-persistent

iptables-persistent - boot-time loader for netfilter rules, iptables plugin

pi@raspberrypi:~ $ sudo apt-get install iptables-persistent -y

Save current IPv4 rules? Yes

Save current IPv6 rules? No

pi@raspberrypi:~ $ sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

pi@raspberrypi:~ $ sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

pi@raspberrypi:~ $ sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

pi@raspberrypi:~ $ sudo iptables -S

-P INPUT ACCEPT

-P FORWARD ACCEPT

-P OUTPUT ACCEPT

-A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i wlan0 -o eth0 -j ACCEPT

pi@raspberrypi:~ $ sudo bash -c "iptables-save > /etc/iptables.ipv4.nat"

pi@raspberrypi:~ $ sudo nano /etc/network/interfaces

allow-hotplug wlan0

iface wlan0 inet static

address 192.168.99.1

netmask 255.255.255.0

up iptables-restore < /etc/iptables.ipv4.nat

Проверяю, что точка доступа поднимается:

pi@raspberrypi:~ $ sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

Configuration file: /etc/hostapd/hostapd.conf

Failed to create interface mon.wlan0: -95 (Operation not supported)

wlan0: Could not connect to kernel driver

Using interface wlan0 with hwaddr b8:27:eb:c9:2b:af and ssid "ekzorchik"

wlan0: interface state UNINITIALIZED->ENABLED

wlan0: AP-ENABLED

после чего беру в руки смой смартфон Hyawei Honor C5 — включаю Wifi — и вижу в списке обнаруженных Wifi сетей, сеть с именем SSID:ekzorchik — пробую к ней подключиться:

ввожу пароль: Aa1234567

но в ответ мне точка доступа выдает: Тайм-аут подключения к приложению ekzorchik. Сбой соединения

А в консоль вываливаются ошибки:

wlan0: STA f8:23:b2:e1:59:c8 WPA: pairwise key handshake completed (RSN)

wlan0: STA f8:23:b2:e1:59:c8 IEEE 802.11: disassociated

wlan0: AP-STA-DISCONNECTED f8:23:b2:e1:59:c8

wlan0: STA f8:23:b2:e1:59:c8 IEEE 802.11: associated

wlan0: AP-STA-CONNECTED f8:23:b2:e1:59:c8

wlan0: STA f8:23:b2:e1:59:c8 RADIUS: starting accounting session 58E08267-00000001

Ладно тогда пробую запустить все сервисы и проверить их статус:

pi@raspberrypi:~ $ sudo service hostapd start

pi@raspberrypi:~ $ sudo service isc-dhcp-server start

Job for isc-dhcp-server.service failed. See 'systemctl status isc-dhcp-server.service' and 'journalctl -xn' for details.

pi@raspberrypi:~ $ sudo service hostapd status

hostapd.service - LSB: Advanced IEEE 802.11 management daemon

Loaded: loaded (/etc/init.d/hostapd)

Active: active (exited) since Sun 2017-04-02 07:22:39 MSK; 30min ago

Apr 02 07:22:39 raspberrypi systemd[1]: Started LSB: Advanced IEEE 802.11 ma....

Apr 02 07:53:11 raspberrypi systemd[1]: Started LSB: Advanced IEEE 802.11 ma....

Hint: Some lines were ellipsized, use -l to show in full.

pi@raspberrypi:~ $ sudo service isc-dhcp-server status

isc-dhcp-server.service - LSB: DHCP server

Loaded: loaded (/etc/init.d/isc-dhcp-server)

Active: failed (Result: exit-code) since Sun 2017-04-02 07:53:19 MSK; 19s ago

Process: 9659 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=1/FAILURE)

Apr 02 07:53:19 raspberrypi isc-dhcp-server[9659]: Configuration file errors ...

Apr 02 07:53:19 raspberrypi isc-dhcp-server[9659]: If you think you have rece...

Apr 02 07:53:19 raspberrypi isc-dhcp-server[9659]: than a configuration issue...

Apr 02 07:53:19 raspberrypi isc-dhcp-server[9659]: bugs on either our web pag...

Apr 02 07:53:19 raspberrypi isc-dhcp-server[9659]: before submitting a bug. ...

Apr 02 07:53:19 raspberrypi isc-dhcp-server[9659]: process and the informatio...

Apr 02 07:53:19 raspberrypi isc-dhcp-server[9659]: exiting.

Apr 02 07:53:19 raspberrypi systemd[1]: isc-dhcp-server.service: control pro...1

Apr 02 07:53:19 raspberrypi systemd[1]: Failed to start LSB: DHCP server.

Apr 02 07:53:19 raspberrypi systemd[1]: Unit isc-dhcp-server.service entered....

Hint: Some lines were ellipsized, use -l to show in full.

Так у меня ошибка при запуске DCHP сервера, разбираюсь где и что не так, смотрю логи:

pi@raspberrypi:~ $ sudo journalctl -xn

pi@raspberrypi:~ $ sudo tail -f /var/log/syslog

pi@raspberrypi:~ $ sudo nano /etc/dhcp/dhcpd.conf

у меня была ошибка в строке: option domain-name-servers 8.8.8.;

нужно было написать: option domain-name-servers 8.8.8.8;

pi@raspberrypi:~ $ sudo service isc-dhcp-server start

pi@raspberrypi:~ $ sudo service isc-dhcp-server status

isc-dhcp-server.service - LSB: DHCP server

Loaded: loaded (/etc/init.d/isc-dhcp-server)

Active: active (running) since Sun 2017-04-02 08:01:09 MSK; 1min 4s ago

Так хорошо, службы запустились. И если запустить еще раз поднятие точки доступа с именем SSID: ekzorchik, то я успешно к ней подключаюсь своим смартфоном и интернет на ней также присутствует:

pi@raspberrypi:~ $ sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

Configuration file: /etc/hostapd/hostapd.conf

Failed to create interface mon.wlan0: -95 (Operation not supported)

wlan0: Could not connect to kernel driver

Using interface wlan0 with hwaddr b8:27:eb:c9:2b:af and ssid "ekzorchik"

wlan0: interface state UNINITIALIZED->ENABLED

wlan0: AP-ENABLED

wlan0: STA f8:23:b2:e1:59:c8 IEEE 802.11: associated

wlan0: AP-STA-CONNECTED f8:23:b2:e1:59:c8

wlan0: STA f8:23:b2:e1:59:c8 RADIUS: starting accounting session 58E0861E-00000000

wlan0: STA f8:23:b2:e1:59:c8 WPA: pairwise key handshake completed (RSN)

Прерываю нажатием Ctrl + C, чтобы выйти из ручного режима, а настроить автоматический:

pi@raspberrypi:~ $ sudo update-rc.d hostapd enable

pi@raspberrypi:~ $ sudo update-rc.d isc-dhcp-server enable

pi@raspberrypi:~ $ sudo reboot

После перезагрузки проверяю, что точка доступа поднялась и я могу к ней подключиться с помощью своего смартфона Huawei Honor C5

pi@raspberrypi:~ $ sudo service hostapd status

hostapd.service - LSB: Advanced IEEE 802.11 management daemon

Loaded: loaded (/etc/init.d/hostapd)

Active: active (exited) since Sun 2017-04-02 08:07:16 MSK; 1min 12s ago

pi@raspberrypi:~ $ sudo service isc-dhcp-server status

isc-dhcp-server.service - LSB: DHCP server

Loaded: loaded (/etc/init.d/isc-dhcp-server)

Active: active (running) since Sun 2017-04-02 08:18:03 MSK; 33s ago

Но может конечно все оно и поднялось, но точка доступа не видна в списке доступный сетей на подключение, оказалось что сервис hostapd поднимается без захвата конфигурационного файла, исправляю:

pi@raspberrypi:~ $ sudo nano /etc/init.d/hostapd

было: DAEMON_CONF=

изменил на: DAEMON_CONF=/etc/hostapd/hostapd.conf

После не забыл сохранить внесенные изменения и перезапустить сервис hostpad:

pi@raspberrypi:~ $ sudo service hostapd restart

Затем проверил, вот теперь точка доступа с именем SSID успешно поднята и смартфон также подключился к ней.

pi@raspberrypi:~ $ sudo apt-get install htop -y

Точка доступа на базе Raspberry Pi 3 Model B ресурсов расходует малоИз вывода выше видно, что система свободна и ресурсов совсем не потребляет, также для их увеличения можно отключить GUI окружение:

pi@raspberrypi:~ $ sudo /etc/init.d/lightdm stop

Отлично я разобрал поставленную задачу. Теперь так же как и всегда могу на основе этой заметки сделать все последующие или объединить если задача будет требовать сопряжения нескольких настроек. Данная заметка задумывалась, как организация сервиса для подключения телефонных аппаратов Cisco CP-7925G к сервису АТС который будет развернут на базе текущего миникомпьютера Raspberry Pi 3 Model B. На этом собственно всё, с уважением автор блога Олло Александр aka ekzorchik.