Bygg Din Egen Router med En Raspberry Pi

når du prøver å finne ut hvorfor internett er treg, kan det være vanskelig å lære nøyaktig hvilken enhet på nettverket spiser opp all båndbredde. Mange løsninger på dette problemet krever at programvare installeres på hver enhet som skal overvåkes. I stedet prøvde jeg å bygge en tilpasset Raspberry Pi network monitor.

Bygg Din Egen Router

En Raspberry Pi 4 er en ganske dyktig router i de rette forholdene.

Men først, la oss være klare på vilkår.

en bryter blander data rundt nettverket. En ruter hjelper direkte at trafikken.Å Bygge en «router» betyr i denne sammenheng AT VI skal implementere DHCP, DNS og En Brannmur.

hvis du ikke vet hva noe av det betyr, ikke bekymre deg. For nå, la oss bare anta at du har En Raspberry Pi 4 (se deleliste nederst). «Versjon 4» – biten er viktig fordi den har et betydelig bedre nettverkskort (eth0) enn tidligere modeller (Gigabit). Dette peker på den største begrensningen ved Å bruke RPi som en ruter: båndbredden er avkortet til 1000 Mbps.

Båndbredde og gjennomstrømning er ofte forvirret.

båndet «bredde» er den maksimale mengden data som kan strømme gjennom systemet (i dette tilfellet fra hjemmet til internett). Gjennomstrømning måler hvor mye båndbredde som brukes til enhver tid.

Denne veiledningen skal Forresten fungere for Ethvert Debian-basert linux-system som du vil slå på en ruter. Du kan bruke bedre maskinvare for å skape en enda mer effektiv løsning. Jeg valgte En Pi4 fordi vår internetthastighet er bare 30Mbps uansett (DSL). Som jeg beskrev i nettverksovervåkingsposten, Er Denne Raspberry Pi 4 vist seg å være langt mer enn nok for denne saken. Følgende er de eksakte produktene jeg brukte.

Hvis Du er ny På Raspberry Pi, er De populære CanaKits et flott sted å starte. Jeg foretrekker Å kjøpe Raspberry Pi 4, strømadapter, micro SD-kort og heatsinks separat. Ikke bare er dette billigere, men det reduserer e-avfall.

følgende er tilknyttede lenker til andre deler jeg brukte i dette prosjektet. Jeg kobler aldri til et produkt som jeg ikke personlig har brukt.

Har DU en dsl / PPP-tilkobling?

Les om de spesifikke kjennskapene til å bruke En Raspberry Pi som EN dsl-ruter.

en annen ethernet-port er nødvendig(se neste avsnitt). JEG brukte USB 3.0 Gigabit-kontakten, ovenfor.

Koble Til Internett

jeg vil referere til nettverksgrensesnittene som wanog lan.

hvis du vil at ting skal kopieres og limes inn, kan du gi nytt navn til nettverksgrensesnittene for å matche. For eksempel er lan navnet på den raskeste av de to grensesnittene (innebygd nettverksgrensesnitt,eth0, i mitt tilfelle). For å opprette det statiske navnet, skriv først ifconfigfå MAC-adressen til grensesnittet (etterether). Hvis du fant ether aa:bb:cc:dd:ee:ff, opprett eller rediger/etc/udev/rules.d/10-network.rules for å inkludere:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="lan"

… og gjenta prosessen forwan – grensesnittet.

det interne nettverket (LAN) må håndtere mer gjennomstrømning enn WAN.

dette er grunnen til at det raskere grensesnittet er valgt FOR LAN.

På dette punktet, kan du direkte koblewan grensesnittet til modemet levert av DIN ISP. Du vil kanskje sette modemet i gjennomsiktig bromodus, hvis det er mulig, siden Pi tar over rutingsfunksjonaliteten(mer om dette).

mens du er her, ta deg tid til å sørge FOR AT WAN er konfigurert riktig for Å få EN DHCP-leieavtale. PPOE), må du endre dette trinnet i henhold til dine behov. Men i de fleste tilfeller er det tilstrekkelig å lage en fil på /etc/network/interfaces.d/wan med følgende innhold:

auto wanallow-hotplug waniface wan inet dhcp

DHCP-Server

Med Pi online er det på tide å la enheter koble Til Pi.

I dette eksemplet Vil Raspberry Pi-ruteren ha EN IP-adresse på 192.168.0.1.

Vær forsiktig hvis DU endrer DENNE IP!

dette eksemplet bruker delnettet 192.168.0.0 / 24. Hvis du bestemmer deg for å endre dette, må du sørge for at du velger fra utvalget av gyldige private delnett.

dette betyr først å opprette eller redigere /etc/network/interfaces.d/lan:

allow-hotplug laniface lan inet static address 192.168.0.1 netmask 255.255.255.0 gateway 192.168.0.1

NÅ VIL LAN-grensesnittet ha en statisk IP og behandle seg som ruteren. Nå er det på tide å gjøre DET i STAND TIL å tildele IP-adresser til andre enheter på nettverket. Kjører EN DHCP-server vil derfor gjøre det så mange datamaskiner kan koble Til Pi.

først deaktiver dhcpcd og installer isc-dhcp-server:

sudo systemctl disable dhcpcdsudo apt install isc-dhcp-server

INTERFACESv4="lan"

, erstatteINTERFACESv4:

INTERFACESv4="lan"

vi har fortalt dhcp-serveren hvilket grensesnitt som inneholder lan. Nå må det kjenne parametrene for hjemmenettverket. For å fortsette med eksemplet, vil vi la serveren tildele IP-adresser i området fra 192.168.0.100 til 192.168.0.199 (mer om hvorfor i et øyeblikk). Rediger /etc/dhcp/dhcpd.conf for å endre domenenavn og domenenavnservere først:

option domain-name "router.local";option domain-name-servers 8.8.8.8, 1.1.1.1;

.localsuffikset er konvensjonelt FOR ET LAN, men du er velkommen til å erstatterouternavnet. Domenenavnserverne vil bli endret snart, men peker på google for nå.

Legg også til legg til følgende:

authoritative;subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.100 192.168.0.199; option routers 192.168.0.1; option subnet-mask 255.255.255.0;}

dette forteller DHCP-serveren at DEN kan tilordne IP-adresser til enhetene som kobler til den innenfor det angitte området. Årsaken til det relativt små området er at vi kan tildele statiske IP-adresser utenfor dette området. For eksempel kan du ta SAMME MAC-adresse for lan ovenfor og legge til følgende avsnitt:

host router { hardware ethernet aa:bb:cc:dd:ee:ff; fixed-address 192.168.0.1;}

Hvis DU Legger til den statiske IP-adressen til ruteren, betyr DET OGSÅ AT DHCP-serveren aldri kan bli forvirret og ved et uhell tilordne en annen IP-adresse. Generelt sentraliserer koding AV IP-adressene I DHCP-serveren også autoriteten (i stedet for å kode statiske Ip-Adresser på bestemte enheter, som er langt mer sprø IME).

hvis Du starter Raspberry Pi nå og kobler en datamaskin til lan-porten, bør DU finne EN IP-adresse i riktig område. Ved Hjelp Av Mac OSX åpnet Jeg Nettverksinnstillinger-ruten, og Deretter Maskinvare-fanen for å finne MAC-adressen til min bærbare USB-C Til Ethernet-adapter. Da tildelte jeg en statisk IP (akkurat som ovenfor) til den adressen og startet DHCP-serveren PÅ NYTT:

sudo systemctl restart isc-dhcp-server
koble til raspberry pi-ruteren
MAC-adressen kom fra Maskinvare-fanen. Ved å trykke på» Forny DHCP Lease » – knappen, spør DHCP-serveren om en ny IP-adresse, som effektivt oppdaterer tilkoblingen.

selv om fastadressen er utenfor området ovenfor, vil denne typen statisk IP-tildeling fungere med hvilken som helst enhet. Jeg liker å gi statiske Ip-Er til alle mine kjente, pålitelige enheter som er utenfor det offentlige området. Dette gjør følgende:

  • hjelper med å identifisere kjente enheter.
  • Tillater bruk av sikkerhetsregler for kjente Ip-Adresser.
  • Aktiverer servere (dvs. lese temperatur via en billig Arduino sensor).

hvis en datamaskin av en eller annen grunn ikke kan koble til hjemmenettverket, gjør det enklere å feilsøke å kjøre DIN EGEN DHCP-server. Kjører journalctl -xe | grep dhcpd viser alle forsøk av enheter for å koble til hjemmenettverket:

May 03 15:50:44 router dhcpd: DHCPREQUEST for 192.168.0.106 from xx:xx:xx:xx:xx via eth0May 03 15:50:44 router dhcpd: DHCPACK on 192.168.0.106 to xx:xx:xx:xx:xx via eth0

og ta en titt på/var/lib/dhcp/dhcpd.leases avslører hvilke enheter som har koblet til i det siste.

Koble Til WiFi-Enheter

for dette trenger Du En WiFi-router eller tilgangspunkt.

den typiske tilnærmingen er å bruke On-board WiFi. Dette samsvarer for det meste med trinnene ovenfor, bortsett fra å bruke wlan0 – enheten På Raspberry Pi for lan – grensesnittet og sette opp hostapd. Det anbefales imidlertid ikke i sammenheng med dette innlegget. Å la Raspberry Pi fungere som en pass-through mellom to ethernet-grensesnitt er en enklere og raskere tilnærming.I Stedet kobler Du Bare En WiFi-ruter til lan – porten På Raspberry Pi og setter deretter ruteren I Tilgangspunkt (aka bridge) – modus. Nå bryr ruteren seg ikke om klienter kobler til via ethernet eller WiFi.

Jeg er en stor fan Av Orbi-ruterne-ikke bare er de ekstremt raske — men du kan koble basestasjonens» internett » – port til Raspberry Pi og ha et dusin kablede tilkoblinger til din disposisjon rundt huset:

Videresending Trafikk

På dette punktet…

  • Raspberry Pi kan snakke med internett (WAN).
  • enhetene på LAN kan snakke med hverandre.

… men det er ingen kommunikasjon mellom de to.

Enter firewalld:

sudo apt install firewalld

Firewalld Er den enkleste løsningen jeg har funnet så langt.

IP-tabeller og brannmurer kan være en smerte.

i det minste trenger du et hjem og offentlig sone, og deretter å maskere trafikken mellom de to. Dette forteller bare brannmuren at lan-grensesnittet er for hjemmet, og wan / ppp0-grensesnittene er for publikum.

sudo firewall-cmd --zone=home --add-interface=lansudo firewall-cmd --zone=public --add-interface=ppp0sudo firewall-cmd --zone=public --add-interface=wansudo firewall-cmd --zone=public --add-masqueradesudo firewall-cmd --zone=home --add-service=dnssudo firewall-cmd --zone=home --add-service=dhcp

på dette tidspunktet skal datamaskiner som er koblet TIL LAN, kunne få tilgang til internett. Du kan bare kjøresudo firewall-cmd --runtime-to-permanent nå for å lagre alt, men det kan være noen flere nyttige trinn (nedenfor). Hvis internett (eller annen) trafikk ikke fungerer fra nettverket, kjør journalctl -xe og se etter linjer som dette:

FINAL_REJECT: IN=ppp0 OUT= MAC= SRC=77.247.109.40 DST=...

i dette tilfellet fungerer regelen som forventet. Noen fra en ukjent IP-adresse forsøkte å kontakte hjemmenettverket mitt viappp0 – grensesnittet (dvs., fra internett). I andre tilfeller må du kanskje åpne brannmuren for å tillate viss trafikk.

Firewalld er enklest når du bruker sonebaserte regler. Du trenger minst to soner, som jeg har kalt hjem og offentlig i stedet for lan og wan (for å matche firewallds konvensjoner). Jeg har også en tredje (valgfri) klarert sone i konfigurasjonen min for kubernetes/docker-delnett. Så når jeg skriver firewall-cmd --get-active-zones, ser jeg:

home interfaces: lan lopublic interfaces: wan ppp0trusted interfaces: docker0 cni0 sources: 10.244.0.0/24 10.202.0.0/24 10.96.0.0/24

definisjonene for soner finnes i xml-filer som ligger på /etc/firewalld/zones/:

<?xml version="1.0" encoding="utf-8"?><zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name="wan"/> <interface name="ppp0"/> <service name="ssh"/> <service name="http"/> <service name="https"/> <masquerade/></zone>
<?xml version="1.0" encoding="utf-8"?><zone target="ACCEPT"> <short>Home</short> <description>For use in home areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <interface name="lan"/> <interface name="lo"/> <service name="ssh"/> <service name="mdns"/> <service name="samba-client"/> <service name="dhcpv6-client"/> <service name="dhcp"/> <service name="dns"/> <service name="http"/> <service name="https"/> <port port="5000" protocol="tcp"/> <port port="3000" protocol="tcp"/> <port port="9999" protocol="tcp"/> <port port="10250" protocol="tcp"/> <port port="10250" protocol="udp"/></zone>
<?xml version="1.0" encoding="utf-8"?><zone target="ACCEPT"> <short>Trusted</short> <description>All network connections are accepted.</description> <interface name="docker0"/> <interface name="cni0"/> <source address="10.244.0.0/24"/> <source address="10.202.0.0/24"/> <source address="10.96.0.0/24"/> <service name="dns"/> <service name="dhcp"/> <service name="dhcpv6-client"/> <service name="https"/> <service name="http"/></zone>

Trafikk er kategorisert i soner basert på grensesnittet eller kilden, for eksempel:

  • sudo firewall-cmd --zone=public --add-interface=ppp0
  • sudo firewall-cmd --zone=trusted --add-source=10.202.0.0/24

og en sone kan motta trafikk til en tjeneste eller en port:

  • sudo firewall-cmd --zone=public --add-service=http
  • sudo firewall-cmd --zone=home --add-port=10250/tcp

endringer er midlertidige. Dette muliggjør sikker testing. For å gjøre dem permanente, kjør sudo firewall-cmd --runtime-to-permanent. Hvis det ikke er En Hvis du trenger mer hjelp med firewalld, sjekk ut denne artikkelen.

DNS Server & Omskriver

EN DNS-server kan gjøre denne lille ruteren enda bedre.

jobben TIL DNS-serveren er å svare MED EN IP-adresse for et gitt domenenavn. For eksempel vet den HVILKEN IP-adresse datamaskinen skal koble til for å nå google.com. Mange mennesker liker å kjøre sine egne for sikkerhet og personvern grunner.

det er ad-blokkere der ute, for eksempel som fungerer SOM DNS-servere. Ved å installere Pi Hole Eller AdGuard Home, kan du forhindre at datamaskiner på nettverket kan finne reklame/spam / malware domener. Begge disse to verktøyene støtter OGSÅ DNS-omskrivninger, slik at du kan endre «plassering» på et hvilket som helst nettsted.

option domain-name-servers 192.168.0.1;

nå vil alle enheter som kobler til nettverket bli fortalt å bruke denne dns-serveren.

Hvorfor er omskrivninger så nyttige? Sjekk ut følgende innlegg på å bygge en hjemmeserver. Omskrivninger lar SAMME URL brukes internt og eksternt, slik AT HTTPS hvor som helst. Hvis Du for eksempel bruker AdGuard Home til å skrive *.snowy-cabin.com til 192.168.0.100, vil all trafikk som kommer fra hjemmenettverket til house.snowy-cabin.com aldri forlate hjemmenettverket. Dette betyr at den sammehttps:// URL kan brukes til å nå omvendt proxy, hvor SSL-terminering skjer, og sikrer sikker kommunikasjon for både offentlig og privat trafikk.

post id ikke funnet: # 8977

Cheat-sheet

for å oppsummere, her er noen viktige begreper for hjemmeservere:

  • Static IPs: edit /etc/dhcp/dhcpd.conf for å legge til en ny vert, start deretter isc-dhcp-server og forny leieavtalen på klienten.
  • port forwarding: kjør sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=192.168.0.100
  • Egendefinerte domenenavn: Bruk DNS-serveren til å få ditt unike domenenavn til å fungere internt og eksternt.
  • Overvåking nettverkstrafikk: instruksjoner.

Fra sikkerhet til hastighet er det mange grunner til å forstå tilkoblingen til hjemmenettverket. Lær nettverk grunnleggende, samt bygge din egen ruter for å få fart på internett hjemme.

Tagged Asdiy Prosjekter, Raspberry Pi Prosjekter

Skrevet av

(zane) / Teknisk Trolldom

dette nettstedet begynte som et sted å dokumentere DIY prosjekter. Det har vokst til en samling AV IOT-prosjekter, tekniske opplæringsprogrammer og veiledninger. Les mer om dette nettstedet…

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.