Wifi роутер на Raspberry Pi

Содержание

Внешний вид роутера на Raspberry pi с адаптерами Asus N14 и NoName Wifi adapter

Роутер должен не только раздавать интернет не только из Ethernet-порта, но и из одного WiFi-адаптера на другой. Это бывает очень полезно в путешествиях. Например, в гостинице легко оказаться в номере, куда местная точка доступа плохо добивает. А мощный WiFi-адаптер поймает даже слабый сигнал и раздаст его на все имеющиеся планшеты и телефоны. Это также может помочь сэкономить деньги там, где плата за интернет берётся с каждого устройства отдельно.

Подготовительные шаги

Практически каждую команду из этой статьи нужно запускать под super user’ом. Можно запустить под super user’ом Midnight Commander и спокойно редактировать им системные файлы и выполнять любые команды.

Обновление пакетов

Все мануалы по Raspberry Pi начинаются тем, что советуют обновить всё, что можно. Следуя канону, напишу эти команды и я:

Можно ещё обновить сам Raspberian.

Удалённый доступ к Raspberry Pi

Если у вас не включён SSH, то стоит его включить в настройках Raspberry Pi. Запустить настройки можно командой:

Там идём в раздел Advanced Options -> SSH. И включаем их.

Raspberry PI config utility

Для подключения к Raspberry Pi через ssh можно использовать mRemoteNG, а можно утилиту ssh , она есть и в Linux и Windows.

Здесь 192.168.1.2 это IP-адрес Raspberry, который выдал ей роутер моей локальной сети. Чтобы узнать, какой IP-адрес получила ваша Raspberry можно зайти в Admin-интерфейс вашего домашнего роутера или посмотреть информацию об интерефейсах на самом Raspberry через команду ifconfig .

Для удалённого доступа к рабочему столу Raspberry я пытался настроить VNC. Потратил много времени в итоге ничего хорошего не вышло. Проще использовать XRPD.

После выполнения этой команды больше ничего настраивать не надо. Для подключения к Raspberry из Windows берём mstsc или программу вроде mRemoteNG и подключаемся к Raspberry Pi 2 используя логин и пароль юзера Raspberrian.

Доступ по rdp через MRemote

Кстати, удобно настраивать Raspberry Pi, если подключить его к локальной сети через Ethernet-кабель. Таким образом настройки WiFi-адаптеров не отрубят вас от Raspberry.

При настройке роутера удобно после каждого шага делать бэкап SD-карточки, для этого можно воспользоваться чем-нибудь вроде Acronis True Image или линуксовой утилиты dd: так будет легко откатиться назад, если что-то пошло не так.

При настройке роутера потребуется править несколько конфигурационных файлов. Мне показалось удобным создать папку, вроде /home/pi/vrouter и накидать туда soft-link’и на все нужные конфиги. Это стоит делать по ходу установки, потому что сами конфиги появляются только после установки соответсвующих программ.

Настройка интерфейсов (Старые версии Raspberrian до Stretch)

Чтобы у знать, какие интерфейсы у нас есть, выполним команду ifconfig .

Если вместо wlan0, eth0 и т.п. вы видите что-то вроде "wlx00e01ce3030f" или "enxb822ebfb32ad", у вас включены "predictable network interface names" их можно выключить в raspi-config .

На выводе команды видны следующие интерфейсы:

  • eth0 проводной Ethernet адаптер. Им мы будем пользоваться, чтобы подключаться к Raspberry на время настройки. С него также можно будет брать интерент.
  • lo loop back, он же localhost, нам он не интересен.
  • wlan0 простенький китайский noname WiFi-адаптер, которым я буду раздавать интернет. На нём развернём сеть Raspberry. Адаптер должен поддерживать master-mode.
  • wlan1 у меня это мощный WiFi-адаптер Asus N-14, которым я буду ловить интернет.

Роутер подключён к сети 192.168.1.0 раздаёт интерентет в сеть 10.0.0.0

Раздавать интернет соит имеено с адаптера wlan0. Таким образом мы сможем отключить второй адаптер, если захотим использовать eth0, как источник интеренета и wlan1 нам окажется без надобности.

Изменим конфигурацию интерфейсов следующим образом:

Смысл этой конфигурации в том, что eth0 и wlan1 настраиваются автоматически. А wlan0 имеет статический IP-адрес 10.0.0.1. По этому IP-адресу можно будет подключаться к Raspberry Pi по SSH или VNC даже если остальные адаптеры будут выключены.

Wlan1 берёт настройки подключений к интернету из /etc/wpa_supplicant/wpa_supplicant.conf . Этот файл может понадобиться в будущем, для добавления новых сетей.

Вот пример wpa_supplicant.conf

Настройка интерфейсов в Raspberrian Stretch

В Raspberrian Stretch сильно изменилась настройка интерфейсов и, думаю, что этот момент ещё будут дорабатывтаь и менять дальше. На текщуй момент (4 апреля 2018 года) управлять интерфейсами нужно через /etc/dhcpcd.conf и через wpa_supplicant. Погрузиться в эту тему можно вот с этого поста https://raspberrypi.stackexchange.com/a/37921/32956.

Установим статический IP для интерфейса wlan0. Для этого нужно в конец файла добавить сдедующие 2 строки:

Остальные интерфейсы будут подключаться к интернету автоматически.

На текущий момент в Stretch есть такая проблема, что wpa_supplicant всё равно пытается подключить wlan0 к доступной WiFi сети и получить IP. Это нам не нужно, потому что wlan0 будет использоваться hostapd и должен иметь статический IP 10.0.0.1.

Есть два способа, как можно запретить wpa_supplicant подключать wlan0 к сети.

Первый Пропатчить файл /lib/dhcpcd/dhcpcd-hooks/10-wpa_supplicant . Там, вконце, есть строчки

Идея патчинга хуков мне не очень нравится.

Второй способ, это создать отдельный файл конфигуркции wpa_supplicant для wlan0 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf со следующим кодом:

Где b8:27:eb:53:4d:fd это mac-адрес встроенного адаптера (его можно узнать с помощю команды ifconfig ).

Dnsmasq

Dnsmasq это DHCP-сервер, который будет раздавать IP-шники в нашей новой сети. Установить его очень просто:

Dnsmasq сам подымет свой сервис, а вам останется его сконфигурировать. Стоит сказать, что dnsmasq.config хорошо документирован.

interface=wlan0 обозначает интерфейс, на котором dnsmasq будет ожидать входящих DHCP-запросы. Wlan1 и eth0 — интерфейсы, которыми мы ловим интернет.

Sysctl.conf

Включим пресылку пакетов, для этого поправим файл /etc/systcl.conf:

По умолчанию, все настройки в этом файле закомментировны. Для настройки роутера важно, чтобы были раскоментированы следующие настройки:

Iptables

Настроим NAT. Пусть настройки iptables устанавливаются при запуске Raspberry, для этого поправим файл rc.local .

Заведём две переменные: SOURCE адаптер-источник интернета и DEST адаптер, раздающий интернет. Так нам будет удобно удобно поменять назначение адаптеров.

В будушем, чтобы изменить источник интернета с wlan1 на eth0 нам потребуется всего лишь поменять ЮSOURCE=wlan1 на SOURCE=eth0 . Другие файлы конфигурации менять не прийдётся.

Hostapd

hostapd это утилита, которая будет делать точку доступа из WiFi-адаптера. Она переводит WiFi-адаптер в master mode и сама поднимает bridge между адаптерами. hostapd можно запускать из консоли командой hostapd [path_to_config] . Но нам нужно, чтобы wlan0 становился точкой доступа сразу же после загрузки Raspberry. Потому нам нужно запустить hostapd, как сервис. Для этого мы настроим путь до конфига hostapd в файле /etc/default/hostapd .

Теперь настроим конфиг hostapd.conf . Именно с ним возникают различные сложности.

Для начала можно попробовать использовать конфиг для простой сети без авторизации с дефолтным драйвером:

Если у вас получилось подключиться к интернету с такой конфигурацией, значит можно настраивать авторизацию. А если подключиться не вышло, то, вероятно, проблема с драйвером. Нужно найти описание вашей сетевой карты и изучить, как установаить драйвер вашей сетевоей карты в Raspberrian. Найти информкцию по вашему адаптеру вам поможет https://wikidevi.com.

Мой конфиг выглдяит следующим образом.

Посмотреть активен ли сервис hostapd можно с помощю команды service —status-all .

Failed to update rate sets in kernel module

При запуске hostapd у меня он выдавал ошибку Failed to update rate sets in kernel module. Вылечить её конфирурированием я никак не смог, потому собрал hostapd из исходников. На момент написания статьи (RASPBIAN WHEEZY) в репозиториях Raspberian лежал hostapd 1.0, а из исходников я собрал версию 2.4. Вместе с RASPBIAN JESSIE в репозиториях появился hostapd 2.3, таким образом 2.3 вы можете поставить просто выполнив apt-get install hostapd .

Сборка hostapd из исходников.

Однако я бы советовал зайти на страницу https://w1.fi/cgit/hostap/refs/tags и посмотреть, что там есть за версии. На момент написания этой статьи версия hostap_2_4 неплохо работала.

Версии hostapd

Performance

На мой взгляд, быстродействие WiFi-роутер на Raspberry зависит не сколько от самой Raspberry, сколько от WiFi-адаптера, который был использован для раздачи интерента. Например, китайский No-Name адаптер дал мне скорость в ≈20 мегабит/с, а Asus N14 чуть больше 30 мегабит/с. Стоит ещё учесть, что WiFi-адаптер может потреблять много энергии, больше, чем способен дать USB-порт Raspberry Pi. В этом случае адаптер может понизить скорость, понизив своё энергопотребление. Побороться с этим можно спомощю USB-хаба с дополнительным питанием, либо использовав специальный USB-кабель.


Источник: musuk.guru