# Netzwerkgrundlagen :-) Ziele: - Konzepte: IP-Adressen, Routing, MAC-Adressen, ARP, DNS, ... - Praxis: Linux-Befehle zur Netzwerkeinrichtung (virtuell, Kabel, wireless) IP: - IPv4-Adressen sehen so aus: z.B. 192.168.178.110, also vier Zahlen zwischen 0 und 255 mit Punkten getrennt (d.h. vier Bytes, d.h. 32 Bits) - Um einen Computer übers Netzwerk (insbesondere übers Internet) zu erreichen, braucht man seine IP-Adresse. - Mit den Linux-Befehlen "ip addr" oder "ifconfig" lässt sich die IP-Konfiguration anzeigen. (Unter Windows geht das mit "ipconfig".) - Mit dem Befehl "ip addr add 192.168.0.5/24 dev eth0" kann man dem Netzwerkgerät eth0 die IP-Adresse 192.168.0.5 zuweisen. - Insgesamt gibt es 256⋅256⋅256⋅256 = 256⁴ = 2³² = 4294967296, also nur etwas mehr als 4 Milliarden IPv4-Adressen. - Besondere IP-Adressen: - 127.0.0.1: reserviert für den eigenen Rechner (loopback) - 192.168.x.y: reserviert für LANs (für private Nutzung) - 10.x.y.z: reserviert für LANs (für private Nutzung) - Die letzte IP-Adresse in einem Netzwerk ist stets reserviert für Broadcast, also ein Platzhalter, um alle Rechner des Netzwerks zu erreichen. Wenn das Netzwerk 192.168.178.x ist (formell geschrieben IPv6: - Weiterentwicklung von IPv4 - Sichtbarste und wichtigste Unterschied: IPv6-Adressen sind länger als IPv4-Adressen, bestehen nämlich aus 128 Bit - Man schreibt IPv6-Adressen hexadezimal: 2a00:1450:400a:0803:0000:0000:0000:2003 (8 Blöcke mit je 4 Hexziffern; 1 Hexziffer = 4 Bits) - Seit etwa 2010 sind alle öffentliche IPv4-Adressen bereits vergeben. Wenn man eine eigene öffentliche IPv4-Adresse haben möchte, muss man sie wem anderes abkaufen. Vor 2010 war es nur ein Verwaltungsvorgang, verknüpft eventuell mit einer geringer Verwaltungsgebühr, eine eigene öffentliche IPv4-Adresse zu bekommen. TCP/UDP: - TCP und UDP setzen beide auf IP auf und stellen Portnummern zur Verfügung. - Portnummern sind zwischen 0 und 65535 (im Binärsystem: 0 und 1111111111111111). - Manche Portnummern werden immer wieder für dieselben Tätigkeiten verwendet: - Port 80: unverschlüsseltes HTTP - Port 443: verschlüsseltes HTTP - Port 8080: unverschlüsseltes HTTP, wenn Port 80 schon belegt ist (im Browser aufrufbar durch die URL http://www.ingo-blechschmidt.eu:8080/) - Paketverluste kommen im lokalen Netzwerk und vor allem im Internet und vor allem bei schlechten mobilen Daten immer wieder vor. - TCP führt Buch über die erhaltenen Pakete und fragt verlorene Pakete erneut beim Sender an. Außerdem führt TCP Buch über die Paketreihenfolge und sortiert die Pakete gemäß ihrer ursprünglichen Versandreihenfolge. HTTP setzt auf TCP auf. - Dem UDP-Protokoll sind Paketverluste egal. Mit einer sog. Prüfsumme detektiert UDP Paketverfremdungen, aber UDP fordert in diesem Fall anders als TCP nicht eine Neusendung an. "best effort" Sprachübertragung (für Voice over IP) findet oft über UDP statt. OSI: - https://de.wikipedia.org/wiki/OSI-Modell - Layer 1: Physische Übertragung, Beispielproblematik: Kabel nicht genügend abgeschirmt - Layer 2: Sicherungsschicht. Auf Layer 2 kommen MAC-Adressen zur Adressierung zum Einsatz. Beispielproblematik: MAC-Sperrung falsch eingerichtet. - Layer 3: Vermittlungsschicht. Hier kommen IP-Adressen zum Einsatz. Beispielproblematik: Route fehlt. - Layer 4: Transportschicht. Hier kommen die Portnummern von TCP und UDP zum Einsatz. Beispielproblematik: Aufgrund einer übereifrigen Firewall kommt eine TCP-Verbindung nicht zustande. - Layer 5 bis 7 (Grenzen fließend): Hier kommen Protokolle wie HTTP (für Webseiten, unverschlüsselt) oder HTTPS (für Webseiten, verschlüsselt) oder SMTP (für Mailversand) oder IMAP (für Mailempfang) zum Einsatz. Beispielproblematik: Unterseite einer Website fehlt, Fehler 404. ARP: - MAC-Adressen sehen so aus: z.B. 1a:71:6e:43:43:c2 (d.h. sechs Bytes, geschrieben in hex, mit Doppelpunkten getrennt) - Die eigene MAC-Adresse kann mit dem Befehl "ip link" nachgesehen werden. - Ab Werk hat jede Netzwerkkarte eine weltweit eindeutige MAC-Adresse. - Die erste Hälfte der MAC-Adresse (die ersten drei Bytes) identifizieren eindeutig den Hersteller. Die zweite Hälfte vergibt der Hersteller wie er möchte. - MAC-Adressen kommen nur innerhalb eines lokalen Netzes zum Einsatz. Im Internet haben sie keine Bedeutung. - MAC-Adressen dienen innerhalb des lokalen Netzes zur Adressierung (unabhängig von IP-Adressen, die lokale Computer auch haben können). - Wenn ein Computer die MAC-Adresse eines Kommunikationspartners erfahren möchte, sendet er eine ARP-Anfrage ins lokale Netzwerk (meist als Broadcast-Paket, also gerichtet an alle Geräte im Netzwerk). Wenn sich der Kommunikationspartner angesprochen fühlt, wird er mit einer ARP-Antwort antworten, die seine eigene MAC-Adresse enthält. - ARP-Pakete können nach Belieben gefälscht werden, es gibt keinerlei Sicherheitsüberprüfung (Linux-Befehl arpspoof). - Mit dem Befehl "arp-scan 192.168.0.0/24" kann nachgesehen werden, welche Computer im lokalen Netzwerk angeschlossen sind. Der eigene Computer fehlt in der Aufzählung. Dieser Befehl funktioniert so, indem er nacheinander eine ARP-Anfrage für jede denkbare IP-Adresse stellt. Routing: - Zwischen den wenigsten Computern bestehen Direktverbindungen. Etwa besteht keine Direktverbindung zwischen Ingos Laptop und dem YouTube-Hauptquartier. - Stattdessen werden Netzwerkpakete über zahlreiche Zwischenstationen geleitet. Diese Zwischenstationen heißen "Router" oder "Gateways" oder "Hops". - Router, die ein lokales LAN mit dem Internet verbinden (wie jeder 08/15 DSL-Router in Privatwohnungen), betreiben NATting: Dabei leiten die Router die Pakete absichtlich leicht verfremdet weiter, nämlich sie ersetzen die Absender-IP-Adresse (z.B. 192.168.178.110) durch ihre eigene öffentliche IP-Adresse (z.B. 80.81.7.3). Aus Sicht von Internetservern stammen also alle IP-Pakete der Privatwohnung von derselben öffentlichen IP-Adresse ab, obwohl sie in Wahrheit von verschiedenen Geräten innerhalb des LANs versendet wurden. (NAT = Network Address Translation) - Mit den Linux-Befehlen traceroute, tracepath und mtr lässt sich die gesamte Routing-Kette zum Ziel nachvollziehen. ICMP: - Zur Netzwerkdiagnose kommen oft Ping-Pakete zum Einsatz. Dabei schickt man ein Ping-Paket an einen anderen Computer, der dadurch aufgefordert wird, mit einem Pong-Paket zu antworten. - Ping- und Pong-Pakete gehören zur Gattung der ICMP-Pakete. DNS: - DNS ist die Technologie, die zu Domainnamen (wie mischok.de) die zugehörige IP-Adressen bestimmt (wie 198.202.211.1). Fachausdruck: Der Domainname wird "aufgelöst" zu einer IP-Adresse (engl. resolve). - DNS ist dezentral aber hierarchisch aufgebaut. Jeder autoritative DNS-Server ist für eine bestimmte Zone zuständig. Zum Beispiel: - Die circa 13 sog. Root-Nameserver sind für die Zone "." zuständig. Diese Nameserver kennen die IP-Adressen der DeNIC, sowie die IP-Adressen der Nameserver für ch. und für at. und für com. usw. Aber diese Nameserver kennen nicht die IP-Adressen der für mischok.de. zuständigen Nameserver. - Die DeNIC, eine eingetragene Genossenschaft, ist für die Zone "de." zuständig. Die DeNIC bestimmt, welche de-Domains es gibt. Die DeNIC-Server wissen NICHT, was die IP-Adresse von gitlab.mischok.de ist. - Die Nameserver (eines Dienstleisters von) Mischok sind für die Zone "mischok.de." zuständig. Diese Nameserver kennen die IP-Adresse von "www.mischok.de." und von "gitlab.mischok.de.". - Unter Linux kann man den zu verwendenden DNS-Server in der Datei /etc/resolv.conf einstellen. - Ein beliebter DNS-Server ist 8.8.8.8 (von Google betrieben). Ein anderer beliebter ist 1.1.1.1 (von Cloudflare betrieben). Am beliebtesten ist der jeweilige Heimrouter (mit einer IP-Adresse wie z.B. 192.168.0.1). Bei diesen dreien handelt es sich NICHT um autoritative DNS-Server, die für irgendeine Zone zuständig wären, sondern sie leiten DNS-Anfragen nur entsprechend weiter. - Mit folgenden Linux-Befehlen kann man die DNS-Auflösung prüfen: 1. ping (ist aber dafür nicht gedacht) 2. host 3. dig - Das DNS-System unterstützt verschiedene Recordtypen: - A: IPv4-Adresse - MX: Domainname des zuständigen Mailservers - NS: Domainname des zuständigen autoritativen DNS-Servers - TXT: verschiedene Einsatzmöglichkeiten, u.a. kann dort die sog. SPF-Information hinterlegt werden (sender policy framework), die angibt, welche Server berechtigt sind, Mails im Namen der Domain zu versenden - Die IHK begeistert sich für die folgenden zwei Fachbegriffe: - iterative Namensauflösung: Das ist die Bezeichnung für das schrittweise Abklappern der jeweils zuständigen autoritativen DNS-Server, beginnend bei den Root-Nameservern - rekursive Namensauflösung: Hier wird ein DNS-Server wie 8.8.8.8 befragt und gebeten, eine Endantwort zu ermitteln und diese zu übermitteln VPN: - Virtual Private Network - Häufig verstandenes Ziel von VPNs: Filme und Serien schauen, die im eigenen Land nicht verfügbar sind - Eigentliche Aufgabe von VPNs: Herstellung einer verschlüsselten und authentifizierten Ende-zu-Ende-Verbindung über das unvertrauliche Internet, so, als ob es eine direkte Kabelverbindung gäbe. "Internet als Kabel missbrauchen" - Fast alle VPNs setzen für den Verbindungsaufbau auf asymmetrische Verschlüsselung: Jeder Kommunikationspartner hat einen privaten Schlüssel (der geheim bleiben muss, private key) und ein öffentliches Schloss (dass gerne verbreitet werden darf, public key). Wenn Alice an Bob etwas verschlüsseln möchte, nimmt sie dafür Bobs öffentliches Schloss. Wenn Bob die Nachricht entziffern möchte, nimmt er dafür seinen eigenen privaten Schlüssel. Privater Schlüssel und öffentliches Schloss bilden zusammen ein "Schlüsselpaar" (key pair). - (Symmetrische Verschlüsselung, bei der die Kommunikation über ein gemeinsam bekanntes geheimes Passwort gesichert wird, ist weiterhin extrem relevant. Festplattenverschlüsselung wird damit betrieben. Ein gutes symmetrisches Verschlüsselungsverfahren ist AES.) - Wireguard-Einrichtung auf dem Client (alles in sudo bash): 1. apt install wireguard 1½. mkdir /etc/wireguard 2. cd /etc/wireguard 3. wg genkey | tee privatekey | wg pubkey > publickey # Damit wird ein Schlüsselpaar erzeugt 4. Mit nano oder gedit oder sonstwie die Konfigurationsdatei /etc/wireguard/wg0.conf anlegen, mit folgendem Inhalt: [Interface] PrivateKey = EIGENER_PRIVATER_SCHLÜSSEL Address = 192.168.0.?/24 [Peer] PublicKey = aMj5/y9NmqfsQqLQ7sVF/WBkYXQpg3/E5hbj9dBxOBo= AllowedIPs = 0.0.0.0/0 Endpoint = 56.125.194.128:51820 5. systemctl start wg-quick@wg0 Plan für jetzt: 1. MAC 2. DNS (zur Umwandlung von Domainnamen wie mischok.de in IP-Adressen wie 198.202.211.1) 3. Linux-Befehlen zur Einrichtungen von Netzwerken Komplexeres Netzwerkeinrichtungsbeispiel: Zwei LANs 193.168.0.101/24 veth0 192.168.1.103/24 veth0 Host 1 -----+ +----- Host 3 | | Switch ---------- Router ---------- Switch | 192.168.0.1/24 br-lan1 | Host 2 -----+ 192.168.1.1/24 br-lan2 +----- Host 4 192.168.0.102/24 veth0 192.168.1.104/24 veth0 Linkes LAN: Rechtes LAN: 192.168.0.x 192.168.1.x 192.168.0.0/24 192.168.1.0/24 # Scrollen: Strg+a Escape, dann Pfeiltasten; wenn man fertig ist, dann Punkt. echo 1 > /proc/sys/net/ipv4/ip_forward Möglichkeiten für heute Nachmittag: 1. Weitere Übungen: - genau dieselbe noch mal (zwei LANs) - 3er-Routingkette - 4er-Routingkette 2. Experimente mit echten Kabeln 3. Experimente mit echten Funkwellen (aus Laptop Hotspot machen) 4. Übers Netzwerk Webseiten ausliefern 6. Einrichtung von Containern (vom Hauptsystem isolierte Mini-Computer) 7. VPNs