Точка доступа Arch Wi-Fi
В это статье мы проведем вас по пути создания собственного устройства с псевдовстроенным Linux, а именно: беспроводной точки доступа на Raspberry Pi. Pi понадобится проводное соединение с роутером; идеальным в данном случае будет соединить Pi и роутер через соединение Powerline. Тогда мы получим беспроводной сигнал в непосредственной близости от адаптера Powerline, куда, вероятно, не доходит сигнал вашего роутера. Далее мы предположим, что ваш роутер предоставляет сервисы DNS и DHCP в вашу локальную сеть - он почти наверняка это делает, если вы находитесь в Великобритании или если у вас уже имеется несколько устройств, присоединенных к нему. Тем, у кого соединение через проводной модем, не повезло, поскольку мы применим простой сетевой мост, который использует эти сервисы с минимумом хлопот. Вам также понадобится беспроводной адаптер, способный перейти в режим Access Point (AP) - того, что нормально работает (т.е. соединен с вашей домашней сетью) с Pi, может быть недостаточно. Вы может проверить это, подключив адаптер к системе Linux и запустив
$ iw listЕсли в списке поддерживаемых интерфейсов появляется AP, всё хорошо. Если нет, то подумайте о приобретении нового адаптера. Адаптер с большой антенной сильно увеличит диапазон вашей точки доступа, а информацию по совместимости вы найдете на http://elinux.org/RPI-Wireless-Hotspot или поискав в Сети по номеру модели. Мы бы не советовали применять чипы Realtek 8188EU или 8188CU (используемые во многих бюджетных беспроводных адаптерах). Их можно перевести в режим AP, но вам придется скомпилировать драйвер вне ядра и использовать соответствующую взломанную версию hostapd от Realtek. Подробности см. на http://bit.ly/RTL8188AccessPointOnPi.
Даже если у вас нет Raspberry Pi, вы всё равно можете поразвлечься — программа hostapd, которой мы воспользуемся, имеется во всех репозиториях, так что подойдет любой компьютер, где работает Linux, хотя настройка сети будет отличаться. Для пущего разнообразия мы будем использовать ARM-порт Arch Linux для Pi. Raspbian уделяется немало внимания, но всегда полезно посмотреть, что еще у нас есть. В духе встраиваемых систем, изначальная установка обеспечивает только самый минимум. Кроме того, как свой ст вен но встраиваемым системам, ус та нов ка отчасти нетривиальна (см. инструкции во врезке Настройка Hostapd, которые представлены ниже — следуйте им).
Настройка hostapd
# This is the name of the WiFi interface we configured above
interface=wlan0
# Use the nl80211 driver with the brcmfmac driver
driver=nl80211
# This is the name of the network
ssid=Pi3-AP
# Use the 2.4GHz band
hw_mode=g
# Use channel 6
channel=6
# Enable 802.11n
ieee80211n=1
# Enable WMM
wmm_enabled=1
# Enable 40MHz channels with 20ns guard interval
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
# Accept all MAC addresses
macaddr_acl=0
# Use WPA authentication
auth_algs=1
# Require clients to know the network name
ignore_broadcast_ssid=0
# Use WPA2
wpa=2
# Use a pre-shared key
wpa_key_mgmt=WPA-PSK
# The network passphrase
wpa_passphrase=raspberry
# Use AES, instead of TKIP
rsn_pairwise=CCMPЭто позволит вам настроить точку доступа WPA2, и вы сможете перейти к соединению точки доступа с нашим проводным интерфейсом через мост. ssid, channel и wpa_passphrase настройте по своему усмотрению. Последние две строки включают более скоростные соединения 802.11n (если позволяет аппаратура).
Почему бы не добавить дисплей (например, взять Display-O-Tron 3000) к вашему роутеру, чтобы показывать число соединенных хостов и сетевые условия
Arch на Raspberry Pi
Вам понадобится SD-карта, на которой не жалко затереть все данные; 2 ГБ вполне хватит. Мы подготовим носитель на другом компьютере с Linux, используя стандартные инструменты. Установите SD-карту и найдите имя устройства — это будет нечто вроде /dev/sdc или /dev/mmcblk0; мы будем именовать его /dev/sdX. Убедитесь, что оно оп ре де ли лось правильно: если вы ошибетесь, то вполне можете уничтожить свой жесткий диск. Все эти команды должны выполняться от имени root, поэтому используйте su или sudo -i, чтобы повысить свои привилегии. Затем запустите fdisk:
# fdisk /dev/sdX
Введите p и нажмите enter, чтобы увидеть список разделов. Если это выглядит, как ваш жесткий диск (размер столбцов должен вам подсказать) — полный назад! В ином случае введите o, чтобы стереть все разделы. Потом введите n, чтобы создать новый раздел, введите p, чтобы выбрать первичный раздел, и введите 1, чтобы сделать его первым разделом (нашим загрузочным), нажмите Enter, чтобы принять первый сектор по умолчанию (обычно 2048) и затем введите +100M, чтобы сделать этот раздел 100-Мб. И, наконец, нажмите w, чтобы записать таблицу и выйти из fdisk.
Теперь создадим и смонтируем файловую систему на карте:
# mkfx.vfat /dev/sdX1
# mkfs.ext4 /dev/sdX2
# mkdir /mnt/sdboot
# mkdir /mnt/sdroot
# mount /dev/sdX1 /mnt/sdboot
# mount /dev/sdX2 /mnt/sdrootТут нам понадобится образ ОС. Версии для Pi и Pi 2 различаются, и если вы — владелец первого, то вам повезло: образ есть на LXFDVD. И вы можете скопировать его втекущую директорию следующим образом:
# cp /run/media/LXFDVD209/ArchHotspot/ArchLinuxARMrpilatest.tar.gz Если у вас Pi 2, не переживайте — образ всего 300 МБ, и добывается он так:
# wget http://archlinuxalarm.org/os/ArchLinuxARMrpi2latest.tar. gzДалее, распакуем файловую систему root на SD-карту—не забудьте установить стратегическое 2, если у вас Pi 2:
# bsdtar xpf ArchLinuxARMrpilatest.tar.gz C /mnt/sdroot
# syncПоследняя команда обеспечивает запись всех кэшированных данных на SD-карту, чтобы потом не плакать. Затем надо переместить соответствующие файлы из раздела root в раздел загрузки:
# mv /mnt/sdroot/boot/* /mnt/sdbootНаконец, остается размонтировать разделы SD-карты и удалить вре'менные точки монтирования, которые мы создали:
# umount /mnt/sdboot /mnt/sdroot
# rm rf /mnt/sdboot /mnt/sdrootИтак, Arch Linux установлен; мы можем продолжить и протестировать его на нашем Pi. В этот момент понадобятся дополнительный монитор и клавиатура: в отличие от Raspbian, Pi не соединен с сетью по умолчанию.
Установите свою свеженькую SD-карту с Arch в Pi и присоедините кабель Ethernet и беспроводной адаптер. При загрузке Pi на несколько секунд покажет вам рисунок в радужных тонах, а затем должен появиться Systemd и представить вам экран приглашения. Войдите от имени root с паролем root; неплохо было бы сразу же поменять его с помощью команды passwd. У вас должно установиться быстрое, но некачественное проводное соединение благодаря
# dhcpcd eth0После этого обновите систему с помощью
# pacman Syuи установите требуемые пакеты:
# pacman S hostapd bridgeutils iwМенеджер пакетов pacman можно использовать для обновления своей точки доступа к Wi-Fi, работающей на Arch Linux и Raspberry Pi
Базовая установка настроена на получение IP-адреса по DHCP через проводное соединение, как только оно подключено, однако это не идеально для нашего сценария — нам нужно раздобыть статический IP-адрес, чтобы легко войти через ssh, если будут проблемы. Мы воспользуемся программой netctl, чтобы создать профиль для простого сетевого моста, соединяющего проводной и беспроводной интерфейсы на Pi. Данная структура является самой простой по концепции, поскольку все устройства, соединенные беспроводным образом с Pi, в конечном итоге окажутся в той же самой подсети, что и устройства, соединенные напрямую с вашим роутером. А следовательно, никакой необходимости возиться с iptables, переадресацией пакетов или маскарадингом DNS. Сначала запустите # ip, чтобы выяснить имена ваших проводных и беспроводных интерфейсов. У нас они именуются eth0 и wlan0 соответственно — не забудьте их переименовать, если у вас они другие. Для создания и редактирования профиля запустите
# nano /etc/netctl/bridgeи заполните файл такими настройками:
Description=”LXF Bridge connection”
Interface=br0
Connection=bridge
BindsToInterfaces=(eth0)
IP=static
Address=’192.168.0.100/24’
Gateway=’192.168.0.254’после чего выйдите из системы с помощью Ctrl + x, при выходе сохранив файл.
Здесь мы предположили, что ваш роутер выдает IP-адреса в виде 192.168.0.xx: информация от ip a сообщит вам, так ли это. Если нет, используйте в файле другие цифры: разумно настроить ваш роутер так, чтобы он избегал присваивать адрес, который вы дали своему Raspberry Pi (здесь — 192.168.0.100) через DHCP, однако это выходит за рамки данной статьи. (Следуйте инструкциям во врезке Настройка Hostapd)
Прежде чем проверять, работает ли это, надо включить наш сетевой мост и сервис hostapd, чтобы они запускались автоматически:
# systemctl enable netctl@bridge hostapdТеперь перезагрузитесь и перекреститесь: вы должны увидеть точку доступа “LXF Wireless” с любого устройства с беспроводной картой. Более того, вы должны быть в состоянии соединиться с ней, используя пароль acupoftea. В случае проблем попробуйте запустить hostapd в режиме отладки:
# hostapd dd /etc/hostapd/hostapd.confЭтот проект очень легко расширить в разных направлениях: те, кто озабочен своей конфиденциальностью, могут захотеть включить сюда поддержку Tor или VPN; клиенты, недовольные своим интернет-провайдером, могут решить автоматически отправлять твит при каждом падении скорости их соединения (см. код Alek-seyP на http://pastebin.com/WMEh802V): или вы можете добавить жесткий диск, чтобы он мог обслуживать файлы. Ни в чем себе не отказывайте.