Artikel top billede

(Foto: Computerworld)

Guide: Lav et trådløst accesspoint med Raspberry Pi

Hvorfor skal din trådløse router have al morskaben? Adgang til dit netværk og dermed til internettet kan du klare med en rigtigt konfigureret Raspberry Pi. Det betyder, at man nemt kan udvide sit netværks trådløse rækkevidde med lidt Ethernet-kabelføring. Man kan også lave et access-point specielt til gæster eller blot føje en praktisk SSID til sit hjem.

Af Torben Okholm, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Dit Pi-access-point bliver bygget oven på Linux ved hjælp af velprøvede værktøjer fra hardcore-enden af softwarespektret, og du får al den kontrol, du kan ønske dig, over adgangen til dit netværk og dets funktioner.

Bemærk, at vi skal bruge en Raspberry Pi 3 eller Zero W til dette projekt [Billede A], og det bygger på den lidt udvidede tredje udgave. Det hænger udelukkende sammen med den lidt haltende USB-bus hos Pi. Hvis man føjer et trådløst modul til en tidligere udgave, påvirker man alvorligt den potentielle netværksbåndbredde.

Det skyldes, at USB- og Ethernet-portene deler den samme datarail, men senere modeller har indbygget Wi-Fi på kortet. Du kan stadig nyde godt af en Pi 2B eller lignende, men vi tager ikke ansvaret for eventuelle skuffende resultater.

Billede A

1 Begynd fra grunden

Det er unægtelig hørt før, men vi gentager det: Når man indleder et Raspberry Pi-projekt, er der så mange bittesmå variabler involveret i Linux-installationen, at vi varmt anbefaler dig at begynde fra grunden. Så er vi sikre på, at du følger os nøje. Find dit microSD-kort (eller køb et nyt), og sæt det ind i din pc’s kortlæser.

Download en ren kopi af Raspbian Stretch fra www.raspberrypi.org/downloads/raspbian. Du skal ikke nødvendigvis bruge desktopversionen, for alt det, vi laver, er kommandolinjebaseret. Vi henter blot den komplette version for en sikkerheds skyld. Nu udpakker du filen og lægger ISO’et et sted, hvor du kan finde det igen.

Find dernæst din foretrukne SD-læser – vi er glade for Rufus [Billede B] (http://rufus.akeo.ie) – og skriv filen til dit kort. Du mister alle data, der var på kortet. Slut din Pi til en Ethernet-forbindelse, sæt kortet i din Pi, tænd for den, og gå i gang med at boote.

Billede B

2 Opdater og download

Et nyinstalleret Raspbian-system [Billede C] er ikke up to date. Du skal enten åbne et terminalvindue fra Raspbian PIXEL-desktoppen eller forlade desktoppen og gå til en tty-konsol med Ctrl-Alt-F1. Hvis du bruger light-versionen, er du allerede ved tty-konsollen. Af hensyn til sikkerheden bør du nu ændre dit kodeord ved at skrive passwd .

Standardkodeordet på kontoen “pi” er “raspberry”, og du skal derfor skrive det, når du bliver bedt om det (det kommer ikke frem på skærmen). Skriv derefter dit eget valg af kodeord. Skriv så sudo apt-get update (angiv dit nye kodeord, hvis du bliver bedt om det) for at opfriske Raspbians liste over aktuelle pakker. Skriv sudo apt-get upgrade for at downloade den seneste version af hver pakke på dit system, som ikke er opdateret.

Billede C

Det tager et stykke tid, fordi det hele bliver kompileret på Pi’ens ret langsomme hardware under installationen. Vi skal bruge nogle få pakker, der ikke bliver installeret som standard, og dem henter du med sudo apt-get install dnsmasq hostapd . Derefter sikrer du dig, at hverken dnsmasq (der håndterer DNS, DHCP og router-advertisement) eller hostapd (ansvarlig for trådløs håndtering og autentifikation) kører: Skriv sudo systemctl stop dnsmasq efterfulgt af sudo systemctl stop hostapd . De er endnu ikke konfigureret, og det er derfor bedst at starte dem senere, når vi er kommet igennem det beskidte arbejde.

3 Stabiliser Wi-Fi

Tjek et par sager, før vi går videre, for resultaterne kan være afvigende. Skriv ifconfig -a -s i din terminal, og noter dine netværksenheders navne. De bør som standard være wlan0 og eth0 , men hvis de ikke er det, skal du erstatte dem i de følgende trin, så det svarer til din egen konfiguration.

Kør sudo nano /etc/dhcpcd.conf for at åbne konfigurationsfilen til Pis DHCP-klient, og gå ned til bunden af filen. Tilføj linjen interface wlan0 , og tilføj under den static ip_address=192.168.123.1/24 for at placere din Wi-Fi-adresse rigtigt. [Billede D]. Vi bruger et andet subnet (repræsenteret af det tredje tal, i dette tilfælde 123, men du kan vælge enhver gældende værdi).

Billede D

Men bridging – og brugen af din routers eksisterende DHCP- og DNS-funktioner – er en mulighed, hvis du installerer bridge-utils og bruger man bridge-utils til at læse manualen. Gå ud af nano med Ctrl-X, svar ja til at gemme filen, og kør så sudo service dhcpcd restart for at aktivere din nye konfiguration.

Mulige alternativer

En Raspberry Pi 3 udgør et fornuftigt access-point, men fremragende er det ikke, og det bliver det nok aldrig, fordi Pi ikke er specialiseret hardware. Hvis du vil have et AP, som du konfigurerer ned i de mindste detaljer, skal du bruge routerhardware, der understøtter en variant af firmware-erstanings-WRT.

Det kan være OpenWRT eller DD-WRT. Der er en lang liste over kompatibel hardware på http://wiki.openwrt.org/toh/start, inklusive, hvis du leder grundigt, Raspberry Pi. Lad være med at forvente forrygende ydelse, men hvis du vil sammensætte et specialiseret AP uden at bruge timer på at slås med indviklede config-filer, der kan ødelægge hele din opsætning på nul komma fem (ikke at vi taler af erfaring, naturligvis ikke), er det modne OpenWRT værd at stifte bekendtskab med. Sørg blot for at downloade den korrekte version til din hardware: Til Pi 3 er det bcm2710.

4 Opsætning af dnsmasq

Vi prøver at fortælle dnsmasq noget om det access-point, vi prøver at etablere, men vores begrænsede netværk skal ikke bruge halvdelen af den information, som findes i standard- konfigurationsfilen. Omdøb den, der er der, med sudo mv /etc/dnsmasq.conf /etc/dsnmasq.conf.old , og brug så sudo nano /etc/dnsmasq.conf til at begynde på en blank erstatning.

Vi skal kun bruge tre linjer. Den første er interface=wlan0 , der fortæller, hvilken enhed vi bruger. På den næste linje tilføjer du vores definition af det, som dnsmasq formodes at levere: dhcp-range=192.168.123.2,192.168.123.40,255.255.255.0,24h . Dette giver dnsmasq start og slutning på den ip-adressemængde, der skal alllokeres (det kan du justere), subnetmasken (lad den være, som den er) og det leasetidsrum (i timer), der skal gives til forbundne enheder.

Gå ud af nano, og gem. Det er faktisk alt, hvad du skal gøre for at få dnsmasq arrangeret. Der findes et væld af potentielle valgmuligheder på dnsmasqs manpage, men det er ikke umagen værd at udforske dem, før du er sikker på, at alt virker, som det skal. Vend tilbage hertil senere.

5 Opsætning af hostapd

Når netværksrouting er på plads, og de lokale ip-adresser er klar til at blive serveret, er tiden inde til at tage fat på den svære del: trådløse autentifikation. Hostapd omfatter ikke en standard-konfigurationsfil. Begynd derfor at redigere en med sudo nano /etc/hostapd/hostapd.conf .

Bemærk, at de følgende variabler, som du senere kan redigere, så de passer til netop dit netværk, skal tilføjes linje for linje og uden mellemrum i begyndelsen af linjerne. Vi skal først definere, hvilken enhed vi håndterer ( interface=wlan0 ), hvilken driver vi vil bruge ( driver=nl80211
er Pis standard), og hvad vi vil kalde vores netværk ( ssid=AltomDATA ). Dernæst følger lidt hardwaredefinition.

Tilføj hw_mode=g for at bruge 2,4 GHz trådløs frekvens, channel=7 (eller hvad den mest frie netværkskanal i dit område nu er) for at angive dit access-points trådløse kanal, wmm_enabled=0 for at fravælge trådløse multimedie-extensions i øjeblikket og macaddr_acl=0 for at angive, at du ikke ønsker at bruge en MAC-adresses access-control-liste.

Nu vender vi os mod sikkerheden. Inddrag auth_algs=1 for at specificere, at du kører i WPA-tilstand, og derefter wpa=2 for at bruge WPA2-specifikt. Brug wpa_key_mgmt=WPA-PSK og rsn_pairwise=CCMP for at angive nogle få afgørende parametre.

Dernæst wpa_passphrase=SubscribeToday (eller en anden streng af tegn på mellem 8 og 64 tegn) til at definere dit WPA-kodeord. Når du har gemt konfigurationsfilen [Billede E], skal du fortælle hostapd, hvor den er. Skriv sudo nano /etc/default/hostapd ved din shell, og erstat den linje, der begynder med #DAEMON_CONF med DAEMON_CONF=”/etc/hostapd.conf” .

Billede E

6 Start og oversæt

De processer, vi stoppede tidligere, kan vi nu starte igen ved hjælp af sudo systemctl start hostapd og sudo systemctl start dnsmasq . På dette stade kunne vi teknisk set reboote og få vores access-point op at køre, men vi mangler stadig nogle afgørende interne justeringer.

Først skal vi aktivere ip-forwarding ved at åbne /etc/sysctl.conf og fjerne hash-symbolet for at udkommentere linjen net.ipv4.ip_forward=1 , før du gemmer filen. Dernæst skal vi implementere noget, der hedder en masquerade. Det er i korte træk en specialiseret oversættelsesalgoritme til nerværksadresser.

Den router trafikken mellem enheder uden at forstyrre de oprindelige pakker på nogen måde. Kør sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE for at etablere den og lade den route udgående trafik fra eth0 og videre til dit netværk. Nu skal vi sikre os, at iptables kører på samme måde hver gang.

Du kan bruge rutinen iptables-save til at lægge dens variabler i en fil med sudo sh -c “iptables-save > /etc/iptables.ipv4.nat” . Lad os nu sætte disse regler til at køre, hver gang Pi booter: Åbn /etc/rc.local, og tilføj iptables-restore < /etc/iptables.ipv4.nat lige over den linje, der siger exit 0 .

Trafikregulering

 

Hvis du har tænkt dig at bruge din Pi som et gæstenetværk, eller hvis du vil sinke dine uploads for at forhindre, at dine download-hastigheder styrtdykker, er Wondershaper et fremragende værktøj. Det er lillebitte – det er faktisk et script på 15 kB – men det er umådelig nyttigt, hvor du vil styre den hastighed, hvormed trafik går igennem din hardware.

Begynd med at downloade det fra Pis standardlagre ved hjælp af sudo apt-get install wondershaper , og herfra kan du køre det for første gang med sudo wondershaper eth0 1024 1204 . Denne kommando begrænser downloadet (første værdi) og upload (anden værdi) af Pi’ens Ethernet-forbindelse til det helt urimelige 1.024 kB/sek. Du kan tjekke, om det virker, med wondershaper eth0 eller ved at køre en hastighedstest på for eksempel www.speedtest.net [Billede G].

Dette script er måske mest anvendeligt, hvis det bliver kørt ved boot-tid. Kør derfor sudo nano /etc/rc.local (indrømmet, det er lidt klodset), og tilføj /sbin/wondershaper  efterfulgt af dine foretrukne begrænsninger. Gem derefter filen, og reboot. Hvis du en dag ønsker at stoppe Wondershapers handlinger, kører du blot sudo wondershaper clear eth0 for at rydde dets aktuelle parametre, eller fjern det fra /etc/rc.local. Så holder det op med at køre automatisk.

7 Reboot og test

Du kan nu trygt reboote din Pi – enten via PIXELs grafiske interface eller ved at skrive sudo reboot i kommandolinjen. Du får sandsynligvis en advarsel om nogle konfigurationsfiler, der bliver overskrevet. Det er resultatet af en tidligere ogradering, og de konfigurationsfiler, du har angivet, burde være sikre.

Alt er forhåbentlig godt, men du kan prøve et par muligheder for at blive sikker. Boot en Windows-maskine (eller din mobiltelefon), og søg efter lokale netværk. Du bør nu se dit nye SSID dukke op. Skab forbindelse til det ved at bruge det kodeord, du tidligere valgte. Nu bør du kunne få adgang til internettet.

Når du igen er på din Pi, kører du ifconfig i et terminalvindue. Du bør kunne se, at det trådløse interface [Billede F] er blevet tildelt en ip-adresse. Hvis du oplever nogen problemer, kan du prøve nogle få ting. Og ja, det er en ringe trøst i betragtning af, at du er nødt til at tolke Linux-fejlmeddelelser.

Prøv manuelt at starte hostapd og dnsmasq, og holde øje med advarsler. Hvis de begge ser ud til at virke, og dit netværk alligevel ikke kører, skal du køre sudo hostapd -dd /etc/hostapd.conf > /tmp/hostapd.log og trykke Ctrl-C for at stoppe processen efter cirka ti sekunder og dernæst køre nano /tmp/hostapd.log for at få adgang til hostapds detaljerede diagnostik-output.

Billede F

8 Justeringer

Nu har du fået dit eget trådløse access-point. Hvad kan du bruge det til? Hvis du for eksempel er omhyggelig med at redigere linjen ignore_broadcast_ssid=1 , kan du skjule Pi’ens SSID og holde dit netværk privat. Du kan også reducere nogle beregninger og helt fjerne WPA-sikkerhed, hvis du er masochistisk nok til at tillade et usikret access-point at køre på dit netværk.

Dine gæster vil takke dig, men det vil din internetudbyder ikke. Selv ville vi ikke lade en Pi stå åben, men den er den perfekte vært til et gæstenetværk. Du kan uddele et kodeord uden at afsløre dine kernedetaljer, og det er endda muligt at begrænse netværksgennemløb for at forhindre dine gæster i at misbruge din hovedforbindelse – læs mere om det i boksen “Trafikregulering”.

Du kan også lade Pi køre fuldstændig headless, fordi den beholder den samme ip-adresse. Før du slukker, bør du dog sikre dig, at SSH er slået til, ved at køre sudo raspi-config og gå til “Interfacing Options > SSH.” Når det kører, rebooter du din Pi, frakobler tastatur, mus og skærm og bruger så PuTTY (www.putty.org) til at forbinde den til en Windows-maskine og styre den derfra. Du får ingen smuk grænseflade, men det er nok til at leve med.

Brobyggeri

Denne artikel handler om, hvordan man laver sit eget selvejende netværk. Et, der har sit eget subnet, sit eget ucvalg af ip-adresser og sin egen DHCP-håndtering. De enheder, du slutter til det, får adgang til internettet, og du får fuldstændig kontrol, men dets isolerede struktur er muligvis ikke ideel.

Hvis du i stedet laver en netværksbro, overlader du meget af det hårde arbejde til din router, og dit access-point bliver i langt højere grad en udvidelse af dit eksisterende netværk end et selvstændigt mininetværk. Vi skal stadig bruge hostapd til at tage sig af den trådløse autentifikation og vi skal bruge Debians bridge-utils-pakke, der bliver installeret via sudo apt-get install hostapd bridge-utils .

Stop hostapd ( sudo systemctl stop hostapd ), og åbn dhcpcd-konfigurationsfilen til redigering med sudo nano /etc/dhcpcd.conf . Eftersom vores bro bliver det logiske netværksdrev snarere end enten Pis Ethernet- eller Wi-Fi-moduler, skal vi nu forhindre dem i at modtage deres egne ip-adresser ved at føje denyinterfaces wlan0 og denyinterfaces eth0 til slutningen af filen på separate linjer. Gem filen, og gå ud og tilbage til din shell.

Nu skal vi tilføje vores bro. Det er igen virtuel nerværkshardware, og Pi fungerer som et mellemled til vores nerværksporte. Skriv sudo brctl addbr br0 , og forbind den så til vores Ethernet-port med sudo brctl addif br0 eth0 . Når de to er forbundet, skal vi definere bro-interfacet lidt mere klart ved at køre sudo nano /etc/network/interfaces . Blad ned til bunden af filen (med lidt held er den ikke for lang), og tilføj de følgende definitioner linje for linje.

Først auto br0 til at fremkalde interfacet ved boottid og derefter iface br0 inet manual til at fortælle broen, at vi ønsker, at routerens DHCP-tjeneste skal tildele den en ip-adresse. Endelig fortæller bridge_ports eth0 wlan0 broen nøjagtig, hvad du ønsker, at den skal gøre. Det vil sige sidde mellem Ethernet- og Wi-Fi-enhederne og slå bro over alle netværksportene mellem dem.

Når interfacefilen er gemt, består det sidste trin i at åbne /etc/hostapd/hostapd.conf og skrive din konfigurationsfil. Følg trinnene i “Opsætning af hostapd” i hovedteksten, men i stedet for at inddrage linjen driver=nl80211 indsætter du bridge=br0 , der beder dit access-point om at forbinde dig til din bro-adapter. Gem, reboot, og brug ifconfig til at afprøve, om din bro nu er aktiv. Den bør være den eneste enhed, der har fået tildelt en ip-adresse.