[[Vorlage(Getestet, general)]] [[Vorlage(fortgeschritten)]] {{{#!vorlage Wissen [:Terminal:Ein Terminal öffnen] [:mit Root-Rechten arbeiten:] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis(3)]] [[Bild(Wiki/Icons/Oxygen/applications-internet.png, 64, align=left)]] Ein [:Router:] ist eine netzwerktechnische Funktion (Routing-Funktion), welche Netzwerkpakete auf Ebene 3 (''L3'', ''layer 3'', Schicht 3, Vermittlungsschicht, auch Netzwerkschicht) im Netzwerkschichtenmodell zwischen Netzwerken vermittelt. Diese Funktion kann als Hardware-Gerät, aber auch per Software realisiert werden. Unter Ubuntu lässt sich diese Aufgabe ebenfalls lösen und auf einem Rechner umsetzen. Man benötigt lediglich das Paket '''iproute2''', welches bei jedem Ubuntu-System installiert ist. Ein Router bearbeitet Netzwerkpakete nur eines bestimmten Protokolls auf L3, also z.B. nur IPv4, nur IPv6, nur CAN. Dabei vermittelt er nicht zwischen den verschiedenen Protokollen auf L3. In der Regel bearbeitet ein IP-Router zwar beide Protokolle IPv4 und IPv6, jedoch sind das bei strenger Betrachtung zwei voneinander unabhängige Funktionen, welche auf gemeinsamer Hardware realisiert sind. Dagegen ist die Umsetzung verschiedener L2-Übertragungstechniken eine typische Aufgabe für Hardware-Router, also beispielsweise das Auspacken eines IP-Paketes aus einem per WiFi/WLAN empfangenen Nachricht, das Verpacken dieses Paketes in eine Ethernet-Nachricht und Aussenden über eine geeignete Schnittstelle. In diesem Artikel wird vorausgesetzt, dass der Rechner über mehrere (Hardware- oder Software-) Schnittstellen verfügt, die IP-Pakete empfangen und aussenden können. Die Betriebsbereitstellung dieser Schnittstellen ist nicht Gegenstand dieses Artikels, siehe dazu: * [:WLAN:] * [:WLAN_Router:WLAN-Router:] * [:systemd/WLAN_mit_systemd-networkd:WLAN mit systemd-networkd] * [:WLAN/wpa_supplicant#hostaüd:wpa_supplicant und hostaüd] * [:VPN:] * z.B. [:WireGuard:] In diesem Artikel wird der Begriff "Router" eingegrenzt auf die Aufgabe der Weitergabe von IP-Paketen. In den Artikeln * [:Router:] * [:Hardware-Router:] * [:Router/Multifunktionsgerät:] findet man Informationen zu als "Router" bezeichneten Geräten mit zusätzlichen Funktionen und wie man diese mit Linux realisieren kann. {{{#!vorlage Hinweis In diesem Artikel beschränken sich die Beispiele auf einen IPv4-Router. Zur Übertragung auf einen IPv6-Router müssen nur diese Hinweise beachtet werden: * Schreibweise von IP Adressen * Angabe des Protokolls: Statt "`ip route`" bzw. "`ip -4 route`" ist für IPv6 "`ip -6 route`" anzuwenden. }}} In diesem Artikel wird ein isolierter Router vorausgesetzt, der ausschließlich lokal statisch konfiguriert wird und nicht mit seinen Nachbarn über Routing-Protokolle Informationen über Leitwege austauscht. Dies ist eigentlich im Internet ein ungewöhnliches Szenario, aber die Behandlung von [:Dynamisches_Routing:Routing-Protokollen] kann hier nicht erfolgen. = Praktisches Beispiel = Die Arbeitsweise soll zuerst an einem praktischen Beispiel dargestellt werden: Der Rechner verfügt über mehrere Netzwerkschnittstellen `NET1`, `NET2`, `Paris`, `Moskau`. Man mag sich vorstellen, dass `NET1` eine Ethernet-Schnittstelle ist und `NET2` ein bereits funktionierender WLAN-Zugangspunkt, sowie die Schnittstellen `Paris` und `Moskau` funktionierende VPN-Verbindungen zu Außenstellen der Firma darstellen. Tatsächlich ist aber für das Routing völlig nebensächlich, welche Übertragungstechnik die einzelnen Schnittstellen verwenden. == Aufgabe == Es sollen folgende Vorgaben erfüllt werden: * Die Firma verwendet als IP-Netz den Bereich 10.10.0.0/16 (65536 Adressen). * Die Außenstellen verwenden den Teilbereich 10.10.252.0/22 (1024 Adressen). * Die große Außenstelle Paris benötigt viele Adressen und verwendet daher den Teilbereich 10.10.255.0/24 (256 Adressen). * Die kleine Außenstelle Moskau benötigt nur 8 Adressen und verwendet 10.10.254.248/29. * Im Grunde darf jeder mit jedem sprechen, bis auf diese Ausnahmen: * Die Rechner der Personalabteilung (10.10.0.0/24, 256 Adressen) dürfen nicht ins WLAN (= 10.10.254.0/24). * Der Rechner der Entwicklungsabteilung 10.10.1.42 darf nicht mit Russland verkehren. == Lösung mit klassischem Routing == Zur Lösung der Aufgabe mittels klassischem Routing gibt der Administrator diese Befehle ein: * Auf dem als Router vorgesehenen Rechner: \\ {{{#!vorlage Befehl ip route add blackhole 0.0.0.0/0 ip link set NET1 up ; ip route add 10.10.0.0/16 dev NET1 ip link set NET2 up ; ip route add 10.10.254/24 dev NET2 ip route add prohibit 10.10.252/22 ip link set Paris up ; ip route add 10.10.255/24 dev Paris ip link set Moskau up ; ip route add 10.10.254.248/29 dev Moskau }}} * Auf dem Rechner der Entwicklungsabteilung: [[Vorlage (Befehl, "ip route add prohibit 10.10.254.248/29") ]] * Auf jedem Rechner der Personalabteilung oder auf dem nachgeschalteten Router für die Personalabteilung: [[Vorlage (Befehl, "ip route add prohibit 10.10.254/24") ]] An dieser Lösung ist natürlich unschön, dass die Verkehrsverbote nicht auf dem Router, sondern auf den Zielrechnern konfiguriert werden müssen. Alternativ kann man diese Methoden verwenden: * Man verwendet zusätzlich zum klassischen Routing auf dem Router noch [:iptables:Netfilter] und konfiguriert eine [:Personal_Firewalls:Firewall]. * Man verwendet [#Advanced-Routing Advanced Routing]. Das allgemeine Schema zur Definition eines ''Leitwegs'' (engl. route) lautet: {{{ip route add TYP-DER-ROUTE ZIELBEREICH-DER-ROUTE WEG-DER-ROUTE }}} Im Beispiel werden als Typ für den Leitweg `blackhole`, `prohibit` und `unicast` verwendet. [#Verbotene-Wege `blackhole` und `prohibit`] machen genau das, was ihr Name verspricht; der Typ [#Normale-Wege `unicast` ist der Normalfall] und muss deshalb nicht (kann aber) angegeben werden. Die Reihenfolge, in der man die Definitionen eingibt, ist [#Reihenfolge weitgehend gleichgültig]. Für jedes auf dem Router eintreffende IP-Paket wird bei der ''Routing-Entscheidung'' geprüft, welcher Leitweg am besten mit der Zieladresse des IP-Pakets übereinstimmt. Man kann sich vorstellen, dass die Übereinstimmung zwischen Leitweg und Zieladresse in absteigender Reihenfolge der Länge der Netzmasken geprüft wird. Wenn für jedes in der Netzmaske gesetzte Bit Zieladresse und Leitweg gleich sind, dann wird dieser Leitweg benutzt und mit dem Paket wird wie unter WEG-DER-ROUTE angegeben verfahren. Konkret wird mit einem IP-Paket für `10.10.253.137` so geprüft: 1. Passt auf `10.10.254.248/29` (Moskau)? Nein 1. Passt auf `10.10.254/24` (WLAN)? Nein 1. Passt auf `10.10.255/24` (Paris)? Nein 1. Passt auf `10.10.252/22`? Ja, es ist für eine Außenstelle bestimmt, aber für keine bekannte. Damit hat es aber in der Zentrale kein gültiges Ziel. Also wirf das Paket weg und benachrichtige den Absender. Wie man im Beispiel sieht, darf man die IPv4-Bereiche in einer abkürzenden Schreibweise angeben, indem man ganze Byte mit dem Wert `0` weg lässt. Alternativ darf man auch die Netzmaske ausschreiben, also z.B. `/255.255.252.0` statt `/22`. Nach einiger Zeit wird sich die Personalabteilung beim Administrator beschweren, weil sie „Moskau nicht erreichen kann“. Das liegt an der Überlappung der Adressenbereiche für WLAN und Moskau und ist theoretisch leicht zu korrigieren. Man muss nur für die Sperre des WLANs in der Personalabteilung diese Ausnahme für Moskau hinzufügen: [[Vorlage (Befehl, "ip route add 10.10.254.248/29 dev eth0") ]] Allerdings bei jedem Rechner in der Personalabteilung. Möglicherweise gibt es unterschiedliche Hardware in dieser Abteilung und manche Rechner verwenden statt `eth0` einen anderen Schnittstellennamen wie z.B. `emp0s24` oder `enp23s0` oder … (Zur Vermeidung solcher Alpträume lese [#Advanced-Routing Advanced Routing].) = Klassisches Routing = Hierbei basiert die Entscheidung über das Schicksal eines IP-Pakets ausschließlich auf seiner Zieladresse und einigen wenigen Datenfeldern im Header des IP-Paketes: (Das folgende ist eine stark vereinfachende Darstellung des komplexen Verhaltens nach RFC 1812!) * Version (Bits 1-4 im Header) * TTL * Dienstleistungsfeld (engl. ''Differentiated Services Field'', DS field), bei IPv4 Bits 9-14, bei IPv6 Bits 5-10 im Header. Früher wurden diese Stellen für ''IP Precedence'', TOS (''type of service'') bzw. TC (''traffic class'') verwendet. (Für alle diese Funktionalitäten wird verbreitet (so auch hier, und eigentlich veraltet) die Bezeichnung "TOS" verwendet.) * Zieladresse Im Netzwerk-Subsystem im Linux-Kernel wird zuerst neben formalen Anforderungen wie z.B. Paketlänge der Wert im Feld Version im Netzwerkpaket geprüft. Wenn hier der Wert für IPv4 bzw. IPv6 steht, werden später entsprechend die konfigurierten Routen für IPv4 bzw. IPv6 untersucht, sonst wird das Netzwerkpaket vernichtet. Die Bearbeitung eines IP-Pakets beginnt mit einer Entscheidung, ob das Paket (nur/auch) lokal zugestellt oder (nur/auch) weitergesendet werden soll. Für weiter zu sendende Pakete (und nur für solche) wird der TTL-Wert im Header dekrementiert. Wenn sich dabei der Wert 0 ergibt, wird das Paket vernichtet. Ein Router muss das Dienstleistungsfeld nicht beachten. Wenn es mit zur Entscheidung verwendet wird, dann wird * zuerst die beste Route für die Zieladresse gesucht, bei der der TOS-Wert der Route exakt mit dem TOS-Wert des Netzwerkpakets übereinstimmt, * und wenn dies nicht gelingt, wird die beste Route mit dem TOS-Wert 0 für die Zieladresse gesucht. Moderne Linux-Kernel beherrschen das TOS-Routing und ab Version 2.6.X ist es auch unveränderlich aktiviert. Wer es nicht benötigt, ignoriert es einfach. In diesem Artikel wird TOS nicht weiter behandelt, d.h. alle Routen haben den TOS-Wert 0. Wenn das Paket die Bearbeitung beim Routing überlebt, kennt der Kernel des Routers nun als Ergebnis eine Schnittstelle, an die das Paket ausgegeben werden soll und ggf. auch das aus seiner Sicht nächste Ziel für das IP-Paket. Wenn er selbst kein nächstes Ziel ermittelt hat, nimmt er als nächstes Ziel die Zieladresse aus dem Paket. Linux benutzt für Routing mehrere Routing-Tabellen, in denen die Leitwege vermerkt werden. Wenn man klassisches Routing verwenden will, muss man sich damit nicht beschäftigen, da automatisch alle zur Beurteilung des klassischen Routing wichtigen Leitwege in die Haupttabelle (''table main'') geschrieben werden und einige im Hintergrund arbeitende Leitwege in eine lokale Tabelle (''table local''), um die man sich fast nie kümmern muss. Die Angabe einer Routing-Tabelle ist dagegen erforderlich für [#Advanced-Routing Advanced Routing]. == Weiterleitung von IP-Paketen == Das IP-Routing (auch: IP-Forwarding) muss über Kernel-Variablen explizit eingeschaltet werden: {{{#!vorlage Befehl sysctl -w net.ipv4.ip_forward=1 # für IPv4, alte Methode sysctl -w net.ipv4.conf.all.forwarding=1 # für IPv4, moderne Variante sysctl -w net.ipv6.conf.all.forwarding=1 # für IPv6 }}} Man kann dies über entsprechende Einträge der Datei '''/etc/sysctl.conf''' oder besser in einer Datei unter '''/etc/sysctl.d/''' dauerhaft beim Hochlauf des Rechners erledigen: {{{#!vorlage Befehl cat /etc/sysctl.d/20-router.conf }}} {{{ net.ipv4.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1 }}} Diese Variablen machen mehr als nur die Weiterleitung ein-/auszuschalten. Sie ändern das generelle Verhalten des Rechners zwischen Host-Modus nach [#Links RFC 1122] und Router-Modus nach [#Links RFC 1812]. Details können in der [#Links Kernel-Dokumentation] nachgelesen werden. [[Bild(Router/Netzwerk_Router01.png, 400, align=right)]] == Route anlegen == Wie im Beispiel gezeigt, benötigt man nur das Programm '''ip''' mit dem Befehl `route` zur Konfiguration der Leitwege. Das Schema [[Vorlage(Befehl,"ip route add TYP-DER-ROUTE ZIELBEREICH-DER-ROUTE WEG-DER-ROUTE") ]] reicht für die meisten Fälle aus. * Für TYP-DER-ROUTE sind die im [#Leitwege Abschnitt Leitwege] erklärten Varianten möglich. Meistens lässt man diese Angabe weg und meint dann den Standardtyp `unicast`. * Für ZIELBEREICH-DER-ROUTE muss als Adressbereich eine IP-Adresse und eine Netzmaske angegeben werden. * Möglich sind bei IPv4 diese Schreibweisen am Beispiel „Adresse ist 192.0.2.0, Netzmaske beginnt mit 24 Bits mit dem Wert 1 und wird mit 8 Bits mit dem Wer 0 auf 32 Bit aufgefüllt“: * 192.0.2.0/24 * 192.0.2.0/255.255.255.0 * 192.0.2/24 * Dies meint immer den Adressbereich: 192.0.2.0 - 192.0.2.255. Man vermeide führende Nullen im ersten Byte, denn das wird dann als Oktalzahl verstanden: `010.12.377.0/24` bedeutet `8.10.255.0/24`! * Bei IPv6 gibt es nur eine Schreibweise, man darf aber einmal eine Folge von Null-Bits abkürzen: * 2001:0db8:0:0:0:0:0:0/16 * 2001:db8::/16 * Dies meint den Adressbereich: 2001:0db8:0:0:0:0:0:0 - 2001:0db8:ffff:ffff:ffff:ffff:ffff:ffff {{{#!vorlage Hinweis Wichtig: Für jedes Bit, welches in der Netzmaske den Wert 0 hat, muss auch in der IP-Adresse das entsprechende Bit den Wert 0 haben! }}} [[Anker(Reihenfolge)]] * Für "WEG-DER-ROUTE" sind diese Varianten häufig: * "dev SCHNITTSTELLE": z.B. "dev lo", "dev NET1", "dev Paris". Voraussetzung: Schnittstelle muss betriebsbereit (`up`) sein. * "via IP-ADRESSE": Voraussetzung: Es muss eine Route zu IP-ADRESSE bereits bekannt sein. Die Reihenfolge, in der man die Leitwege definiert, ist weitgehend gleichgültig und unterliegt nur den vorstehend genannten Voraussetzungen. Zur Definition eines über die Schnittstelle `NET1` erreichbaren Gateways mit der Adresse `10.10.3.42` für den Netzbereich `10.10.252/22` sind also diese Befehle in dieser Reihenfolge erforderlich: {{{#!vorlage Befehl ip link set NET1 up ip route add 10.10.3.0/24 dev NET1 ip route add 10.10.252/22 via 10.10.3.42 }}} Die Angabe `10.10.3.0/24` könnte auch anders lauten; wichtig ist nur, dass die Adresse des einen Rechners `10.10.3.42` in dem hier angegebenen Zielbereich enthalten ist. Es gibt aber noch eine Fülle von Zusätzen und Varianten, welche hier nicht alle besprochen, aber in der Manpage nachgelesen werden können: [[Vorlage(Befehl, "man ip-route") ]] Beim Advanced Routing fügt man die Routing-Tabelle zusätzlich am Ende dem Befehl hinzu, beispielsweise: {{{#!vorlage Befehl ip route add 10.10.3.0/24 dev NET1 # schreibt Leitweg in die Maupttabelle ip route add 10.10.3.0/24 dev NET1 table 666 # schreibt Leitweg in die Tabelle Nr. 666 }}} == Routen anzeigen == Die Gesamtheit der Leitwege zeigen diese Befehle an: {{{#!vorlage Befehl ip route list table all routel }}} Statt `list` kann man auch `show` schreiben. Meistens möchte man nur die Leitwege für ein Protokoll sehen: {{{#!vorlage Befehl ip -4 route list table all # für IPv4 ip -6 route list table all # für IPv6 }}} … und auch nur die Haupttabelle: {{{#!vorlage Befehl ip -4 route # für IPv4 ip -6 route # für IPv6 }}} Der Befehl `ip route show` hat situationsabhängig unterschiedliche Vorgaben; manchmal zeigt er nur die Leitwege für IPv4, manchmal die Leitwege für beide Protokolle IPv4 und IPv6 an. Da man ohnehin die beiden Protokolle getrennt beurteilen muss, sollte man in der Praxis immer das Protokoll explizit angeben. Bei der Ausgabe von Routen wird durchweg für die Netzmaske die Bitschreibweise `/n` benutzt. == Route löschen == Löschen kann man eine Route, indem man in dem Befehl zum Anlegen der Route das Wort `add` durch `del` ersetzt. Alle zu einer Schnittstelle gehörenden Leitwege löscht dieser Befehl: {{{#!vorlage Befehl ip -4 route flush # für IPv4 ip -6 route flush # für IPv6 }}} == Leitwege == Der Typ des Leitwegs bestimmt, was mit dem gerade untersuchten IP-Paket geschehen soll. Grundsätzlich möglich sind Weiterleitungen nach verschiedenen Methoden und Vernichtung mit und ohne Benachrichtigung des Absenders. === Lokale Wege === Lokale Leitwege umfassen die Arten `local` sowie bei IPv4 [#Kommunikationsbeziehungen `broadcast`], bei IPv6 [#Kommunikationsbeziehungen `anycast`] und [#Kommunikationsbeziehungen `multicast`]: * Leitwege vom Typ `local` sorgen für die lokale Zustellbarkeit von IP-Paketen. Ein Rechner kann nur solche Pakete empfangen, welche in lokalen Leitwegen beschrieben sind, und diese gelangen aus dem Kernel in den Userspace und landen bei jedem Anwendungsprogramm, welches einen passenden Netzwerk-Socket geöffnet hat. (Siehe jedoch tuntap) * Leitwege vom Typ `broadcast` verhalten sich bei IPv4 zunächst genau so wie solche von Type `local`. Zusätzlich wird aber auch eine Kopie des Pakets über die in der Route angegebenen Schnittstelle ausgesendet unter Verwendung der L2-Broadcast-Adresse der Schnittstelle. Leitwege vom Typ `broadcast` gibt es bei IPv6 nicht, weil das Protokoll IPv6 gar keinen Broadcast kennt. Ersatzweise werden Leitwege vom Typ `multicast` verwendet. * Zu `anycast` und `multicast` siehe [#Sonderwege Sonderwege]. Diese Leitwege werden selten direkt über Befehle mit `ip route` angelegt, sondern meistens automatisch bei der Zuweisung einer IP-Adresse an den Rechner mittels `ip addr`. Wenn solche Routen (explizit oder automatisch) angelegt werden, landen sie immer in der Routing-Tabelle `local` und nicht in `main`, es sei denn, man gibt die Tabelle explizit an. === Normale Wege === * Leitwege vom Typ [#Kommunikationsbeziehungen `unicast`] sind der Normalfall für die Weiterleitung. Dieser Typ muss nicht in der Definition von Routen angegeben werden und wird auch bei der Anzeige nicht dargestellt. Ein Paket, welches eine solche Route nehmen soll, wird über die beim Routing ermittelte Schnittstelle an das beim Routing ermittelte nächste Ziel (''next hop'') geschickt. Dieses nächste Ziel ergibt sich entweder aus dem Leitweg oder es ist die Zieladresse des IP-Pakets. Auf L2 wird die Unicast-Adresse dieses nächsten Ziels verwendet; wenn diese unbekannt ist, wird sie z.B. bei Ethernet über ARP für IPv4 bzw. ICMPv6 für IPv6 ermittelt. === Verbotene Wege === Leitwege der Typen `blackhole`, `unreachable`, `prohibit` vernichten alle das IP-Paket. Sie unterscheiden sich nur bei der Benachrichtigung des Absenders: * `blackhole`: Keine Benachrichtigung * `unreachable`: ICMP-Paket mit Fehlermeldung „nicht erreichbar“ (''destination/host/network unreachable'') * `prohibit`: ICMP-Paket mit Fehlermeldung „administrativ verboten“ (''communication administratively prohibited'' ) === Irrwege === * Leitwege vom Typ `nat` werden seit Linux 2.6 nicht mehr unterstützt. Zur Konfiguration von NAT verwendet man [:iptables:Netfilter]. === Sonderwege === Bei Linux kann man zwar Leitwege der Typen [#Kommunikationsbeziehungen `anycast`] und [#Kommunikationsbeziehungen `multicast`] definieren, diese werden jedoch vom Netzwerk-Code im Kernel nicht artgerecht behandelt. Wer Anycast verwenden oder Mulicast-Pakete routen möchte, benötigt dafür zusätzliche Software wie '''smcrouter''', '''pimd''' oder '''mrouted'''. ('''mrouted''' ist nicht mehr in den Paketquellen enthalten.) Diese Themen werden in diesem Artikel nicht weiter behandelt. * Leitwege vom Typ `anycast` werden vom Netzwerk-Code im Kernel wie solche vom Typ `local` behandelt. * Leitwege vom Typ `multicast` werden vom Netzwerk-Code im Kernel nur für ihre Schnittstelle beachtet und nicht an andere Schnittstellen weitergegeben. * Leitwege vom Typ `throw` sind gar keine Leitwege, aber wichtig für Advanced Routing. Wenn ein Paket auf einen solche Route passt, wird die Bearbeitung der aktuellen Routing-Tabelle beendet. Die Bedeutung einer solchen Route entspricht: „Diese Routing-Tabelle ist nicht für dieses Paket zuständig.“ Es kann dann in einer anderen Routing-Tabelle nach einem Leitweg für das Paket gesucht werden. * Leitwege vom Typ `default` gibt es ebenfalls nicht, obwohl man oft ungenau über eine solche sog. „default Route“ spricht. Man meint dann aber eigentlich einen Leitweg von Typ `unicast` mit einem speziellen Wert mit dem Namen `default` für den ZIELBEREICH-DER-ROUTE. Ein Leitweg mit diesem Zielbereich ist der am wenigsten spezielle von allen möglichen Leitwegen und wird daher immer als letzter geprüft. Seine Bedeutung ist daher: „Wenn alle speziellen Ziele für dieses Paket nicht richtig sind, dann schicke das Paket an das Ziel dieser Route.“ * IPv4: `default` = `0/0` oder ausgeschrieben `0.0.0.0/0` bzw. `0.0.0.0/0.0.0.0` * IPv6: `default` = `::/0` oder ausgeschrieben `0:0:0:0:0:0:0:0/0` = Administration = Jeder IPv4-Router benötigt eine Router-ID, weil er sonst bestimmte (hier nicht besprochene) Optionen für IPv4-Pakete nicht richtig bearbeiten kann. Als Router-ID wird eine seiner eigenen IPv4-Adressen verwendet. Somit muss jeder IPv4-Router auch mindestens eine eigene IP-Adresse besitzen, über den man ihn von außen erreichen kann. Für IPv6 gilt das entsprechend. Es ist gleichgültig, welcher Schnittstelle diese IP-Adresse(n) formal zugeordnet wird; man kann auch die Schnittstelle `lo` dafür verwenden. == Fernzugriff == Zur Verwaltung eines Routers benutzt man in der Regel einen Fernzugriff per [:SSH:], da der Rechner als Router keine Bediengeräte benötigt und in der Regel auch über keine verfügt. Dazu muss man einen SSH-Server installieren und diesen gegen missbräuchliche Verwendung absichern. Der Zugriff von einen Windows-System aus über eine SSH-Verbindung ermöglicht das Programm [:PuTTY:]. == Aktivierung von Routen und Regeln == Neu definierte oder geänderte Leitwege werden sofort wirksam ohne einen gesonderten Aktivierungsbefehl. Zur Aktivierung neuer oder geänderter Regeln für das Advanced Routing empfiehlt die Dokumentation jedoch diesen Befehl: {{{#!vorlage Befehl ip route flush cache }}} == Backup und Restore == Die zum Betrieb des Router benötigten Leitwege kann man interaktiv eingeben, in einem Skript hinterlegen oder beim Hochlauf des Rechners über ein gängiges Netzwerk-Konfigurationsprogramm wie z.B. [:interfaces:ifupdown], [:systemd/networkd:systemd-networkd], oder [:NetworkManager:] konfigurieren lassen. Auch das Dienstprogramm [:ip:] ermöglicht, den aktuellen Bestand an Leitwegen zu sichern und wieder zu restaurieren: {{{#!vorlage Befehl ip route save table all > Leitwege # sichert die Leitwege aus allen Routing-Tabelle in der binären Datei Leitwege ip route restore < Leitwege # spielt die alten Leitwege wieder ein }}} Bei der Verwendung dieses Restore-Befehls sind zwei Besonderheiten zu beachten: 1. Die bestehenden Leitwege werden nicht automatisch entfernt. 1. Die Schnittstellen werden in der Sicherungsdatei über ihren Index, nicht über ihren Namen identifiziert. Man muss dafür sorgen, dass die Indices beim Sichern genau denen beim Wiederherstellen entsprechen. Man sollte daher beim Hochlauf das Netzwerk z.b: über Konfigurationsdateien für systemd-networkd zuerst in einen festen Grundzustand bringen, bei dem alle Schnittstellen bereits existieren und die Erreichbarkeit des Rechners von außen gegeben ist, und dann per Skript manuell oder automatisch den vorherigen Stand wieder herstellen. = Kommunikationsbeziehungen = Die Fachbegriffe ''"Anycast"'', ''"Broadcast"'', ''"Multicast"'' und ''"Unicast"'' stehen für unterschiedliche Strukturen bei der Kommunikation: * ''Unicast'' bezeichnet Unterhaltungen zwischen (maximal) zwei Teilnehmern; sowohl Monologe wie Dialoge. Im Rechnernetzwerk benötigt dafür jeder Teilnehmer eine Adresse, auf der er erreichbar ist und die er als Absender verwenden kann. * ''Broadcast'' bezeichnet Monologe von einem Teilnehmer an alle in einem bestimmten Bereich, d.h. bei Rechnernetzwerken alle in einem bestimmten Netzwerk. Diese Kommunikationsbeziehung gibt es bei manchen L2-Protokollen, z.B. bei Ethernet und bei auch bei IPv4, aber nicht bei IPv6. * ''Multicast'' bezeichnet Monologe von einem Teilnehmer an alle in einer bestimmten Gruppe. Bei Rechnernetzwerken müssen sich nicht alle zuhörenden Teilnehmer im selben Netzwerk befinden, und jeder Teilnehmer muss explizit der Multicast-Gruppe beitreten. * ''Anycast'' bezeichnet Dialoge (und theoretisch auch Monologe) zwischen einen Client und einem aus einer Gruppe ausgesuchten Server, wobei die Auswahl des Servers nicht vom Client, sondern von einem Router zwischen Client und den möglichen Gegenstellen getroffen wird. Dem Client ist sozusagen egal, von welchem Server er bedient wird, weil aus seiner Sicht „alle das gleiche machen“. Jeder Server in einer Anycast-Gruppe ist unter derselben Anycast-IP-Adresse erreichbar, sendet aber auf seiner individuellen Unicast-IP-Adresse. = Links = * [wikipedia:Router:] {de} * [https://tools.ietf.org/html/rfc1812 RFC 1812] {en} – Anforderungen für Router * [https://tools.ietf.org/html/rfc1122 RFC 1122] {en} – Anforderungen für Hosts * [https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt Kernel-Dokumentation ip-sysctl.txt] {en} * [wikipedia:Anycast:] {de} * [wikipedia:Multicast:] {de} == Advanced Routing == * [https://tldp.org/HOWTO/pdf/Adv-Routing-HOWTO.pdf] {en} * [https://www.kernel.org/doc/Documentation/networking/policy-routing.txt] {en} * [http://www.policyrouting.org/PolicyRoutingBook/ONLINE/TOC.html] {en} * [http://linux-ip.net/html/routing-tables.html] {en} # tag: Internet, Netzwerk, Router