Punkt dostępowy (z ang. Access Point) pozwala na uruchomienie na urządzeniu wyposażonym w kartę bezprzewodową takich usług jak hotspot czy serwer plików/drukarek z wykorzystaniem WiFi lub na połączenie bezprzewodowe dwóch komputerów. W poniższym artykule pokazane jest jak uruchomić AP na Raspberry Pi z użyciem popularnej karty sieciowej USB TP-Link TL-WN722N.

Poniższą konfigurację można równie dobrze zastosować na zwykłym komputerze z systemem Debian, Ubuntu lub Red Hat, Fedora czy CentOS.

Sprzęt

Do testów wykorzystałem kartę sieciową TP-Link TL-WN722N na USB, która może pracować w trybie Master (Access Point). Zawiera ona w sobie chipset Atheros dzięki czemu nie będziemy mieć problemów ze sterownikami. W Raspbianie wykorzystujemy do tego sterownik ath9k. Jest to wolny sterownik, który został stworzony po tym jak zamknięto projekt MadWifi.
TP-Link TL-WN722 oraz Raspberry Pi

Po włożeniu do portu USB, karta zostaje poprawnie wykryta (Bus 001 Device 107: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n i jest gotowa do pracy.

root@raspberrypi:~# iwconfig
lo        no wireless extensions.

wlan0     IEEE 802.11bgn  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off

eth0      no wireless extensions.

Ręczna próba włączenia trybu Master kończy się błędem, ale nie należy się tym przejmować.

root@raspberrypi:~# iwconfig wlan0 mode master
Error for wireless request "Set Mode" (8B06) :
    SET failed on device wlan0 ; Invalid argument.

Konfiguracja

Na samym początku musimy zainstalować odpowiednie oprogramowanie, które pozwoli nam na stworzenie sieci WiFi. Posłuży nam do tego hostapd oraz dnsmasq. Instalujemy wymagane pakiety:

apt-get install hostapd dnsmasq

Konfiguracja hostapd

Zaczynamy od edycji pliku /etc/hostapd/hostapd.conf. Otwieramy go ulubionym edytorem tekstu i dopisujemy w nim zawartość:

# Tutaj podajemy interfejs naszej karty WiFi
interface=wlan0

# Sterownik (nie zmieniamy)
driver=nl80211

# SSID sieci, jej kanał oraz Operation mode (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g)
ssid=OSWorld
channel=7
hw_mode=g

# 0 = Open System Authentication
# 1 = Shared Key Authentication
auth_algs=1

# Ustawienia szyfrowania sieci
wpa=3
wpa_passphrase=OSWorld123
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

# 0 = accept unless in deny list
# 1 = deny unless in accept list
# 2 = use external RADIUS server (accept/deny lists are searched first)
macaddr_acl=0

# 0 - rozgłaszanie SSID
# 1 - ukrysie SSID
ignore_broadcast_ssid=0

Konfiguracja dnsmasq

Program dnsmasq zawiera w sobie serwer DHCP oraz DNS. Ma on bardzo małe wymagania systemowe dzięki czemu idealnie nadaje się do uruchomienia na routerze czy Raspberry Pi. Konfiguracja zapisana jest w pliku: /etc/dnsmasq.conf.

W pliku tym edytujemy dwie linie (interface oraz dhcp-range) i ustawiamy na odpowiadające nam wartości:

interface=wlan0
dhcp-range=192.168.1.2,192.168.1.50,12h

Konfiguracja iptables

Musimy również skonfigurować firewalla systemowego, aby przekazywał ruch z karty WiFi do Internetu. Dla przykładu możemy stworzyć plik /etc/init.d/firewall o zawartości:

#!/bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

iptables-save

Możemy również ip4_forward ustawić w pliku /etc/sysctl.conf:

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

a następnie wydać polecenie sysctl -p /etc/sysctl.conf.

Uruchamiamy Access Pointa

Na samym początku musimy dodać adres IP dla karty wlan0. Wydajemy polecenie:

ifconfig wlan0 192.168.1.1 netmask 255.255.255.0

Aby adres IP był nadawany automatycznie należy do pliku /etc/network/interfaces dopisać lub zmodyfikować ustawienia interfejsu wlan0.

allow-hotplug wlan0
auto wlan0
iface wlan0 inet static
        address 192.168.1.1
        broadcast 192.168.1.255

Restartujemy dnsmasq, aby zaczytał nową konfigurację (/etc/init.d/dnsmasq restart) i uruchamiamy hostapd (hostapd -d /etc/hostapd/hostapd.conf). Na konsoli powinniśmy zobaczyć: (pełen listing)

root@raspberrypi:~# hostapd -d /etc/hostapd/hostapd.conf
[...]
Using interface wlan0 with hwaddr b0:48:7a:93:c7:81 and ssid 'OSWorld'
Deriving WPA PSK based on passphrase
SSID - hexdump_ascii(len=7):
     4f 53 57 6f 72 6c 64                              OSWorld
PSK (ASCII passphrase) - hexdump_ascii(len=10): [REMOVED]
PSK (from passphrase) - hexdump(len=32): [REMOVED]
random: Got 20/20 bytes from /dev/random
GMK - hexdump(len=32): [REMOVED]
Key Counter - hexdump(len=32): [REMOVED]
WPA: Delay group state machine start until Beacon frames have been configured
VLAN: vlan_set_name_type(name_type=2)
nl80211: Set beacon (beacon_set=0)
[...]
RTM_NEWLINK, IFLA_IFNAME: Interface 'wlan0' added
nl80211: if_removed already cleared - ignore event
VLAN: vlan_newlink(wlan0)

Jak można zauważyć, karta przełączyła się w tryb Master a sieć WiFi jest dostępna dla użytkowników.

Access Point na Raspberry Pi

root@raspberrypi:~# iwconfig wlan0
wlan0     IEEE 802.11bgn  Mode:Master  Frequency:2.442 GHz  Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Power Management:off

Pozostaje nam uruchomienie, skryptu który skonfiguruje nam firewalla i udostępni Internet klientom na WiFi. Wydajemy polecenia:

root@raspberrypi:~# chmod +x /etc/init.d/firewall
root@raspberrypi:~# /etc/init.d/firewall

Adresy IP przydzielone przez dnsmasq możemy podejrzeć w pliku:

root@raspberrypi:~# cat /var/lib/misc/dnsmasq.leases
1349726714 68:5d:43:21:05:6b 192.168.1.40 Callisto-7520 01:68:5d:43:21:05:6b
1349718894 4c:80:93:02:bc:14 192.168.1.9 Vostro 01:4c:80:93:02:bc:14
1349719268 4c:80:93:02:63:81 192.168.1.20 Asgard 01:4c:80:93:02:63:81

Teraz możemy uruchomić tylko naszą wyobraźnię i wykorzystać Raspberry Pi do pracy jako domowy router z funkcją WiFi.

  • Rysio

    A test to co pies:P

    hehe…
    Warto sprawdzić coś takiego np. jako serwer WWW, ilość połączeń HTTP, czy jak sobie radzi versus router.

  • stefan

    a czy 722 nie wymaga przypadkiem huba z oddzielnym zasilaniem, czy malina wstaje bez problemu z podpiętym adapterem?

    • Gerard Stańczak

      wstawać wstanie bez problemu, co jedynie urządzenie USB może nie działać (dysk usb np). W przypadku w.w karty wifi obyło się bez dodatkowych akcesoriów

  • Pingback: Archiwum Access Point na Raspberry Pi()

  • prto

    Strona o Linuxie i alternatywnych systemach a na screene Windows ;)

  • carriera

    Testowałem identyczną konfigurację w lipcu na ówczesnej wersji raspbiana i miałem spore problemy ze stabilnością. Rozłączało mnie co maksymalnie kilka godzin. Czy Tobie dziś to działa stabilnie?

    • olewales

      Dokładnie z tego powodu wyleczyłem się z hostapd. Pół roku walczyłem ze stabilnością połączenia przy użyciu teoretycznie bezproblemowej karty (Atheros na PCI). W końcu kupiłem router. Sieć padała najczęściej co kilkanaście minut. Z tego co pamiętam było lepiej, gdy szyfrowanie było wyłączone

    • Trudno powiedzieć bo testowałem to kilka godzin. Byłem podpięty do AP na RaspberryPi przez jakieś 2-3 godzinki i nie było problemów. Więcej nie powiem bo nie wiem.

  • Arti

    Hmm a u mnie nie działa :)

    Wszystko jest niby OK
    WIFI dziala … Nadane IP są widoczne w tej lokalizacji
    /var/lib/misc/dnsmasq.leases

    Ale internetu nie udostępnia ;/ co zrobić?

    root@raspberrypi:~# chmod +x /etc/init.d/firewall
    root@raspberrypi:~# /etc/init.d/firewall
    oczywiście te procedury wykonane wraz ze stworzeniem pliku :)

    A na laptopach komunikat łączność ograniczona :)

    • Mariusz

      Zmień sterowniki karty wifi na nowsze w swoim laptopie. Jeśli masz na atherosie. W swojej sieci mailem z tym problem. Ale nie koniecznie musi to być ten sam problem u Ciebie.

    • Andrzej

      Mam ten sam problem, wszystko ustawione według intrukcji a stan połaczenia na komputerze ograniczone lub brak łączności. Jakieś pomysły?

  • Bartosz

    używam do tego samego celu karty EDMIMAX nano.
    Skonfigurowałem wszystko tak samo, ale podczas uruchamiania hosta (hostapd -d /etc/hostapd/hostapd.conf)
    pokazuje się błąd:
    failed to initialize nl80211
    segmentation fault

    To wina sterownika?
    Jaki wpisać aby był poprawny?

    • cloudb

      chcę mieć tylko acces pointa, bez dostępu do internetu. Chcę tylko uzyskac połączenie, zrobiłem więc wszystko poza iptables i próbuje się łączyć:
      uwierzytelnianie przechodzi
      próbuje uzyskać adres IP, w tym momencie zasięg sieci nagle spada (zasilanie?)
      adresu nie uzyskuje, choć sprawdzałemkonfiguracje dhcp i wyglada poprawnie

      miał ktoś podobny problem?

  • Daniel

    A da się zrobić coś takiego, że zrobimy RPI jako access point i po połączeniu z nim, jak wejdziemy w przeglądarce na jego adres ip zrobić stronę www, z której będzie można sterować RPI? Podobnie jak WEBIOPi, tyle, że łączylibyśmy się bezpośrednio z RPI.

  • Mariusz

    Co należy zmienić by na interfejsie LAN przydzielane były adresy 192.168.10.100 … 192.168.10.200 ?

    Ja ustawiłem:

    interface=wlan0
    dhcp-range=192.168.10.100,192.168.10.200,12h

    oraz w iptables:

    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

    Łączy się ale nie przydziela IP

    • Mariusz

      No dobra, już przydziela IP. Jednak próby pingowania do wp.pl zwracają:

      Badanie wp.pl [212.77.100.101] z 32 bajtami danych:
      Odpowied« z 212.77.100.101: bajt˘w=32 czas=18ms TTL=244
      Odpowied« z 212.77.100.101: bajt˘w=32 czas=21ms TTL=244
      Odpowied« z 212.77.100.101: bajt˘w=32 czas=24ms TTL=244
      Odpowied« z 212.77.100.101: bajt˘w=32 czas=21ms TTL=244

      Statystyka badania ping dla 212.77.100.101:
      Pakiety: Wysˆane = 4, Odebrane = 4, Utracone = 0
      (0% straty),
      Szacunkowy czas bˆĄdzenia pakiet˘w w millisekundach:
      Minimum = 18 ms, Maksimum = 24 ms, Czas ˜redni = 21 ms

    • Mariusz

      Dobra, już działa.

      Nie uruchomiłem

      chmod +x /etc/init.d/firewall
      /etc/init.d/firewall

      Można skasować

  • Mariusz

    1. Jak dla dnsmasq zrealizować przydzielenie konkretnego adresu na podstawie adresu MAC klienta?
    2. Chciałbym podpiąć drugą kartę (wlan2) i skonfigurować LAN2 zupełnie odseparowany od LAN1. Chciałbym, żeby dla LAN1 serwer DHCP przydzielał adresy z puli 192.168.1.X a dla LAN2 adresy z puli 192.168.2.X.

    Ktoś wie i podpowie jak to zrobić?

  • dd

    Skorzystałem z tego wpisu i efekt u mnie jest taki, że sieć jest ale z ograniczeniami. Pytanie dlaczego?

  • gac

    Cześć, czy można uruchomić AP na openelec? Karta to tp-link 722