Kapitel 20

Virtueller Router

IN DIESEM KAPITEL

  • Verbindung zwischen dem virtuellen Netz und dem Internet
  • Selbstfindung mit DHCP
  • Namensauflösung

Wenn ein virtuelles internes Netzwerk Zugriff auf das reale Netzwerk und insbesondere auf das Internet benötigt, muss ein virtueller Router her, der vergleichbar dem Router Ihres Providers eine Brücke schlägt. Neben seiner Brückenfunktion soll er auch dafür sorgen, dass im internen Netzwerk die IP-Adressen automatisch verteilt werden und ein Namensdienst eingerichtet ist.

Anschlüsse des Routers

Ein Router steht zwischen dem lokalen Netzwerk und dem großen Internet. Entsprechend hat ein Router zwei Netzwerkadapter, die sehr unterschiedlich sind. Nach innen ist der Router im Allgemeinen der Boss, der angibt, wie alle zu heißen haben. Nach außen freut er sich, wenn er mitspielen darf.

Linux-Installation

Sie brauchen einen virtuellen Router, wenn Sie von einem internen Netzwerk aus ins Internet kommen wollen. Und dieses Kapitel stellt die Bauanleitung für einen solchen Router dar.

Da der Router immer in Verbindung mit anderen virtuellen Maschinen laufen soll, sollte er so wenig Ressourcen verbrauchen, wie es geht. Insbesondere der Hauptspeicher dürfte auf den meisten Gastgebersystemen knapp werden. Darum ist es eine gute Idee, dem Router den Desktop zu klauen. Wir verwenden dazu eine Debian-Installation. Alternativ könnten Sie auch ein Ubuntu-Server-System ohne grafische Oberfläche verwenden. Die Unterschiede dürften marginal sein.

Beschaffung des Images

Es gibt viele Möglichkeiten, an ein Debian-Installationsmedium zu kommen. Unter der folgenden URL finden Sie ein Installationsmedium:

https://www.debian.org/distrib/netinst

Dort klicken Sie unter der Überschrift »Kleine CDs oder USB-Sticks« auf den Link für den benötigten Prozessor. Das ist bei einem Intel-Prozessor die Bezeichnung AMD64. AMD hatte noch vor Intel eine 64-Bit breite Prozessorgeneration. Der Name blieb auch als Intel 64-Prozessoren auf den Markt brachte.

Anlegen der virtuellen Maschine

Sie starten VirtualBox und erstellen eine virtuelle Maschine für den Router:

  1. Aus dem Menü wählen Sie MASCHINE | NEU
  2. Als Name können Sie DebianRouter eingeben. Sie sehen dann schon, dass der Typ automatisch auf Linux umspringt.
  3. Als Hauptspeicher wird 1024 MB vorgeschlagen. Das kann so bleiben und später nachkonfiguriert werden. WEITER
  4. Im nächsten Dialog geht es um die Festplatte. Hier wählen Sie FESTPLATTE ERZEUGEN und dann ERZEUGEN.
  5. Ein neuer Dialog legt sich über den bisherigen. Im ersten Fenster bestätigen Sie VDI als Image. WEITER
  6. Im Folgedialog bestätigen Sie DYNAMISCH ALLOZIERT mit WEITER.
  7. Die Größe ist kritischer, weil sie später nicht mehr zu ändern ist.

Der Dialog verschwindet. Nun muss die Maschine mit dem Installationsmedium verbunden werden.

  1. Klicken Sie auf ÄNDERN. Es erscheint eine große Dialogbox.
  2. Wählen Sie MASSENSPEICHER auf der linken Seite.
  3. Auf der mittleren Spalte klicken Sie auf das CD-Symbol.
  4. Auf der rechten Seite klicken Sie auch auf das CD-Symbol (Siehe Abbildung 20.1).
  5. In dem Menü klicken Sie ABBILD AUSWÄHLEN und Sie können die heruntergeladene Image-Datei anwählen.
  6. Nun können Sie den Dialog mit OK beenden.

Wenn Sie nun STARTEN anklicken, wird die virtuelle Maschine booten. Da die virtuelle Festplatte zur Zeit noch leer ist, wird die virtuelle Maschine von ihrer virtuellen CD booten, der wir gerade das Installations-Image untergeschoben haben.

Abbildung 20.1: Auswahl des Installationsmediums

Installation von Debian auf der virtuellen Maschine

Es startet die Installation. Die nun folgende Liste der Schritte bis zur Erstellung der Installation ist lang. Es ist aber nicht so schlimm, weil Sie fast immer nur die Vorgabe bestätigen müssen. In einem Forum wurde geäußert, dass selbst ein Huhn Debian installieren könne, wenn man nur genügend Körner auf die -Taste legt. Das ist vielleicht dann doch etwas arg überzogen.

  1. Im ersten Menü wählen Sie GRAPHICAL INSTALL. Dazu muss das Gerät lediglich über Grafik und über ein Zeigergerät verfügen. Beides ist bei einer virtuellen Maschine auf jeden Fall vorhanden.
  2. Als Sprache verwenden Sie »German – Deutsch«. Drücken Sie oder klicken Sie auf CONTINUE.
  3. Der Standort wird auf »Deutschland« eingestellt, oder eben wo immer Sie gerade leben. Jetzt heißt CONTINUE schon WEITER.
  4. Sofern Ihre Tastatur ein deutsches Layout hat, sollten Sie »Deutsch« wählen. Nun arbeitet die Installationsroutine, meldet sich aber dann zurück.
  5. Den Rechnernamen können Sie sich natürlich aussuchen. Ich fand »router« ganz nett.
  6. Der Domain-Name kann leer bleiben.
  7. Es wird nach dem Root-Passwort gefragt. Ich habe hier der Einfachheit halber »root« verwendet. Sollte der Computer nur geringste Sicherheitsrelevanz haben, reicht das natürlich nicht.

    Wenn Sie kein Kennwort eingeben, wird es kein explizites root-Konto geben, sondern Debian verhält sich wie Ubuntu und Sie erreichen die administrativen Befehle per sudo über den ersten Benutzer.

  8. Der eigentliche Benutzer muss ein Konto bekommen. Es gilt bei Unixoiden wie Linux die strenge Regel, dass ein Administrationskonto niemals als Anwendungskonto verwendet werden darf.

    Hier habe ich als Benutzer linux mit dem Passwort linux eingesetzt. Auch dieses Passwort sollte man nur verwenden, wenn Sicherheitsaspekte überhaupt keine Rolle spielen.

  9. Bei der Partitionierung der Festplatte können wir die Vorgabe »Geführt – vollständige Platte verwenden« wählen.
  10. Im nächsten Dialog wird die Platte angezeigt und muss bestätigt werden.
  11. Im Folgebildschirm können Sie wieder die Vorgabe »Alles auf eine Partition« auswählen.
  12. Zum Abschluss bietet die Installation an, die Partitionierung zu beenden und die Änderungen zu übernehmen.
  13. Die Installation schlägt »Nein«, wenn es darum geht alle Partitionen auf die Festplatte zu schreiben. Natürlich muss es hier »Ja« heißen.
  14. Nun dauert es etwas, während Debian installiert wird.
  15. Im nächsten Dialog werden Sie gefragt, ob ein weiteres Medium eingelesen werden soll. Das war sinnvoll für Leute mit einem sehr schlechten Internetanschluss. In solchen Fällen konnte man einen kompletten Satz DVDs für die Debian-Installation kaufen. Das macht heute kaum noch jemand. Darum ist die Vorgabe »Nein« korrekt.
  16. Nun wird der Paketmanager, also der Spiegelserver ausgewählt, von dem die Pakete heruntergeladen werden sollen. Dazu wählen Sie »Deutschland« aus.
  17. Sie können einen expliziten Anbieter aussuchen. Die Vorgabe deb.debian.org ist nicht verkehrt.
  18. Das Feld Proxy können Sie in der Regel leer lassen.
  19. Debian bittet um Unterstützung, indem Sie Statistiken weterleiten. Hier können Sie es bei »Nein« belassen, zumal die Anwendung in einer virtuellen Maschine nicht wirklich typisch ist.
  20. Im Schritt der Softwareauswahl wählen Sie die Grundausstattung des Systems. Wir wollen in diesem Fall keine grafische Oberfläche, von denen Debian eine ganze Reihe anbietet. Stattdessen setzen Sie die Haken folgendermaßen:
    • Bei Debian desktop environment: Haken entfernen
    • Bei GNOME: Haken entfernen
    • Bei SSH-Server: Haken setzen. Das wird der Service-Eingang über das Netzwerk.
    • Bei Standard-Systemwerkzeuge: Haken belassen.
  21. Damit das Betriebssystem auch startet, benötigt es einen Bootmanager. Der heißt bei Linux Grub. Damit dieser aktiv wird, muss er auf dem primären Laufwerk installiert werden. Anders ist es nur beim Kaskadieren verschiedener Bootmanager. Sie wählen also »Ja«.
  22. Sie müssen im nächsten Dialog die Auswahl auf das Standardlaufwerk /dev/sda umstellen.
  23. Zu guter Letzt kommt noch eine Abschlussmeldung. Wenn Sie diese bestätigen, erfolgt ein Reboot.
  24. Nach dem Neustart sehen Sie einen schwarzen Bildschirm mit der Möglichkeit sich als Benutzer linux einloggen zu können.

    Um an Admistratorrechte zu gelangen, geben Sie su - ein, wenn Sie bei der Installation ein Root-Passwort vorgegeben haben.

    Sollten Sie kein Passwort für den Administrator eingegeben haben, geben Sie als Befehl sudo -s ein. Auch hier werden Sie nach einem Passwort gefragt. Hier ist es allerdings das des Benutzers, im Beispiel also linux.

  25. Um nun Debian herunterzufahren, geben Sie als Administrator den folgenden Befehl ein:

    # shutdown -h now

    Alternativ können Sie auch aus dem Menü die Kombination MASCHINE | AUSSCHALTEN PER ACPI wählen.

  26. Die Maschine fährt herunter. Das Fenster verschwindet.

Netzwerkeinstellungen in der VirtualBox

Als erstes müssen Sie die Netzwerkanschlüsse des Routers definieren. Dazu klicken Sie die Router-VM in VirtualBox mit der rechten Maustaste an, wählen ÄNDERN. Es erscheint eine große Dialogbox. Sie wählen den Punkt NETZWERK in der linken Spalte an. Dort finden Sie mehrere Adapter. Zwei davon wollen Sie einstellen.

  • Der erste Netzwerkadapter soll zum Internet führen. Dieser Adapter wird bei realen Routern vom Internet-Provider mit einer Adresse versehen. Auch bei unserem virtuellen Router wird vermutlich die Adresse von außen automatisch gestellt, nämlich von Ihrem realen Router. In der VirtualBox lassen Sie die Einstellung auf NAT.
  • Der zweite Anschluss soll das lokale Netzwerk verwalten, das mit dem Internet verbunden werden soll. Diese Adresse ist in der virtuellen Maschine normalerweise noch nicht aktiviert. Das sollten Sie ändern!

    1. Klicken Sie den Haken an, um den Adapter zu aktivieren.
    2. Wählen Sie bei dem Anschluss INTERNES NETZWERK.
    3. Als Name können Sie den Vorschlag intnet belassen, sofern Sie nicht mehrere Netzwerke anlegen wollen.

    Das Ergebnis sieht dann so aus wie in Abbildung 20.2.

    Abbildung 20.2: Innerer Netzwerkadapter der VirtualBox für den Router

Für die nächsten Schritte müssen Sie die virtuelle Maschine starten. Loggen Sie sich ein und wechseln Sie mit su - oder sudo -s zum Administrator.

Konfiguration der Adapter

Für die folgenden Einstellungen benötigen Sie die Bezeichner für die beiden Netzwerkadapter. Das ermittelt der Befehl ip a. Auf meiner virtuellen Maschine gab es folgende Adapter:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state ...
inet 127.0.0.1/8 scope host lo
...
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether 08:00:27:60:e8:3c brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic ...
...
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc ...
link/ether 08:00:27:bd:a6:cc brd ff:ff:ff:ff:ff:ff
...

Und damit sind die Namen der Netzwerkadapter auch schon ermittelt.

  • enp0s3 ist der über NAT beziehungsweise über die Netzwerkbrücke angeschlossene Adapter. Das ist leicht daran zu erkennen, dass er eine IP-Adresse zugewiesen bekommen hat.
  • enp0s8 ist der verbliebene Adapter für das interne Netzwerk. Er hat noch keine IP-Adresse. Damit er aus dem lokalen Netzwerk erreichbar ist, muss diese Adresse statisch festgelegt werden.

Statische Adresse festlegen

Das interne Netzwerk sollte ein privates Netzwerk sein, beispielsweise 192.168.1.0/24. Für den Router wird gern die Host-IP-Adresse 1 verwendet, also in diesem Fall 192.168.1.1. Diese muss dann statisch festgelegt werden. Hier gibt es derzeit zwei Methoden. Debian verwendet wie die meisten Linux-Derivate die Deklaration im Verzeichnis /etc/network, Ubuntu und dementsprechend Linux Mint verwenden /etc/netplan. Schauen wir uns beides an:

Festlegen der Adressen über network/interfaces

Wenn Sie der Anleitung gefolgt sind und Debian installiert haben, werden Sie die klassische Art der Zuweisung der Netzwerkadressen in der Datei /etc/network/interfaces konfigurieren.

auto lo
iface lo inet loopback

allow-hotplug enp0s3
iface enp0s3 inet dhcp

allow-hotplug enp0s8
iface enp0s8 inet static
address 192.168.1.1
netmask 255.255.255.0

Hiermit ist definiert, dass das Interface enp0s3 per DHCP automatisch konfiguriert wird. Das Interface enp0s8 wird dagegen fest auf die Adresse 192.168.1.1 mit der Subnetmask 255.255.255.0 festgelegt.

Das steht nun so erst einmal in einer Datei. Damit diese Einstellung gültig wird, starten Sie die Netzwerkkonfiguration durch den folgenden Befehl neu:

# systemctl restart networking

Ausführlichere Details finden Sie in Kapitel 8 oder unter der URL:

http://willemer.de/informatik/net/interfaces.htm

Festlegen der Adressen über netplan

Sollten Sie eine Ubuntu-Variante verwenden, wird dort seit einigen Jahren Netplan eingesetzt. Im Verzeichnis /etc/netplan existiert eine Datei für die Konfiguration der Netzwerkadapter. Auf meinem System heißt sie 1-network-manager-all.yaml. Diese Datei müssen Sie bearbeiten. Die ersten drei Zeilen dürften bei Ihnen gleich aussehen. Die restlichen Zeilen sollten Sie anpassen. Prüfen Sie dabei, ob die Adapterbezeichnung enp0s8 bei Ihnen identisch ist, ansonsten passen Sie diese entsprechend an.

network:
version: 2
renderer: NetworkManager
ethernets:
enp0s8:
dhcp4: no
addresses:
- 192.168.1.1/24

Nach dieser Eingabe kann die Konfiguration sofort aktiv geschaltet werden.

# netplan apply

Ein erneuter Aufruf von ip a sollte enp0s3 immer noch auf der bisherigen IP-Adresse stehen, aber für enp0s8 nun die Adresse 192.168.1.1 anzeigen.

Nähere Informationen finden Sie in Kapitel 8 oder unter der URL:

http://willemer.de/informatik/srvlinux/netplan.htm

DHCP: Clients automatisch konfigurieren

Die angeschlossenen Computer sollen sich idealerweise selbst konfigurieren. Um ins Internet zu gelangen, müssen sie eine IP-Adresse bekommen, eine Gateway-Adresse und einen DNS-Server. Das ist ein Betätigungsfeld für einen DHCP-Server, den Sie in Kapitel 8 näher kennenlernen können. Sie installieren ihn mit dem folgenden Befehl:

# apt install isc-dhcp-server

Nach der Installation müssen Sie die Konfigurationsdatei bearbeiten. Kopieren Sie das Original, und dann rufen Sie den Editor auf:

# vi /etc/dhcp/dhcpd.conf

Da Sie das Original ja kopiert haben, können Sie den kompletten Inhalt durch folgende Zeilen ersetzen:

option domain-name-servers 192.168.1.1;
default-lease-time 600;
max-lease-time 7200;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
}

Das reicht schon, um den meisten Ansprüchen an einen DHCP-Server zu genügen.

  • In der ersten Zeile wird die Adresse des Routers als DNS-Server angegeben. Dazu muss dann natürlich auch ein DNS-Server installiert werden, der mindestens ein Caching realisiert. Wir werden uns nachher darum kümmern.
  • Die Lease-Zeiten sind von geringerer Bedeutung. Es ist die Zeitspanne, nach der sich ein Client um eine neue Adresse bemühen soll.
  • Mit authoritative legen Sie fest, dass dieser DHCP-Server der einzige im Netzwerk ist.
  • Dann wird das Subnetzwerk 192.168.1.0 geöffnet. Darin werden die Hostnummern von 100 bis 200 verteilt und der Host 1 als Gateway angegeben.

Nachdem die Konfiguration in der Datei eingetragen ist, starten Sie den DHCP-Server. Normalerweise müssten Sie darauf achten, ob nicht versehentlich ein weiterer DHCP-Server in Form eines Routers im Netzwerk aktiv ist. Hier ist der Vorteil eines virtuellen Netzwerks. Hier kann niemand versehentlich ein Gerät anschließen.

# systemctl start isc-dhcp-server

Es kann sein, dass Sie böse Fehlermeldungen ernten. In einigen Fällen beklagt sich dann der DHCP-Server, dass er nicht für die die erste Schnittstelle eingerichtet ist. Sie erkennen das daran, dass er eine andere IP-Adresse nennt, typischerweise im 10er-Netzwerk. Damit würde er gern auch die NAT-Schnittstelle betreiben, aber das wollen wir nicht.

Zum Testen könnten Sie einen virtuellen Client einsetzen, dessen Netzwerkadapter Sie in der VirtualBox auf INTERNES NETZWERK umstellen. Wenn Sie ihn starten, sollte er nach einem DHCP-Server Ausschau halten und eine IP-Adresse aus dem Raum 192.168.1.0 erhalten, eine Default-Route und die Adresse des DNS-Servers.

Dazu prüfen Sie zunächst, ob der Befehl ip a eine Nummer aus dem angegeben Pool erhalten hat. Außerdem sollte ein ping auf den Router funktionieren.

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue ...
...
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
link/ether 08:00:27:4a:6c:b7 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope ...
...
$ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.828 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.886 ms
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.828/0.857/0.886/0.029 ms
alice@client:˜$

Wenn es nicht auf Anhieb geklappt hat, können Sie durch Trennen und Neuverbinden des Netzwerkadapters eine DHCP-Client-Anfrage erzwingen. So müssen Sie den Client nach einer Konfigurationsänderung des DHCP-Servers nicht jedes Mal neu starten.

Forwarding

Der Router hat nun zwei Adressen auf seinen Netzwerkadaptern. Allerdings wird der Router nicht von allein auf den Gedanken kommen, Pakete von einem Adapter auf den anderen zu übertragen. Dazu muss eine Weiterleitung eingeschaltet werden.

Das Durchreichen der Netzwerkpakete an eine andere Netzwerkschnittstelle nennt man Forwarding und ist das, was einen Router ausmacht. Er reicht die Pakete weiter. Damit Linux dies tut, wird im Verzeichnis /proc/sys/net/ipv4 die Pseudodatei ip_forward mit einer »1« gefüllt. Das erreichen Sie mit dem folgenden Befehl:

# echo "1"> /proc/sys/net/ipv4/ip_forward

Tatsächlich handelt es sich bei dem Verzeichnis /proc nicht um ein wirkliches Dateiverzeichnis, sondern um einen Zugang zur Systemkonfiguration, der sich aber weitgehend wie ein normales Dateiverzeichnis verhält.

Dieser Effekt überlebt allerdings keinen Reboot. Um diese Einstellung dauerhaft zu machen, muss der entsprechende Eintrag in der Datei /etc/sysctl.conf entkommentiert werden.

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Ob das Forwarding nach dem Booten noch da ist, können Sie durch folgenden Befehl feststellen. Er sollte eine 1 ausgeben. Wenn dort eine 0 erscheint, ist das Forwarding nicht aktiviert.

# cat /proc/sys/net/ipv4/ip_forward

Lokales Netzwerk mit dem Internet verbinden: NAT

Im nächsten Schritt wird der Paketfilter nftables verwendet, um ein NAT (Network Address Translation) aufzubauen. Wie eine NAT funktioniert, wird in Kapitel 8 beschrieben.

Das Paket nftables gehört bei einigen Distrubutionen bereits zur Standardausstattung. Ansonsten müssen Sie es installieren.

# apt install nftables

Sie können mit den Paketfilter durch direkte Befehle konfigurieren. Damit die Konfiguration auch nach einem Reboot erhalten bleibt, wird sie in der Datei /etc/nftables.conf gespeichert.

vi /etc/nftables.conf

Ein Paketfilter arbeitet mit Regeln, die beispielsweise als Firewall eingesetzt werden können. Dabei werden sogenannte Ketten (chain) gesetzt, die Pakete beim Eingang (input), beim Ausgang (output) und bei der Weiterleitung (forward) beschreiben.

Für diese Ketten sind schon ein paar Rahmen vorhanden, um Regeln für den Paketfilter zu erstellen. Diese werden wir allerdings nicht benötigen, können also entfernt werden. Sie können sie auch stehenlassen und die neue Kette postrouting daneben konfigurieren. Für unseren Router benötigen wir nur Masquerading. Dieses stellt die Basis für ein NAT dar.

#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain postrouting {
type nat hook postrouting priority 0;
policy accept;
oifname “enp0s3” ip saddr 192.168.1.0/24 masquerade
}
}

Die Regel besagt, dass die lokalen Adressen über den externen Netzwerkadapter gemappt werden.

Zu guter Letzt müssen die nftables auch aktiviert werden, damit sie nach dem Start aus den Hufen kommen.

# systemctl start nftables
# systemctl enable nftables

Spätestens nach einem Reboot des Routers sollte ein ping auf die Adresse 8.8.8.8 von jedem Client im internen Netzwerk möglich sein.

Den Namensdient DNS durchreichen

Die Verbindung zum Internet steht, allerdings kann der Client des lokalen Netzwerks noch keine Namen auflösen. Es fehlt also der Zugang zum DNS (siehe Kapitel 8).

Der Router kann die Namen auflösen, weil er über seinen im Internet stehenden Adapter von seinem Router mit dem Zugang zum DNS-Server versorgt wird.

Um die DNS Anfragen weiterzuleiten, müssen Sie auf dem Router einen DNS-Server einrichten. Das Thema wird im Kapitel 8 noch etwas ausführlicher behandelt. Um einen DNS-Server einzurichten, müssen Sie das Paket bind9, das den DNS-Server enthält, installieren.

# apt-get install bind9

Bei der Installation ist das Konfigurationsverzeichnis /etc/bind angelegt worden, in dem Sie bereits alle möglichen Dateien angelegt worden.

Diese Konfiguration genügt schon, um die DNS-Anfragen durchzureichen. Damit ist Ihr Router bereits voll funktionstüchtig. Natürlich können Sie auf dieser Basis für das lokale Netzwerk Namen an Router vergeben, wie es bereits in Kapitel 8 beschrieben wird.