BPI-R1 — часть 3 — Bananian — настройка точки доступа WiFi

    2015-03-26 19:23 | Автор: jekader | Filed under: FedoraMD


    После неудачи с драйвером wifi в федоре я принял решение что лучше смириться со старым ядром и кривым драйвером, зато иметь рабочее устройство.
    В связи с этим установил bananian с ядром 3.4.104+ из форка linux-suunxi - любимцем всех китайских производителей ARM железок.
    Подробности конфигурации ниже.

    Первые две главы практически идентичны федоре.

    Глава 1: техзадание

    Вот какую конфигурацию я хочу получить в итоге:

    1-4 порты Ethernet: внутреняя сеть
    5 порт Ethernet: uplink к провайдеру, IP получает по DHCP
    wlan0 - интерфейс на котором будет точка доступа
    lanbr0 - сетевой мост чтобы соединить LAN и WiFi пользователей в одну подсеть. На этом интерфейсе будет стоять внутренний IP 192.168.186.168 а также будет работать внутренний DHCP сервер.

    пользователи будут подключаться к wifi сети по WPA2 и выходить в интернет через 5 порт свитча.
    Глава 2: настраиваем свитч
    Для настройки используется драйвер b53 из OpenWRT посредством утилиты swconfig

    Конфигурация хранится в сетевых скриптах (/etc/network/if-pre-up.d/swconfig)
    порты подключены следующим образом:
    2-1-0-4-3
    порт номер 8 подключён к процессору. Таким образом, план следующий:
    порт 3 ставим во VLAN 101
    порты 2 1 0 4 ставим во VLAN 102
    порт 8 настраиваем на получение обоих VLAN'ов

    полная конфигурация:
    (в файле конфигурации закомментировать строку "exit 0" которая отключает скрипт по умолчанию)
    swconfig dev eth0 set reset 1
    swconfig dev eth0 set enable_vlan 1
    swconfig dev eth0 vlan 101 set ports '3 8t'
    swconfig dev eth0 vlan 102 set ports '4 0 1 2 8t'
    swconfig dev eth0 set apply 1

    Осторожно, после применения этих конфигураций сеть может и отвалиться так как на стороне ОС мы ещё не настроили VLAN'ы

    Глава 3: Bananian
    1) настраиваем сетевые интерфейсы
    root@bananapi:~# cat /etc/network/interfaces
    # interfaces(5) file used by ifup(8) and ifdown(8)
    auto lo
    iface lo inet loopback

    auto eth0 eth0.101 eth0.102 lanbr0

    # dhcp configuration on WAN port
    iface eth0.101 inet dhcp
    vlan-raw-device eth0

    # no config on LAN ports
    # this is attached to lanbr0
    iface eth0.102 inet manual
    vlan-raw-device eth0

    iface lanbr0 inet static
    bridge_ports wlan0 eth0.102
    address 192.168.186.168
    netmask 255.255.255.0

    2) перезапускаем сеть чтобы применить настройки VLAN
    # /etc/init.d/network restart
    3) ставим нужные пакеты
    # apt-get install isc-dhcp-server dnsmasq iptables-persistent
    4) настраиваем DHCP - добавляем следующее в конец /etc/dhcp/dhcpd.conf

    subnet 192.168.186.0 netmask 255.255.255.0 {
    range 192.168.186.16 192.168.186.123;
    option domain-name-servers 192.168.186.168;
    option domain-name "banana.local";
    option routers 192.168.186.168;
    option broadcast-address 192.168.186.255;
    default-lease-time 86400;
    max-lease-time 1000000;
    }

    5) перезапускаем сервисы
    # /etc/init.d/isc-dhcp-server restart
    # /etc/init.d/dnsmasq restart

    6) включаем NAT
    # IPTABLES -t nat -I POSTROUTING -s 192.168.186.0/24 -o eth0.101 -j MASQUERADE
    # /etc/init.d/iptables-persist save

    7) удостоверяемся что включена маршрутизация в ядре
    # sysctl net.ipv4.ip_forward
    net.ipv4.ip_forward = 1

    если выдаёт 0 - гуглим как поменять 😉

    В результате этих операций, компы подключённые к LAN портам должны получать IP и иметь доступ в интернет.

    Глава 4: hostapd

    Переходим к весёлым пляском с бубном чтобы заставить работать драйвер 8192cu - у него свой режим работы с hostapd, но realtek опубликовал его для древней версии. Я взял патч и применил его на самый новый hostapd.
    Результат на github: https://github.com/jekader/hostapd-rtl

    1) качаем зависимости
    # apt-get install git build-essential fakeroot devscripts
    2) клонируем репозиторий
    # git clone https://github.com/jekader/hostapd-rtl.git
    3) собираем и ставим rostapd-rtl
    # cd hostapd-rtl
    # bash build.sh
    # dpkg -i ../hostapd-rtl_2.4-2_armhf.deb

    4) правим по вкусу файл /etc/hostapd/hostapd.conf
    5) раскомментируем строку DAEMON_CONF в /etc/default/hostapd для активации службы
    6) запускаем службу
    # /etc/init.d/hostapd start

    Глава 5: Итог

    Точка доступа работает. Можно поиграться с настройками hostapd для правильной работы 802.11n на больших скоростях, но это выходит за рамки статьи.

    1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 3,50 out of 5)
    Loading...

    Метки: , , ,

    14 комментариев »


    комментариев 14

    1. Yuri:

      А можно попросить померять скорость с помощью iperf между бананой и лан клиентами?
      А то у меня на дебиане всё отлично, куча приложений и сервисов крутятся, а вот скорость по гигабитным линкам до клиентов не больше 150-200 Мбит/с.
      И это большой облом — ни самба, ни iptv, ни прочее, что нужно с бананы брать, нормально не работают…
      Между клиентами нормально — 800-900 Мбит/с

    2. jekader:

      Буду дома — измерю и поделюсь результатом.

    3. Владимир:

      WIFI корректно работает?

    4. jekader:

      # iperf -c 192.168.186.168
      ————————————————————
      Client connecting to 192.168.186.168, TCP port 5001
      TCP window size: 85.0 KByte (default)
      ————————————————————
      [ 3] local 192.168.186.18 port 59490 connected with 192.168.186.168 port 5001
      [ ID] Interval Transfer Bandwidth
      [ 3] 0.0-10.0 sec 450 MBytes 377 Mbits/sec

      Не гигабит конечно, но для моих нужд за глаза. WiFi работает с hostapd-rtl описанным выше, но только в режиме 20MHz. Вторичный канал подключаться отказывается на текущей версии драйвера.

    5. Yuri:

      Спасибо. Значит глюк платы.
      Там ещё скорость разная в зависимости от направления — от бананы или к ней.
      А hostapd из драйверов с сайта rtl нормально на 40 мгц работает. Или hostapd-rtl можно пропатчить на предмет проверки соседей — тоже 40 мгц начинают работать.

    6. jekader:

      В том и дело что когда hostapd пытается запросить сканирование соседей драйвер отвечает ошибку. Причём я поглядел на код и ответственный за это кусок кода в версии от realtek аналогичен тому что в новой версии с патчами.

    7. Yuri:

      В файле src/ap/hw_features.c
      ищем
      if (ret < 0) {
      wpa_printf(MSG_ERROR,
      "Failed to request a scan of neighboring BSSes ret=%d (%s)",
      ret, strerror(-ret));
      И меняем следующую строку:
      // return -1;
      return 0;//ignore this error

      40 мгц после этого работает.

    8. jekader:

      Ха ха, такой костыль я тоже думал подставить но решил что такое потом стыдно будет на github заливать.

    9. Yuri:

      Ну я делал не заливать, а пользоваться… 🙂

    10. jekader:

      Я правильно понял что hostapd от realtek тоже пришлось так патчить?

    11. Yuri:

      Нет, от realtek, который версии 0.8 работает сразу.

    12. Yuri:

      Видел, что для нового hostapd для 40 мгц нужен параметр
      noscan=1
      в конфиге. Сам не проверял, всё разломал пока.

    13. jekader:

      Это не приняли в upstream и есть только в виде патча в дереве OpenWRT:

      https://dev.openwrt.org/browser/trunk/package/network/services/hostapd/patches/300-noscan.patch

      Попробую применить его к hostapd-rtl чтоб веселее работало, спасибо за идею!

    14. jekader:

      Наложил патч, теперь работает и 40 МГц

    Leave a comment

    *