bygga din egen Router med en Raspberry Pi

När du försöker lista ut varför internet är långsamt kan det vara svårt att lära sig exakt vilken enhet i nätverket som äter upp all bandbredd. Många lösningar på detta problem kräver att programvara installeras på varje enhet som ska övervakas. Istället försökte jag bygga en anpassad Raspberry Pi network monitor.

bygga din egen Router

en Raspberry Pi 4 är en ganska kapabel router under rätt omständigheter.

men först, låt oss vara tydliga på villkor.

en omkopplare blandar data runt nätverket. En router hjälper till att styra den trafiken.

att bygga en” router ” i detta sammanhang innebär att vi kommer att implementera DHCP, DNS och en brandvägg.

om du inte vet vad något av det betyder, oroa dig inte. För nu, låt oss bara anta att du har en Raspberry Pi 4 (se dellista längst ner). ”Version 4” – biten är viktig eftersom den har ett betydligt bättre nätverkskort (eth0) än tidigare modeller (Gigabit). Detta pekar på den största begränsningen av att använda RPi som en router: bandbredden är begränsad till 1000 Mbps.

bandbredd och genomströmning är ofta förvirrade.

bandet ”bredd” är den maximala mängden data som kan strömma genom systemet (i det här fallet från hemmet till internet). Genomströmning mäter hur mycket bandbredd som används när som helst.

För övrigt bör den här guiden fungera för alla Debian-baserade linux-system som du vill aktivera i en router. Du kan använda bättre hårdvara för att skapa en ännu effektivare lösning. Jag valde en Pi4 eftersom vår internethastighet bara är 30Mbps ändå (DSL). Som jag beskrev i nätverksövervakningsposten har denna Raspberry Pi 4 visat sig vara mycket mer än tillräckligt för detta fall. Följande är de exakta produkterna jag använde.

Om du är ny på Raspberry Pi är de populära Canakiterna ett bra ställe att börja. Jag föredrar att köpa Raspberry Pi 4, nätadapter, micro SD-kort och kylflänsar separat. Detta är inte bara billigare, men det minskar e-avfall.

Följande är affiliate länkar till andra delar som jag använde i detta projekt. Jag länkar aldrig till en produkt som jag inte personligen har använt.

har du en DSL/PPP-anslutning?

Läs om de specifika egenskaperna att använda en Raspberry Pi som en DSL-router.

en andra ethernet-port krävs (se nästa avsnitt). Jag använde USB 3.0 Gigabit-kontakten ovan.

anslutning till Internet

Jag kommer att hänvisa till nätverksgränssnitten som wan och lan.

Om du vill att saker ska kopiera och klistra in kan du byta namn på dina nätverksgränssnitt för att matcha. Till exempel är lan namnet på det snabbaste av de två gränssnitten (det inbyggda nätverksgränssnittet, eth0, I mitt fall). För att skapa det statiska namnet, skriv först ifconfig hämta MAC-adressen för gränssnittet (efter ether). Om du hittade ether aa:bb:cc:dd:ee:ff, skapa eller redigera /etc/udev/rules.d/10-network.rules för att inkludera:

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

… och upprepa sedan processen för gränssnittet wan.

det interna nätverket (LAN) behöver hantera mer genomströmning än WAN.

det är därför det snabbare gränssnittet väljs för LAN.

vid denna tidpunkt kan du direkt ansluta gränssnittetwan till modemet som tillhandahålls av din Internetleverantör. Du kanske vill sätta modemet i transparent bryggläge, om möjligt, eftersom Pi tar över routningsfunktionen (mer om detta).

medan du är här, ta en stund för att se till att WAN är korrekt konfigurerad för att få ett DHCP-leasingavtal. Om du använder någon annan metod än standard DHCP (t.ex. PPOE) måste du ändra detta steg efter dina behov. Men i de flesta fall är det tillräckligt att skapa en fil på /etc/network/interfaces.d/wan med följande innehåll:

auto wanallow-hotplug waniface wan inet dhcp

DHCP-Server

med Pi online är det dags att låta enheter ansluta till Pi.

i det här exemplet kommer Raspberry Pi-routern att ha en IP-adress på 192.168.0.1.

var försiktig om du ändrar denna IP!

i det här exemplet används delnätet 192.168.0.0 / 24. Om du bestämmer dig för att ändra detta, se till att du väljer från utbudet av giltiga privata undernät.

detta innebär att först skapa eller redigera /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

nu kommer LAN-gränssnittet att ha en statisk IP och behandla sig själv som routern. Nu är det dags att göra det möjligt att tilldela IP-adresser till andra enheter i nätverket. Att köra en DHCP-server gör det därför så att många datorer kan ansluta till Pi.

inaktivera först dhcpcd och installera isc-dhcp-server:

sudo systemctl disable dhcpcdsudo apt install isc-dhcp-server

redigera sedan /etc/default/isc-dhcp-server, ersätta INTERFACESv4:

INTERFACESv4="lan"

Vi har berättat för DHCP-servern vilket gränssnitt som innehåller Lan. Nu behöver den veta parametrarna för hemnätverket. För att fortsätta med exemplet låter vi servern tilldela IP-adresser i intervallet från 192.168.0.100 till 192.168.0.199 (mer om varför i ett ögonblick). Redigera /etc/dhcp/dhcpd.conf för att först ändra domännamn och domännamnsservrar:

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

.local suffix är konvention för ett LAN, men du är välkommen att ersätta router namn. Domännamnsservrarna kommer snart att ändras, men pekar på google för nu.

lägg också till Lägg till följande:

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;}

detta talar om för DHCP-servern att den kan tilldela IP-adresser till de enheter som ansluter till den inom det angivna intervallet. Anledningen till det relativt lilla intervallet är att vi kan tilldela statiska IP-adresser utanför det intervallet. Du kan till exempel ta samma MAC-adress för lan ovan och lägga till följande avsnitt:

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

att lägga till den statiska IP-adressen för routern betyder också att DHCP-servern aldrig kan bli förvirrad och oavsiktligt tilldela en annan IP-adress. I allmänhet centraliserar kodningen av IP-adresserna i DHCP-servern också myndigheten (snarare än att koda statiska IP-adresser på specifika enheter, vilket är mycket sprödare IME).

om du startar om Raspberry Pi nu och ansluter en dator till lan-porten, bör du hitta en IP-adress i lämpligt intervall. Med Mac OSX öppnade jag fönstret nätverksinställningar och sedan fliken Hårdvara för att hitta MAC-adressen till min bärbara USB-C till Ethernet-adapter. Sedan tilldelade jag en statisk IP (precis som ovan) till den adressen och startade om DHCP-servern:

sudo systemctl restart isc-dhcp-server
Anslut till raspberry pi router
MAC-adressen kom från fliken Hårdvara. Genom att trycka på knappen ”förnya DHCP-leasing” kommer DHCP-servern att be om en ny IP-adress, vilket effektivt uppdaterar anslutningen.

Även om den fasta adressen ligger utanför intervallet ovan, fungerar den här typen av statisk IP-tilldelning med vilken enhet som helst. Jag gillar att ge statiska IP-adresser till alla mina kända, betrodda enheter som ligger utanför det offentliga området. Detta gör följande:

  • hjälper till att identifiera kända enheter.
  • gör det möjligt att tillämpa säkerhetsregler för kända IP-adresser.
  • möjliggör servrar (dvs avläsningstemperatur via en billig Arduino-sensor).

om en dator av någon anledning aldrig kan ansluta till hemnätverket, kör din egen DHCP-server gör det lättare att felsöka. Running journalctl -xe | grep dhcpd visar alla försök från enheter att ansluta till hemnätverket:

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

och ta en titt på/var/lib/dhcp/dhcpd.leases avslöjar vilka enheter som har anslutit nyligen.

ansluta WiFi-enheter

För detta behöver du en WiFi-router eller åtkomstpunkt.

det typiska tillvägagångssättet är att använda WiFi ombord. Detta matchar mestadels ovanstående steg, förutom att användawlan0 – enheten på Raspberry Pi förlan – gränssnittet och ställa inhostapd. Det rekommenderas dock inte i samband med detta inlägg. Att låta Raspberry Pi fungera som en genomgång mellan två ethernet-gränssnitt är ett enklare och snabbare tillvägagångssätt.

Anslut istället en WiFi-router tilllan – porten på Raspberry Pi och sätt sedan routern i åtkomstpunkt (aka bridge) – läge. Nu bryr sig routern inte om klienter ansluter via ethernet eller WiFi.

Jag är ett stort fan av Orbi-routrarna-inte bara är de extremt snabba, men du kan ansluta basstationens ”internet” – port till Raspberry Pi och ha ett dussin trådbundna anslutningar till ditt förfogande runt huset:

vidarebefordra trafik

Vid denna tidpunkt…

  • Raspberry Pi kan prata med internet (WAN).
  • enheterna på LAN kan prata med varandra.

… men det finns ingen kommunikation mellan de två.

Ange firewalld:

sudo apt install firewalld

Firewalld är den enklaste lösningen jag hittat hittills.

IP-tabeller och brandväggar kan vara en smärta.

åtminstone behöver du en hem-och offentlig zon och sedan maskera trafiken mellan de två. Detta berättar bara brandväggen att lan-gränssnittet är för hemmet, och WAN/ppp0-gränssnitten är för allmänheten.

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

vid denna tidpunkt bör datorer som är anslutna till LAN kunna komma åt internet. Du kan bara köra sudo firewall-cmd --runtime-to-permanent nu för att spara allt, men det kan finnas några mer användbara steg (nedan). Om internet (eller annan) trafik inte fungerar från nätverket, kör journalctl -xe och leta efter rader så här:

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

i det här fallet fungerar regeln som förväntat. Någon från en okänd IP-adress försökte kontakta mitt hemnätverk via gränssnittet ppp0 (dvs. från internet). I andra fall kan du behöva öppna brandväggen för att tillåta viss trafik.

Firewalld är lättast när du använder zonbaserade regler. Du behöver minst två zoner, som jag har kallat hem och offentligt istället för lan och wan (för att matcha firewallds konventioner). Jag har också en tredje (valfri) betrodd zon i min konfiguration för kubernetes/docker-undernätet. Så när jag skriver firewall-cmd --get-active-zones ser jag:

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

definitionerna för zoner finns i xml-filer som finns 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>

trafiken kategoriseras i zoner baserat på gränssnittet eller källan, till exempel:

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

och en zon kan ta emot trafik till en tjänst eller en port:

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

förändringar är tillfälliga. Detta möjliggör säker testning. För att göra dem permanenta, kör sudo firewall-cmd --runtime-to-permanent. Om det inte finns en Om du behöver mer hjälp med firewalld, kolla in den här artikeln.

DNS-Server & skriver om

en DNS-server kan göra den här lilla routern ännu bättre.

DNS-serverns jobb är att svara med en IP-adress för ett visst domännamn. Den vet till exempel vilken IP-adress din dator ska ansluta till för att nå google.com. många gillar att köra sina egna Av säkerhets-och integritetsskäl.

det finns ad-blockerare där ute, till exempel, som fungerar som DNS-servrar. Genom att installera Pi Hole eller AdGuard Home kan du förhindra att datorer i nätverket kan hitta reklam/spam/malware-domäner. Båda dessa två verktyg stöder också DNS-omskrivningar, så att du kan ändra ”plats” på vilken webbplats som helst.

När du har installerat en av de två, Redigera bara /etc/dhcp/dhcpd.confoption domain-name-servers 192.168.0.1;

nu kommer alla enheter som ansluter till nätverket att få veta att använda denna DNS-server.

Varför är omskrivningar så användbara? Kolla in följande inlägg om att bygga en hemserver. Omskrivningar låter samma URL användas internt och externt, vilket möjliggör HTTPS var som helst. Om du till exempel använder AdGuard Home för att skriva om *.snowy-cabin.com till 192.168.0.100, kommer all trafik som kommer från hemnätverket till house.snowy-cabin.com aldrig att lämna hemnätverket. Detta innebär att samma https:// URL kan användas för att nå omvänd proxy, där SSL-uppsägning sker, vilket säkerställer säker kommunikation för både offentlig och privat trafik.

post-id hittades inte: # 8977

Cheat-sheet

för att sammanfatta, här är några nyckelbegrepp för hemservrar:

  • statiska IPs: redigera/etc/dhcp/dhcpd.conf för att lägga till en ny värd, starta sedan omisc-dhcp-server och förnya hyresavtalet på klienten.
  • port forwarding: kör sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=192.168.0.100
  • anpassade domännamn: använd DNS-servern för att få ditt unika domännamn att fungera internt och externt.
  • övervakning av nätverkstrafik: instruktioner.

Från säkerhet till hastighet finns det många anledningar att förstå din hemnätverksanslutning. Lär dig grunderna i nätverk, samt bygg din egen router för att påskynda internet hemma.

taggade asDIY projekt, Raspberry Pi projekt
skriven av

(zane) / Tekniskt trolldom

denna webbplats började som en plats att dokumentera DIY projekt. Det har vuxit till en samling IOT-projekt, tekniska handledning och guider. Läs mer om denna webbplats…

Lämna ett svar

Din e-postadress kommer inte publiceras.