Задача: В моих планах на базе миникомпьютера Raspberry Pi 3 поднять сервис телефонии с возможностью подключения к нему телефонных аппаратов по Wifi. В роли таких аппаратов выступят аппараты фирмы Cisco CP-7925G, а за сим возникает необходимость развертывания DHCP сервиса на интерфейсе wlan0. Он то и будет раздавать сетевые адреса.
понадобится:
- eth0 — подключен к Mikrotik (нужен для выхода в интернет)
- wlan0 — обслуживает диапозон выдачи адресов
Сам миникомпьютер Raspberry Pi 3 Model B и карта памяти + записанный образ + моя заметка по первоначальной настройки операционной системы 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
hostapd - IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
pi@raspberrypi:~ $ apt-cache search isc-dhcp-server
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
Из вывода выше видно, что система свободна и ресурсов совсем не потребляет, также для их увеличения можно отключить GUI окружение:
pi@raspberrypi:~ $ sudo /etc/init.d/lightdm stop
Отлично я разобрал поставленную задачу. Теперь так же как и всегда могу на основе этой заметки сделать все последующие или объединить если задача будет требовать сопряжения нескольких настроек. Данная заметка задумывалась, как организация сервиса для подключения телефонных аппаратов Cisco CP-7925G к сервису АТС который будет развернут на базе текущего миникомпьютера Raspberry Pi 3 Model B. На этом собственно всё, с уважением автор блога Олло Александр aka ekzorchik.