bouwen van uw eigen Router met een Raspberry Pi

wanneer het proberen om erachter te komen waarom het internet is traag, kan het moeilijk zijn om precies te leren welk apparaat op het netwerk is het eten van alle bandbreedte. Veel oplossingen voor dit probleem vereisen software te installeren op elk apparaat te worden gecontroleerd. In plaats daarvan heb ik geprobeerd om een aangepaste Raspberry Pi netwerkmonitor te bouwen.

het bouwen van uw eigen Router

een Raspberry Pi 4 is een heel capabele router in de juiste omstandigheden.

maar laten we eerst duidelijk zijn over termen.

een switch schuift gegevens door het netwerk. Een router helpt dat verkeer te sturen.

het bouwen van een “router” betekent in deze context dat we DHCP, DNS en een Firewall zullen implementeren.

als je niet weet wat dat betekent, maak je geen zorgen. Voor nu, laten we gewoon aannemen dat je een Raspberry Pi 4 (Zie onderdelenlijst). De” version 4 ” bit is belangrijk omdat het een aanzienlijk betere netwerkkaart heeft (eth0) dan eerdere modellen (Gigabit). Dit wijst op de grootste beperking van het gebruik van de RPi als router: de bandbreedte is beperkt tot 1000 Mbps.

bandbreedte en doorvoer worden vaak verward.

de bandbreedte is de maximale hoeveelheid gegevens die door het systeem kan stromen (in dit geval van thuis naar internet). Doorvoersnelheid meet hoeveel bandbreedte er op elk moment wordt gebruikt.

Overigens zou deze gids moeten werken voor elk op Debian gebaseerd linux systeem dat u in een router wilt zetten. U kunt betere hardware gebruiken om een nog effectievere oplossing te creëren. Ik koos voor een Pi4 omdat onze internetsnelheid toch maar 30Mbps is (DSL). Zoals ik beschreven in het netwerk monitoring post, dit Raspberry Pi 4 is bewezen te zijn veel meer dan genoeg voor dit geval. De volgende zijn de exacte producten die ik gebruikte.

Als u nieuw bent bij Raspberry Pi, zijn de populaire CanaKits een geweldige plek om te beginnen. Ik geef de voorkeur aan de Raspberry Pi kopen 4, voedingsadapter, micro SD-kaarten, en heatsinks afzonderlijk. Niet alleen is dit goedkoper, maar het vermindert ook e-waste.

Dit zijn affiliate links naar andere delen die ik in dit project heb gebruikt. Ik heb nooit een link naar een product dat ik niet persoonlijk heb gebruikt.

heeft u een DSL / PPP-verbinding?

Lees meer over de specifieke eigenaardigheden van het gebruik van een Raspberry Pi als een DSL-router.

een tweede ethernetpoort is vereist (zie de volgende paragraaf). Ik heb de USB 3.0 Gigabit connector hierboven gebruikt.

verbinden met het Internet

Ik zal naar de netwerkinterfaces verwijzen als wan en lan.

als u wilt dat dingen copy-and-paste zijn, kunt u de naam van uw netwerkinterfaces wijzigen zodat deze overeenkomen. Bijvoorbeeld, lan is de naam voor de snelste van de twee interfaces (de onboard netwerkinterface, eth0, in mijn geval). Om de statische naam te maken, typt u eerst ifconfig haal het MAC-adres voor de interface (na ether). Als u ether aa:bb:cc:dd:ee:ff hebt gevonden, maak of bewerk dan /etc/udev/rules.d/10-network.rules om het volgende op te nemen:

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

… en herhaal het proces voor de wan interface.

het interne netwerk (LAN) moet meer doorvoer verwerken dan het WAN.

daarom is de snellere interface gekozen voor het LAN.

Op dit punt kunt u de wan interface direct verbinden met de modem die door uw ISP wordt geleverd. U kunt de modem in transparante bridge modus zetten, indien mogelijk, omdat de Pi de routing functionaliteit overneemt (meer hierover).

terwijl u hier bent, neem dan even de tijd om er zeker van te zijn dat het WAN correct is geconfigureerd om een DHCP-lease te verkrijgen. Als je een andere methode gebruikt dan standaard DHCP (bijvoorbeeld PPOE), moet je deze stap aanpassen aan je behoeften. Maar in de meeste gevallen is het voldoende om een bestand aan te maken op /etc/network/interfaces.d/wan met de volgende inhoud:

auto wanallow-hotplug waniface wan inet dhcp

DHCP Server

met de Pi online, is het tijd om apparaten verbinding te laten maken met de Pi.

in dit voorbeeld heeft de Raspberry Pi-router een IP-adres van 192.168.0.1.

wees voorzichtig als u dit IP-adres wijzigt!

dit voorbeeld gebruikt het 192.168.0.0 / 24 subnet. Als u besluit om dit te veranderen, zorg ervoor dat u kiest uit het bereik van geldige privé-subnetten.

Dit betekent eerst aanmaken of bewerken /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 zal de LAN-interface een statisch IP hebben en zichzelf behandelen als de router. Nu is het tijd om het in staat om IP-adressen toe te wijzen aan andere apparaten op het netwerk te maken. Het draaien van een DHCP server zal er daarom voor zorgen dat er zoveel computers verbinding kunnen maken met de Pi.

schakel eerst dhcpcd uit en installeer isc-dhcp-server:

sudo systemctl disable dhcpcdsudo apt install isc-dhcp-server

dan Bewerk /etc/default/isc-dhcp-server, vervang INTERFACESv4:

INTERFACESv4="lan"

we hebben verteld de DHCP-server welke interface bevat het LAN. Nu moet het de parameters voor het thuisnetwerk weten. Om verder te gaan met het voorbeeld, zullen we de server IP-adressen laten toewijzen in het bereik van 192.168.0.100 aan 192.168.0.199 (meer over waarom in een moment). Bewerk /etc/dhcp/dhcpd.conf om eerst de domeinnaam en domeinnaamservers te wijzigen:

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

de .local achtervoegsel is gebruikelijk voor een LAN, maar u bent welkom om de router naam te vervangen. De domeinnaamservers zullen binnenkort worden gewijzigd, maar zijn voorlopig gericht op google.

voeg ook het volgende toe:

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

Dit vertelt de DHCP-server dat het IP-adressen kan toewijzen aan de apparaten die er binnen het gegeven bereik mee verbinden. De reden voor het relatief kleine bereik is dat we statische IP-adressen buiten dat bereik kunnen toewijzen. U kunt bijvoorbeeld hetzelfde MAC-adres nemen voor de lan hierboven en de volgende sectie toevoegen:

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

Het toevoegen van het statische IP-adres voor de router betekent ook dat de DHCP-server nooit verward kan raken en per ongeluk een ander IP-adres kan toewijzen. In het algemeen centraliseert het coderen van de IP-adressen in de DHCP-server ook de autoriteit (in plaats van het coderen van statische IP ‘ s op specifieke apparaten, wat veel brozer IME is).

Als u de Raspberry Pi nu herstart en een computer aansluit op de lan-poort, moet u een IP-adres vinden in het juiste bereik. Met behulp van Mac OSX, opende ik het paneel Netwerkvoorkeuren, en vervolgens het tabblad Hardware om het MAC-adres van de USB-C naar Ethernet-adapter van mijn laptop te vinden. Vervolgens heb ik een statisch IP toegewezen (net als hierboven) aan dat adres en herstart de DHCP-server:

sudo systemctl restart isc-dhcp-server
verbinding maken met Raspberry pi router
het MAC-adres kwam van het tabblad Hardware. Als u op de knop “Renew DHCP Lease” drukt, zal de DHCP-server om een nieuw IP-adres vragen, waardoor de verbinding effectief wordt ververst.

hoewel het vaste adres buiten het bovenstaande bereik ligt, werkt dit soort statische IP-toewijzing met elk apparaat. Ik geef graag statische IP ‘ s aan al mijn bekende, vertrouwde apparaten die buiten het publieke bereik liggen. Dit doet het volgende:

  • helpt bekende apparaten te identificeren.
  • staat toe beveiligingsregels toe te passen voor bekende IP ‘ s.
  • maakt servers mogelijk (d.w.z. de afleestemperatuur via een goedkope arduino-sensor).

als een computer om een of andere reden nooit verbinding kan maken met het thuisnetwerk, maakt het uitvoeren van uw eigen DHCP-server het debuggen eenvoudiger. Het uitvoeren van journalctl -xe | grep dhcpd toont pogingen van apparaten om verbinding te maken met het thuisnetwerk:

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

en het nemen van een kijkje op /var/lib/dhcp/dhcpd.leases toont welke apparaten de laatste tijd verbonden zijn.

WiFi-apparaten verbinden

hiervoor hebt u een wifi-router of toegangspunt nodig.

de typische aanpak is het gebruik van wifi aan boord. Dit komt meestal overeen met de bovenstaande stappen, behalve het gebruik van dewlan0 apparaat op de Raspberry Pi voor delan interface en het opzetten vanhostapd. Echter, dat wordt niet aanbevolen in de context van dit bericht. Laten de Raspberry Pi dienen als een pass-through tussen twee ethernet-interfaces is een eenvoudiger en snellere aanpak.

in plaats daarvan, sluit u een wifi-router aan op de lan poort op de Raspberry Pi en zet de router in Access Point (a.k.A. bridge) modus. Nu, de router zal niet schelen als clients verbinding maken via ethernet of WiFi.

Ik ben een grote fan van de Orbi routers-niet alleen zijn ze extreem snel, maar u kunt het basisstation “internet” poort in de Raspberry Pi en hebben een dozijn bekabelde verbindingen tot uw beschikking rond het huis:

Forwarding verkeer

Op dit punt…

  • De Raspberry Pi kan praten met het internet (WAN).
  • de apparaten op het LAN kunnen met elkaar praten.

… maar er is geen communicatie tussen beide.

Enter firewalld:

sudo apt install firewalld

Firewalld is de makkelijkste oplossing die ik tot nu toe heb gevonden.

IP-tabellen en firewalls kunnen lastig zijn.

op zijn minst hebt u een home en public zone nodig, en dan moet u het verkeer tussen de twee maskeren. Dit vertelt de firewall dat de lan interface voor thuis is, en de WAN / ppp0 interfaces voor het publiek.

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

Op dit punt moeten computers die met LAN zijn verbonden toegang hebben tot het internet. Je kunt nu gewoon sudo firewall-cmd --runtime-to-permanent uitvoeren om het allemaal op te slaan, maar er kunnen nog een paar nuttige stappen zijn (hieronder). Als internet (of ander) verkeer op enig moment niet werkt vanuit het netwerk, voer dan journalctl -xe uit en zoek naar regels als deze:

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

In dit geval werkt de regel zoals verwacht. Iemand van een onbekend IP-adres probeerde contact op te nemen met mijn thuisnetwerk via deppp0 interface (d.w.z., van het internet). In andere gevallen moet u mogelijk de firewall openen om bepaald verkeer toe te staan.

Firewalld is het makkelijkst bij het gebruik van zone – gebaseerde regels. Je hebt minstens twee zones nodig, die ik thuis en openbaar heb genoemd in plaats van lan en wan (om de conventies van firewalld te evenaren). Ik heb ook een derde (optioneel) vertrouwde zone in mijn configuratie voor het kubernetes/docker subnet. Dus als ik firewall-cmd --get-active-zones typ, zie ik:

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

de definities voor zones zijn opgenomen in xml-bestanden op /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>

het Verkeer is onderverdeeld in zones, gebaseerd op de interface of de bron, zoals:

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

En een zone kan krijgen van verkeer naar een dienst of een port:

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

Merk op dat deze veranderingen zijn tijdelijk. Dit maakt het mogelijk om veilig te testen. Om ze permanent te maken, voer je sudo firewall-cmd --runtime-to-permanentuit. Als er niet een als je meer hulp nodig hebt met firewalld, check out dit artikel.

DNS Server & herschrijft

een DNS server kan deze kleine router nog beter maken.

de taak van de DNS-server is om te reageren met een IP-adres voor een bepaalde domeinnaam. Bijvoorbeeld, het Weet met welk IP-adres uw computer verbinding moet maken om te bereiken google.com. veel mensen willen hun eigen te runnen voor veiligheid en privacy redenen.

Er zijn ad-blockers die bijvoorbeeld als DNS-servers werken. Door het installeren van Pi Hole of AdGuard Home, kunt u voorkomen dat computers op het netwerk van de mogelijkheid om reclame/spam/malware domeinen te lokaliseren. Beide van deze twee tools ondersteunen ook DNS herschrijft, zodat u de “locatie” van een site kunt wijzigen.

zodra u een van de twee hebt geïnstalleerd, kunt u /etc/dhcp/dhcpd.confoption domain-name-servers 192.168.0.1;

nu zullen alle apparaten die verbinding maken met het netwerk worden verteld om deze DNS-server te gebruiken.

Waarom zijn herschrijvingen zo nuttig? Bekijk de volgende post op het bouwen van een home server. Herschrijven laat dezelfde URL intern en extern worden gebruikt, waardoor https overal. Door bijvoorbeeld AdGuard Home te gebruiken om *.snowy-cabin.com te herschrijven naar 192.168.0.100, zal elk verkeer dat binnen het thuisnetwerk ontstaat naar house.snowy-cabin.com het thuisnetwerk nooit verlaten. Dit betekent dat dezelfde https:// URL kan worden gebruikt om de reverse-proxy te bereiken, waar SSL-beëindiging plaatsvindt, wat zorgt voor veilige communicatie voor zowel openbaar als privéverkeer.

post-id niet gevonden: #8977

Cheat-sheet

om samen te vatten, zijn hier enkele sleutelconcepten voor thuisservers:

  • statische IP ‘ s: bewerk /etc/dhcp/dhcpd.conf om een nieuwe host toe te voegen, herstart isc-dhcp-server en verleng de lease op de client.
  • Port forwarding: voer sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=192.168.0.100
  • aangepaste domeinnamen uit: gebruik de DNS-server om uw unieke domeinnaam intern en extern te laten werken.
  • Monitoring netwerkverkeer: instructies.

van beveiliging naar snelheid zijn er vele redenen om de verbinding met uw thuisnetwerk te begrijpen. Leer de basisprincipes van netwerken en bouw uw eigen router om het internet thuis te versnellen.

Tagged asDIY-projecten, Raspberry Pi-projecten
geschreven door

(zane) / Technical Wizardry

deze site begon als een plek om DIY-projecten te documenteren. Het is uitgegroeid tot een verzameling van IOT projecten, technische tutorials, en how-to gidsen. Lees meer over deze site…

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.