Wer mehr machen möchte, als nur Router zu flashen und aufzustellen, braucht früher oder später ein paar Grundkenntnisse von Netzwerken. Hier sollen zumindest die Grundkenntnisse erklärt werden, die wir bei Freifunk in Mössingen brauchen.
Ein Netzwerk ist einfach eine Menge von Computern oder anderen Geräten, die so miteinander verbunden sind, dass sie miteinander Daten austauschen können. Im einfachsten Fall verbindet man einfach zwei Geräte direkt mit einem LAN-Kabel:
Da die meisten Computer nur einen Anschluss (Port) haben, kann man nicht ohne weiteres mehrere Computer miteinander verbinden. Dafür verwendet man dann einen Switch:
Jedes Gerät hat eine eindeutige MAC-Adresse. Sie besteht aus 48 bit, die meist im Hexadezimalsystem dargestellt werden - z.B. 00:1b:21:5f:b3:90
. Kennt man die MAC-Adresse eines Geräts aus dem obigen Beispiel, so kann man diesem bereits Daten schicken.
In einem Netzwerk kann man übrigens beliebig viele Switches aufstellen:
Wenn ein Gerät ein Paket losschickt, müssen sich die Switches auf dem Weg zwischen Absender und Empfänger immer darum kümmern, dass das Paket auch auf dem richtigen Port weitergeschickt wird. Dazu hat ein Switch eine SAT-Tabelle, in der steht, unter welchem Port welche MAC-Adresse zu erreichen ist. Schickt ein Computer ein Paket los, dann steht dort sowohl seine eigene MAC-Adresse als auch die des Empfängers drinnen. Ein Switch baut seine SAT-Tabelle auf, indem er schaut, von welcher MAC-Adresse und von welchem Port die Pakete kommen. Wenn ein Switch die Ziel-MAC-Adresse noch nicht in seinem SAT-Table hat, schickt er das Paket an allen Ports (außer an dem, über den er es bekommen hat) weiter. Das passiert auch, wenn die Tabelle anfangs noch ganz leer ist.
Damit das Weiterschicken der Pakete (auch Forwarding genannt) so funktioniert, ist es wichtig, dass es keine Schleifen im Netzwerk gibt (spätestens durch Broadcast-Pakete enstehen sonst große Probleme, siehe Wikipedia). Man nennt diese Netzwerkstruktur auch sternenförmig - so wie es im obigen Bild zu sehen ist.
Möchte man immer mehr Geräte miteinander verbinden, dann ergeben sich immer mehr Probleme. Z.B. würde man in einem großen Netzwerk gerne mehrere Querverbindungen haben, was aber gegen die sternförmige Topologie verstößt. Deswegen baut man sich lieber viele kleine Netzwerke, die man dann mit Routern verbindet.
Wie man im folgenden Beispiel sehen kann, kann man einen Router auch verwenden, um mehr als zwei Netzwerke miteinander zu verbinden. Außerdem kann man auch mehrere Router in einem Netzwerk aufstellen, um dieses Netzwerk mit mehreren anderen Netzwerken zu verbinden. Die Topologie innerhalb eines Netzwerks muss zwar noch sternenförmig sein, aber man darf diese Netzwerke mit Routern so verbinden, dass die Topologie außerhalb dann nicht sternenförmig ist.
Weil die Topologie jetzt nicht mehr sternenförmig sein muss, kann es auch mehrere Routen zwischen zwei Geräten geben. Hier sollte natürlich immer die Beste gewählt werden. Damit man sich nicht für jedes Gerät eine eigene Route merken muss, werden IP-Adressen verwendet. Das sind 32-bit Zahlen, die oft als vier 8-bit Blöcke dargestellt werden (z.B. 192.168.12.4
). Jedes Subnetz (so nennt man Netzwerke in diesem Zusammenhang) bekommt jetzt einen IP-Adressbereich. Wie groß dieser ist, wird durch die Subnetzmaske bestimmt. Diese gibt an, wie viele der ersten Bits der Adresse zum Subnetzteil gehören - der Rest gehört dann zum Hostteil. Bei jedem Host aus einem Subnetz mit einer Subnetzmaske von n bit müssen die ersten n bit übereinstimmen - die restlichen 32-n
bit werden dann benutzt, um jedem Gerät eine eindeutige Adresse zu geben.
Hier ein Beispiel dazu: Hier ein Beispiel dazu: Ein Host hat die Adresse 192.168.12.4 und sein Netzwerk hat die Subnetzmaske 24 (dafür schreibt man dann oftmals 192.168.12.4/24
). In welchem Subnetz sich dieser Host befindet, erfährt man, wenn man sich die ersten 24 bit seiner IP-Adresse anschaut: 192.168.12.4 = 11000000.10101000.00001100.00000100 → 11000000.10101000.00001100.00000000 = 192.168.12.0
. Diese Adresse nennt man auch die Subnetzadresse. Weil die Subnetzmaske mit 24 bit genau die ersten drei Blöcke in der Dezimaldarstellung einnimmt, sind auch die ersten drei Blöcke identisch zur IP-Adresse des Hosts und der Rest wird mit Nullen gefüllt. Man könnte sich nun auch Fragen, ob ein zweiter Host sich im selben Subnetz befindet. Dieser hat zum Beispiel die Adresse und Subnetzmaske 192.168.12.208/24
. Um diese Frage zu beantworten, berechnet man wieder die Subnetzadresse: 192.168.12.208 = 11000000.10101000.00001100.11010000 → 11000000.10101000.00001100.00000000 = 192.168.12.0
. Da die Subnetzadresse dieselbe ist, befinden sich die Geräte im selben Subnetz. Das hätte man auch gleich dran sehen können, dass sich die ersten drei Blöcke der IP-Adressen gleichen - das geht aber nur, weil die Subnetzmaske in diesem Beispiel 24 bit einnimmt - wäre sie z.B. 22 bit lang, dann wäre das nicht so einfach.
In der folgenden Grafik haben nun alle Geräte auch eine passende IP-Adresse:
Jetzt stellt sich natürlich die Frage, woher die Geräte ihre eigene IP-Adresse bekommen und wie sie sichergehen können, dass diese auch in ihrem eigenen Netzwerk liegt.
Typischerweise wird für die Konfiguration DHCP verwendet. Auf dem Router im eigenen Netz läuft ein DHCP-Server und wenn man sein Gerät anschaltet, fragt das Gerät im Netzwerk nach, ob es einen DHCP-Server gibt. Da der Router die eigene Subnetzmaske und Subnetzadresse kennt, kann er auch eine neue, gültige IP-Adresse erzeugen. Zusammen mit einigen anderen Informationen schickt er diese dann dem anfragendem Gerät und das Gerät übernimmt diese IP-Adresse.
Natürlich kann man die IP-Adressen aber auch von Hand konfigurieren. Dazu muss aber jeder Nutzer wissen, in welchem Subnetz er sich befindet und welche IP-Adressen noch nicht belegt wurden.
Wenn man einen Freifunk-Router konfiguriert, so befindet dieser sich im Config-Modus und es läuft ein DHCP-Server auf ihm. Verbindet man seinen Computer mit dem Router, so bekommt dieser automatisch eine IP-Adresse zugewiesen. Es gibt aber auch manchmal Geräte, auf denen kein DHCP-Server läuft. In der Anleitung steht dann die IP-Adresse, unter dem das Gerät zu erreichen ist. Dann muss dem eigenen Computer manuell eine IP-Adresse geben, die sich im selben Subnetz befindet, wie das Gerät, das man erreichen möchte.
Damit die Geräte basierend auf ihren IP-Adressen Pakete austauschen können, müssen jetzt noch Routen erstellt werden. Eine Route ist eine Zuordnung von einem Subnetz zu einem Port. Wenn ein Gerät jetzt ein Paket verschickt, schaut es zuerst, ob das Ziel sich in einem Subnetz befindet, für das es eine Route gibt in der eigenen Routingtabelle gibt. Dementsprechend wird das Paket am ausgesuchten Port weiter geschickt. Diesen Prozess nennt man Forwarding.
Doch woher kommen die Routen eigentlich? Zuerst mal sollte gesagt sein, dass man die Routen natürlich manuell konfigurieren kann. Damit aber so große Netzwerke wie das Internet möglich sind, braucht es automatische Routing Algorithmen. Die Router tauschen dann untereinander Pakete aus, in dem sie sich mitteilen, welche Subnetze sie erreichen können und wie gut die Verbindung dahin ist. Die Qualität der Verbindung kann z.B. über die Zeit, die ein Paket braucht, bis es am Ziel ist, bestimmt werden, oder aber durch die Bandbreite oder durch die Anzahl der Router, die sich auf dem Weg bis zum Ziel befinden.
In einem Heimnetzwerk haben Geräte meistens nur zwei relevante Routen - hier ein Beispiel:
default via 192.168.0.1 dev enp3s0 192.168.0.0/24 dev enp3s0
Die erste Route ist die default Route. Wenn es keine andere Route für die Zieladresse gibt, dann wird die default Route verwendet. Dabei wird dann alles an das Gateway geschickt - das ist hier die 192.168.0.1
verschickt, was in den meisten Heimnetzwerken der eigene Router ist. Das Gateway kann man manuell konfigurieren, oder es wird per DHCP konfiguriert.
Die zweite Route sagt dem Gerät nur, dass es sich selbst im Subnetz 192.168.0.0/24
befindet - also muss es die Pakete nicht noch an ein anderes Gerät schicken, sondern direkt an das eigentliche Ziel.
Erhält ein Router ein Paket, so schaut er sich das Ziel an und schaut dann wiederum in seiner eigenen Routingtabelle, wie er das Paket weiter schicken soll. Wenn man ein Paket über das Internet schickt, wird es irgendwann an einem Router ankommen, der tatsächlich mehrere Möglichkeiten hätte, das Paket weiterzuschicken - und der benötigt dann die Routingalgorithmen, damit die beste Route ausgewählt werden kann.
Mit dem Befehl ip address show
kann man sich die eigene IP-Adresse anzeigen lassen. Der Befehl könnte z.B. folgenden Output haben:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 4c:cc:6a:0a:45:d2 brd ff:ff:ff:ff:ff:ff inet 192.168.0.214/24 brd 192.168.0.255 scope global dynamic noprefixroute enp3s0 valid_lft 598481sec preferred_lft 598481sec
Der Befehl listet für alle Netzwerkschnittstellen die IP-Adressen auf. Normalerweise hat ein Computer nur eine Netzwerkschnittstelle, aber unter Linux gibt es zusätzlich das Loopback-Interface, das hier mit lo
abgekürzt wird. Die eigentliche Schnittstelle hat also den Namen enp3s0
. Unter link/ether
findet sich erst mal die eigene MAC-Adresse, hier 4c:cc:6a:0a:45:d2
. Unter inet
findet man dann die eigene IP-Adresse und die Subnetzmaske, hier 192.168.0.214/24
. Taucht kein inet
-Abschnitt auf, bedeutet das, dass das Gerät keine IP-Adresse hat. Das ist oft ein erster Diagnoseschritt, wenn man Netzwerkprobleme hat.
ip address show
kann man übrigens auch zu ip a s
oder sogar zu ip a
abkürzen.
Um eigene IP-Adressen zu konfigurieren, kann man entweder das Terminal oder einen Netzwerkmanager mit graphischer Benutzeroberfläche verwenden.
Dazu verwendet man den Befehl
sudo ip a add <ip-adresse>/<subnetzgröße> dev <interface>
das könnte z.B. so aussehen:
sudo ip a add 192.168.202.3/24 dev enp5s1
Um die IP-Adresse wieder zu entfernen, verwendet man statt add
del
. Also z.B.
sudo ip a del 192.168.202.3/24 dev enp5s1
Jede Linux-Distribution kann seinen eigenen Netzwerkmanager haben. Hier wird der von KDE Plasma gezeigt, der auch am QG installiert ist.