Bauen Sie Ihren eigenen Router mit einem Raspberry Pi

Wenn Sie herausfinden möchten, warum das Internet langsam ist, kann es schwierig sein, genau zu erfahren, welches Gerät im Netzwerk die gesamte Bandbreite verbraucht. Viele Lösungen für dieses Problem erfordern die Installation von Software auf jedem zu überwachenden Gerät. Stattdessen habe ich versucht, einen benutzerdefinierten Raspberry Pi-Netzwerkmonitor zu erstellen.

Bauen Sie Ihren eigenen Router

Ein Raspberry Pi 4 ist unter den richtigen Umständen ein durchaus leistungsfähiger Router.

Aber lassen Sie uns zunächst die Bedingungen klarstellen.

Ein Switch mischt Daten im Netzwerk. Ein Router hilft, diesen Datenverkehr zu leiten.

Der Aufbau eines „Routers“ bedeutet in diesem Zusammenhang, dass wir DHCP, DNS und eine Firewall implementieren.

Wenn Sie nicht wissen, was das bedeutet, machen Sie sich keine Sorgen. Im Moment nehmen wir einfach an, dass Sie einen Raspberry Pi 4 haben (siehe Teileliste unten). Das Bit „Version 4“ ist wichtig, weil es eine deutlich bessere Netzwerkkarte (eth0) als frühere Modelle (Gigabit) hat. Dies weist auf die größte Einschränkung der Verwendung des RPi als Router hin: Die Bandbreite ist auf 1000 Mbit / s begrenzt.

Bandbreite und Durchsatz werden oft verwechselt.

Die Bandbreite „width“ ist die maximale Datenmenge, die durch das System fließen darf (in diesem Fall vom Heim ins Internet). Der Durchsatz misst, wie viel Bandbreite zu einem bestimmten Zeitpunkt verwendet wird.

Übrigens sollte dieses Handbuch für jedes Debian-basierte Linux-System funktionieren, das Sie an einen Router anschließen möchten. Sie könnten bessere Hardware verwenden, um eine noch effektivere Lösung zu erstellen. Ich habe mich für einen Pi4 entschieden, weil unsere Internetgeschwindigkeit sowieso nur 30 Mbit / s beträgt (DSL). Wie ich im Netzwerküberwachungsposten beschrieben habe, hat sich dieser Raspberry Pi 4 für diesen Fall als mehr als ausreichend erwiesen. Im Folgenden sind die genauen Produkte, die ich verwendet habe.

Wenn Sie Raspberry Pi noch nicht kennen, sind die beliebten CanaKits ein guter Anfang. Ich bevorzuge es, den Raspberry Pi 4, das Netzteil, die Micro-SD-Karten und die Kühlkörper separat zu kaufen. Dies ist nicht nur billiger, sondern reduziert auch den Elektroschrott.

Die folgenden sind Affiliate-Links zu anderen Teilen, die ich in diesem Projekt verwendet habe. Ich verlinke niemals auf ein Produkt, das ich nicht persönlich verwendet habe.

Haben Sie eine DSL/PPP-Verbindung?

Lesen Sie über die spezifischen Macken der Verwendung eines Raspberry Pi als DSL-Router.

Ein zweiter Ethernet-Port ist erforderlich (siehe nächster Abschnitt). Ich habe den USB 3.0 Gigabit-Anschluss oben verwendet.

Verbindung zum Internet herstellen

Ich werde die Netzwerkschnittstellen als wan und lan bezeichnen.

Wenn Sie möchten, dass die Dinge kopiert und eingefügt werden, können Sie Ihre Netzwerkschnittstellen entsprechend umbenennen. Zum Beispiel lan ist der Name für die schnellste der beiden Schnittstellen (die Onboard-Netzwerkschnittstelle, eth0, in meinem Fall). Um den statischen Namen zu erstellen, geben Sie zuerst ifconfig get die MAC-Adresse für die Schnittstelle ein (nach ether). Wenn Sie ether aa:bb:cc:dd:ee:ff gefunden haben, erstellen oder bearbeiten Sie /etc/udev/rules.d/10-network.rules, um Folgendes einzuschließen:

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

… und wiederholen Sie den Vorgang für die wan Schnittstelle.

Das interne Netzwerk (LAN) muss mehr Durchsatz verarbeiten als das WAN.

Deshalb wird die schnellere Schnittstelle für das LAN gewählt.

An dieser Stelle können Sie die wan Schnittstelle direkt mit dem von Ihrem ISP bereitgestellten Modem verbinden. Möglicherweise möchten Sie das Modem nach Möglichkeit in den transparenten Bridge-Modus versetzen, da der Pi die Routing-Funktionalität übernimmt (mehr dazu).

Während Sie hier sind, nehmen Sie sich einen Moment Zeit, um sicherzustellen, dass das WAN korrekt konfiguriert ist, um eine DHCP-Lease zu erhalten. Wenn Sie eine andere Methode als Standard-DHCP (z. B. PPOE) verwenden, müssen Sie diesen Schritt entsprechend Ihren Anforderungen ändern. In den meisten Fällen reicht es jedoch aus, eine Datei unter /etc/network/interfaces.d/wan mit folgendem Inhalt zu erstellen:

auto wanallow-hotplug waniface wan inet dhcp

DHCP-Server

Wenn der Pi online ist, ist es an der Zeit, Geräte mit dem Pi verbinden zu lassen.

In diesem Beispiel hat der Raspberry Pi Router die IP-Adresse 192.168.0.1.

Seien Sie vorsichtig, wenn Sie diese IP ändern!

In diesem Beispiel wird das Subnetz 192.168.0.0/24 verwendet. Wenn Sie dies ändern möchten, stellen Sie sicher, dass Sie aus dem Bereich gültiger privater Subnetze auswählen.

Dies bedeutet, zuerst zu erstellen oder zu bearbeiten /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

Jetzt hat die LAN-Schnittstelle eine statische IP und behandelt sich selbst als Router. Jetzt ist es an der Zeit, IP-Adressen anderen Geräten im Netzwerk zuzuweisen. Wenn Sie einen DHCP-Server ausführen, können daher so viele Computer eine Verbindung zum Pi herstellen.

Deaktivieren Sie zuerst dhcpcd und installieren Sie isc-dhcp-server:

sudo systemctl disable dhcpcdsudo apt install isc-dhcp-server

Bearbeiten Sie dann /etc/default/isc-dhcp-server und ersetzen Sie INTERFACESv4:

INTERFACESv4="lan"

der DHCP-Server welche Schnittstelle enthält das LAN. Jetzt muss es die Parameter für das Heimnetzwerk kennen. Um mit dem Beispiel fortzufahren, lassen wir den Server IP-Adressen im Bereich von 192.168.0.100 bis 192.168.0.199 zuweisen (mehr dazu gleich). Bearbeiten Sie /etc/dhcp/dhcpd.conf, um zuerst den Domainnamen und die Domainnamenserver zu ändern:

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

Das .local Suffix ist Konvention für ein LAN, aber Sie können den router Namen ersetzen. Die Domain-Name-Server werden in Kürze geändert, sind aber vorerst auf Google gerichtet.

Fügen Sie außerdem Folgendes hinzu:

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

Dies teilt dem DHCP-Server mit, dass er den Geräten, die sich innerhalb des angegebenen Bereichs mit ihm verbinden, IP-Adressen zuweisen darf. Der Grund für den relativ kleinen Bereich ist, dass wir statische IP-Adressen außerhalb dieses Bereichs zuweisen können. Zum Beispiel könnten Sie die gleiche MAC-Adresse für die lan oben nehmen und den folgenden Abschnitt hinzufügen:

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

Wenn Sie auch die statische IP für den Router hinzufügen, kann der DHCP-Server niemals verwirrt werden und versehentlich eine andere IP-Adresse zuweisen. Im Allgemeinen zentralisiert die Codierung der IP-Adressen im DHCP-Server auch die Autorität (anstatt statische IPs auf bestimmten Geräten zu codieren, was bei IME weitaus spröder ist).

Wenn Sie den Raspberry Pi jetzt neu starten und einen Computer an den LAN-Port anschließen, sollten Sie eine IP-Adresse im entsprechenden Bereich finden. Unter Mac OSX habe ich den Bereich Netzwerkeinstellungen und dann die Registerkarte Hardware geöffnet, um die MAC-Adresse des USB-C-zu-Ethernet-Adapters meines Laptops zu ermitteln. Dann habe ich dieser Adresse eine statische IP zugewiesen (genau wie oben) und den DHCP-Server neu gestartet:

sudo systemctl restart isc-dhcp-server
verbinden zu raspberry pi router
Die MAC adresse kam von der Hardware tab. Durch Drücken der Schaltfläche „DHCP-Lease erneuern“ wird der DHCP-Server nach einer neuen IP-Adresse gefragt, wodurch die Verbindung effektiv aktualisiert wird.

Obwohl die feste Adresse außerhalb des obigen Bereichs liegt, funktioniert diese Art der statischen IP-Zuweisung mit jedem Gerät. Ich gebe allen meinen bekannten, vertrauenswürdigen Geräten, die sich außerhalb des öffentlichen Bereichs befinden, gerne statische IPs. Dies bewirkt Folgendes:

  • Hilft bei der Identifizierung bekannter Geräte.
  • Ermöglicht die Anwendung von Sicherheitsregeln für bekannte IPs.
  • Ermöglicht das Lesen (d. H. Das Lesen der Temperatur über einen billigen Arduino-Sensor).

Wenn ein Computer aus irgendeinem Grund keine Verbindung zum Heimnetzwerk herstellen kann, erleichtert das Ausführen eines eigenen DHCP-Servers das Debuggen. Ausführen von journalctl -xe | grep dhcpd zeigt alle Versuche von Geräten an, sich mit dem Heimnetzwerk zu verbinden:

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

Und einen Blick auf /var/lib/dhcp/dhcpd.leases zeigt an, welche Geräte in letzter Zeit verbunden wurden.

Anschließen von WLAN-Geräten

Dazu benötigen Sie einen WLAN-Router oder Access Point.

Der typische Ansatz besteht darin, das integrierte WLAN zu verwenden. Dies entspricht größtenteils den obigen Schritten, außer dass das wlan0 -Gerät auf dem Raspberry Pi für die lan -Schnittstelle verwendet und hostapd eingerichtet wird. Dies wird jedoch im Zusammenhang mit diesem Beitrag nicht empfohlen. Den Raspberry Pi als Pass-Through zwischen zwei Ethernet-Schnittstellen dienen zu lassen, ist ein einfacherer und schnellerer Ansatz.

Schließen Sie stattdessen einfach einen WLAN-Router an den lan -Port des Raspberry Pi an und versetzen Sie den Router in den Access Point-Modus (auch Bridge genannt). Jetzt ist es dem Router egal, ob Clients eine Verbindung über Ethernet oder WLAN herstellen.

Ich bin ein großer Fan der Orbi—Router – sie sind nicht nur extrem schnell, sondern Sie können den „Internet“ -Port der Basisstation an den Raspberry Pi anschließen und haben ein Dutzend Kabelverbindungen rund um das Haus zur Verfügung:

Verkehr weiterleiten

An dieser Stelle …

  • Der Raspberry Pi kann mit dem Internet (WAN) sprechen.
  • Die Geräte im LAN können miteinander kommunizieren.

… aber es gibt keine Kommunikation zwischen den beiden.

Geben Sie firewalldein:

sudo apt install firewalld

Firewalld ist die einfachste Lösung, die ich bisher gefunden habe.

IP-Tabellen und Firewalls können ein Schmerz sein.

Zumindest benötigen Sie eine private und eine öffentliche Zone, um den Datenverkehr zwischen den beiden zu maskieren. Dies teilt der Firewall nur mit, dass die LAN-Schnittstelle für zu Hause und die wan / ppp0-Schnittstellen für die Öffentlichkeit bestimmt sind.

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

Zu diesem Zeitpunkt sollten Computer, die mit dem LAN verbunden sind, auf das Internet zugreifen können. Sie könnten jetzt einfach sudo firewall-cmd --runtime-to-permanent ausführen, um alles zu speichern, aber es kann noch ein paar nützliche Schritte geben (unten). Wenn zu irgendeinem Zeitpunkt der Internet- (oder andere) Datenverkehr innerhalb des Netzwerks nicht funktioniert, führen Sie journalctl -xe aus und suchen Sie nach Zeilen wie folgt:

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

In diesem Fall funktioniert die Regel wie erwartet. Jemand von einer unbekannten IP-Adresse hat versucht, mein Heimnetzwerk über die ppp0 Schnittstelle zu kontaktieren (z., aus dem Internet). In anderen Fällen müssen Sie möglicherweise die Firewall öffnen, um bestimmten Datenverkehr zuzulassen.

Firewalld ist am einfachsten, wenn zonenbasierte Regeln verwendet werden. Sie benötigen mindestens zwei Zonen, die ich home und public anstelle von lan und wan genannt habe (um den Firewalld-Konventionen zu entsprechen). Ich habe auch eine dritte (optionale) vertrauenswürdige Zone in meiner Konfiguration für das Kubernetes / Docker-Subnetz. Wenn ich also firewall-cmd --get-active-zones eingebe, sehe ich:

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

Die Definitionen für Zonen sind in XML-Dateien enthalten, die sich unter /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>

Der Verkehr wird je nach Schnittstelle oder Quelle in Zonen eingeteilt, z. B.:

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

Und eine Zone kann Datenverkehr zu einem Dienst oder einem Port empfangen:

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

Beachten Sie, dass diese Änderungen vorübergehend sind. Dies ermöglicht ein sicheres Testen. Um sie dauerhaft zu machen, führen Sie sudo firewall-cmd --runtime-to-permanent . Wenn Sie keine weitere Hilfe zu firewalld benötigen, lesen Sie diesen Artikel.

DNS-Server & Umschreibt

Ein DNS-Server kann diesen kleinen Router noch besser machen.

Die Aufgabe des DNS-Servers besteht darin, mit einer IP-Adresse für einen bestimmten Domainnamen zu antworten. Zum Beispiel weiß es, mit welcher IP-Adresse Ihr Computer eine Verbindung herstellen soll, um google.com . Viele Menschen führen aus Sicherheits- und Datenschutzgründen gerne ihre eigenen.

Es gibt zum Beispiel Werbeblocker, die als DNS-Server funktionieren. Durch die Installation von Pi Hole oder AdGuard Home können Sie verhindern, dass Computer im Netzwerk Werbung / Spam / Malware-Domains finden können. Beide Tools unterstützen auch DNS-Umschreibungen, sodass Sie den „Speicherort“ einer Site ändern können.

Sobald Sie eine der beiden installiert haben, bearbeiten Sie einfach /etc/dhcp/dhcpd.confoption domain-name-servers 192.168.0.1;

Jetzt werden alle Geräte, die sich mit dem Netzwerk verbinden, aufgefordert, diesen DNS-Server zu verwenden.

Warum sind Umschreibungen so nützlich? Schauen Sie sich den folgenden Beitrag zum Erstellen eines Heimservers an. Bei Umschreibungen kann dieselbe URL intern und extern verwendet werden, wodurch HTTPS anywhere aktiviert wird. Wenn Sie beispielsweise AdGuard Home verwenden, um *.snowy-cabin.com in 192.168.0.100 umzuschreiben, wird der Datenverkehr, der aus dem Heimnetzwerk stammt, niemals in house.snowy-cabin.com das Heimnetzwerk verlassen. Dies bedeutet, dass dieselbe https:// URL verwendet werden kann, um den Reverse-Proxy zu erreichen, bei dem die SSL-Terminierung erfolgt, um eine sichere Kommunikation sowohl für den öffentlichen als auch für den privaten Datenverkehr sicherzustellen.

Post-ID nicht gefunden: #8977

Spickzettel

Hier sind einige Schlüsselkonzepte für Heimserver:

  • Statische IPs: edit /etc/dhcp/dhcpd.conf Um einen neuen Host hinzuzufügen, starten Sie isc-dhcp-server neu und erneuern Sie den Mietvertrag auf dem Client.
  • Portweiterleitung: sudo firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toaddr=192.168.0.100
  • Benutzerdefinierte Domänennamen: Verwenden Sie den DNS-Server, damit Ihr eindeutiger Domänenname intern und extern funktioniert.
  • Überwachung des Netzwerkverkehrs: Anweisungen.

Von der Sicherheit bis zur Geschwindigkeit gibt es viele Gründe, Ihre Heimnetzwerkverbindung zu verstehen. Lernen Sie die Grundlagen des Netzwerks kennen und bauen Sie Ihren eigenen Router, um das Internet zu Hause zu beschleunigen.

Getaggt asDIY Projekte, Raspberry Pi Projekte
Geschrieben von

(zane) / Technically Wizardry

Diese Seite begann als ein Ort, um DIY-Projekte zu dokumentieren. Es hat sich zu einer Sammlung von IOT-Projekten, technischen Tutorials und Anleitungen entwickelt. Lesen Sie mehr über diese Website…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.