Teams/Ab18it09/Netzwerk
Einführung
Auf dem folgenden Plan sieht man das Zielnetzwerk des Raumes 102.
In diesem Artikel wird die Konfiguration am Beispiel des Netzes 10.1.0.0 durchgeführt. Im folgenden werden folgende Begriffe verwendet:
- Öffentlicher Router -> 10.10.0.1
- Interner Router -> 10.1.0.1 (interne Schnittstelle) und 10.10.0.1 (externe Schnittstelle)
- Client -> 10.1.0.100
Konfiguration am internen Router
physikalische Konfiguration
Der interne Router sollte idealerweise zwei Netzwerkkarten besitzen und ein frisches Linux installiert haben. Wir haben Debian verwendet. (Anm.: Es kann auch mit nur einer Netzwerkkarte betrieben werden.) Die Verkabelung sollte wie auf dem Plan realisiert werden.
Vorbereitung
Zunächst sollte der NetworkManager deaktiviert werden, da wir nicht mit diesem arbeiten (dieser arbeitet vorwiegend auf grafischer Ebene).
# systemctl stop NetworkManager # systemctl disable NetworkManager
Nun ist auch kein DNS Server mehr eingestellt. Es sollte also der DNS zu dem DNS-Server im Netzwerk eingestellt werden. (Das ist natürlich nur sinnvoll, wenn der DNS bereits korrekt aufgesetzt und aktiv ist).
# rm /etc/resolv.conf
# echo "nameserver 10.0.0.1" > /etc/resolv.conf
Alternativ kann auch 8.8.8.8 eingestellt werden.
IP Forwarding aktivieren
Der interne Router soll die Pakete von einer Netzwerkkarte zur anderen weiterleiten. Dies ist das eigentliche "Routing" und verbindet zwei verschiedene Netze. In unserem Beispiel das Netz 10.1.0.1 (interne Schnittstelle) und 10.10.0.1 (externe Schnittstelle).
Diese Funktion nennt sich IP Forwarding. Sie befindet sich in der sysctl.conf.
# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
(Anm.:Diese Zeile befindet sich nun zweimal in der Datei. Allerdings ist die erste Variante auskommentiert und somit deaktiviert)
Nun die Konfiguration neu laden
# sysctl -p
Interfaces einstellen
Zunächst müssen wir die Bezeichnungen der Netzwerk-Hardware-Schnittstelle(n) bestimmen:
ip link show
Wir sehen neben der lo:Loopback Adresse die Bezeichnungen der Netzwerkkarten (z.B. enp0s6). Daneben steht UP oder DOWN. Dies zeigt i.d.R. an, ob ein Kabel eingesteckt ist und Verbindung zur Gegenstelle hat. Es kann also durch einfaches ein- und ausstecken des Kabels ermittelt werden, welche Netzwerkkarte welchen Namen trägt. Alternativ kann der Name auch über die MAC Adresse bestimmt werden.
In unserem Beispiel ist enp0s6 die externe Schnittstelle am internen Router und enp1s6 die interne Schnittstelle am internen Router.
Nun muss die Interfaces Datei eingestellt werden. Dabei müssen wir dem internen Router auf der internen Schnittstelle (enp1s6) eine IP des internen Netzes geben (in unserem Beispiel 10.1.0.1). Auf der externen Schnittstelle (enp0s6) benötigt er eine externe IP (10.10.1.1.). Außerdem muss auf der externen Schnittstelle das Gateway des öffentlichen Routers eingetragen werden, denn alle Pakete auf beiden Netzwerkkarten sollen hierhin weitergeleitet werden.
auto enp1s6 iface enp1s6 inet static address 10.1.0.1/16 auto enp0s6 iface enp0s6 inet static address 10.10.1.1/16 gateway 10.10.0.1
Anschließend die neue Konfiguration laden :
# systemctl restart networking
Öffentlichen Router einstellen
Gateway einrichten
Anschließend muss am Hauptrouter (welcher den Zugang zum ITW Netz liefert, d.h. der Gateway-Router, in unserem Beispiel 10.10.0.1) eine Route zum internen Netz des Routers gelegt werden. Zunächst müssen wir uns dafür an dem ITW-Router einloggen und eine Route einrichten. Das Login erfolgt einfach, indem man über den Browser die IP aufruft. Unter System kann nun ein Gateway hinzugefügt werden. Wir müssen dem öffentlichen Router sagen, dass der interne Router ein Gateway ist (das sich also dahinter ein Netz befindet). Dieses Gateway sollte in der Konfiguration eingetragen sein:
router01 LAN 10.10.1.1
Route einrichten
Nun muss eine Route mit diesem Gateway eingerichtet werden um dem öffentlichen Router zu sagen, welches Netz sich hinter diesem Gateway verbirgt. Diese Route sollte in der Konfiguration eingetragen sein :
10.1.0.0/16 router01 - 10.10.1.1 Route Netz 1
Natürlich müssen auch die anderen Routen zu den anderen Netzen eingetragen sein. Am Ende sollten diese Routen eingetragen sein :
10.1.0.0/16 router01 - 10.10.1.1 10.2.0.0/16 router02 - 10.10.2.1 10.3.0.0/16 router03 - 10.10.3.1
Routing auf gleicher Schnittstelle aktivieren
Nun müssen wir den Router anweisen, dass er verschiedene Netze auf einer Schnittstelle routet (sollte der öffentliche Router für jedes Netzwerk eine Netzwerkkarte besitzen ist dies nicht nötig). Dazu setzen wir unter Firewall/Einstellungen/Erweitert das Häkchen bei "Filterung statischer Routen > Umgehe Firewall Regeln für Verkehr auf der gleichen Schnittstelle"
Auch Subnetze ins Internet lassen
Zu guter letzt müssen wir dem Router sagen, dass er auch andere Subnetze ins Internet lassen soll. Das erreichen wir, indem wir unter Firewall/Regeln/LAN eine neue Regel hinzufügen, indem wir jegliche IP's (und nicht nur das LAN) zulassen. Diese Regel sollte am Ende so aussehen
IPv4 * * * * * GW_WAN *
Konfiguration testen
Die Konfigurationen können an den jeweiligen Punkten des Netzwerkes getestet werden. Folgende Befehle sind hilfreich :
ip addr show (oder kurz: ip a – IP-Adressen des Systems anzeigen) ip route show (oder kurz: ip r – IP-Routen des System anzeigen)
ping 10.10.0.1(Erreichbarkeit des öffentlichen Routers) ping 10.10.1.1 (Erreichbarkeit der externen Schnittstelle des internen Routers) ping 10.1.0.1 (Erreichbarkeit der internen Schnittstelle des internen Routers) ping 8.8.8.8 (Erreichbarkeit einer öffentlichen IP-Adresse) ping google.de (Namensauflösung) traceroute google.de (Tatsächliches Routing ins öffentliche Internet)
Debugging
Vorbereitung
Sollte ein Ping nicht funktionieren kann man durch das Überwachen des TCP-Traffics eine Fehlerdiagnose durchgeführt werden. Vorsicht : Auch eine SSH Verbindung läuft via TCP, deshalb kann dieses Debugging nicht mit einer SSH verwendet werden.
# apt install tcpdump
Nun kann unter Angabe des Gerätes der TCP-Traffic einer Netzwerkkarte mitgeschnitten werden. Wir haben am Router eine externe und eine interne Schnittstelle.
In diesem Beispiel
extern : enp0s6
intern : enp1s6
Tipps:
- Die Bezeichnungen der Netzwerkkarte(n) können mit
ip link show
angezeigt werden.) - tcpdump kann auch gegreppt werden, die Ausgabe dauert allerdings eine Weile; Beispiel tcpdump | grep ICMP
Debugging-Check
1. Auf dem Client PC einen Ping zum Gateway Router starten (ping 10.10.0.1). Kommt der ping dort an springe direkt zu Punkt 4.
2. Am Router tcpdump -i enp1s6
ausführen und schauen ob der Ping dort ankommt und eine Reply ankommt. Wenn ping dort nicht ankommt dann gibt es schon im internen Netz ohne Routing ein Problem. Eine mögliche Ursache ist ein falsches Gateway am Client, eine falsche Subnetzmaske, VLAN am Switch o.ä..
3. Am Router tcpdump -i enp0s6
ausführen und schauen ob ein Ping vom dort ankommt und eine Reply ankommt. Wenn ping dort nicht ankommt dann gibt es im Routing ein Problem (vermutlich liegt es dann an der Routingtabelle - siehe ip r). Wenn der ping dort ankommt, aber die Antwort nicht, so liegt er vermutlich an der Routingtabelle im Gateway router (10.10.0.1). Testweise können auch andere Rechner im 10.10 Netz angepingt werden.
4. Kommt der Ping an sollte ein neuer Ping auf 8.8.8.8 versucht werden (Google DNS). Klappt das nicht, muss es am öffentlichen Router liegen, der nicht aus dem Netz kommt. Kommt der ping an sollte ein Ping auf google.de versucht werden. Klappt das nicht sollten die DNS Einstellung überprüft werden.
Mögliche Fehlerquellen
Client kann internen Router nicht erreichen
- Der Switch verwendet VLAN und leitet nicht an die Ports weiter
Client kann öffentl.Router nicht erreichen
- Gateways im Router checken
- Routen im Router checken
- Firewall im Router checken
- Aktiviere in den FW-Einstellungen : Filterung statischer Routen , Umgehe Firewall Regeln für Verkehr auf der gleichen Schnittstelle
- Firewall Regeln für Subnetze aktivieren
Known-Issues
- Der DHCP Relay funktioniert nicht