VPN im Netzwerklabor

vorhergehende Artikel in: Linux Docker Virtualisierung
04.12.2019

Im vorangegangenen Artikel beschrieb ich, wie man mit einigen Bash-Skripten die Grundlagen für ein relativ komplexes Netzwerklabor basierend auf LXC schaffen kann. Hier möchte ich darauf aufbauend beschreiben, wie man exemplarisch die damit erstellten Subnetze mittels VPNs verbinden kann.

Idee

Die Idee war, standortübergreifende Netzwerkszenarien in meinem bereits im vorangegangenen Artikel beschriebenen Netzwerklabor zu implementieren. Das dort beschriebene Szenario war ja, dass zwei Unternehmensstandorte jeweils ein eigenes privates Netzwerk aufspannen, das per Router mit einem übergeordneten Netzwerk verbunden ist (zum Beispiel das eines ISPs), welches wiederum Verbindung zum Internet hat.

Es soll nun darum gehen, die beiden getrennten Netzwerke (die Güte ihrer Verbindung zum ISP-Netz istüber ein "intelligentes" Netzwerkkabel steuerbar) durch ein Site-to-Site-VPN zu verbinden.

Tinc VPN

Ich habe mich für Tinc als VPN Lösung entschieden. Dazu müssen zunächst die Konfigurationen, Skripte und Host-Definitionen auf den einzelnen Knoten verteilt werden. Ich zeige hier im Folgenden kurz die entsprechenden Dateien für die Konfiguration des Routers von intnet1 an: Konfiguration tinc.conf

Name = intnet1
ConnectTo = intnet2

Host hosts/intnet1

Address = 10.100.0.1
Subnet = 172.16.0.1/32
Subnet = 10.100.1.0/24
-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----

Host hosts/intnet2

Address = 10.100.0.2
Subnet = 172.16.0.2/32
Subnet = 10.100.2.0/24

-----BEGIN RSA PUBLIC KEY----- ... -----END RSA PUBLIC KEY-----

Skript tinc.up

#!/bin/bash

ip link set $INTERFACE up ip addr add 172.16.0.1/24 dev $INTERFACE

ip route add 10.100.1.0/24 dev $INTERFACE # intnet1 ip route add 10.100.2.0/24 dev $INTERFACE # intnet2

Damit funktionierte aber das VPN leider noch nicht, da es das benötigte Device innerhalb meiner LXC-Container nicht gab.

LXC-Spezifika

Dafür mussten spezielle Vorbereitungen an den LXC-Containern vorgenommen werden - ich zeige diese Vorbereitungen wiederum exemplarisch an router1 für intnet1: Konfiguration /var/lib/lxc/router1/config

...
lxc.autodev = 1
lxc.hook.autodev = /var/lib/lxc/router1/autodev
lxc.pty.max = 1024

lxc.cgroup.devices.allow = c 10:200 rwm

Die in der Konfiguration referenzierte Datei /var/lib/lxc/router1/autodev

#!/bin/bash

cd ${LXC_ROOTFS_MOUNT}/dev mkdir net mknod net/tun c 10 200 chmod 0666 net/tun

Damit konnte ich den VPN-Tunnel aufbauen und per IP-Adresse auf Rechner im jeweils anderen Subnetz zugreifen.

DNS

Eigentlich war aber das Fernziel, per DNS auf die Rechner im eigenen Standort und im entfernten Standort zugreifen zu können. Dazu musste die Konfiguration des DNSMasq-Dienstes /etc/dnsmasq.conf auf beiden Routern angepasst werden. Zunächst musste ein weiteres Interface hinzugefügt werden (Beispiele aus der Konfiguration von router2 in intnet2:

interface=firma

Anschließend musste noch der Nameserver für die jeweils andere Domain bekannt gemacht werden:

server=/intnet1.lab/172.16.0.1

Ich habe die Quellen, aus denen ich diese Informationen zusammengetragen habe unten als Link-Sammlung angehängt

Links

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Precision Time Protocol

    15.10.2021

    Durch meinen Neffen wurde ich neulich auf ein Video im Internet aufmerksam gemacht, aus dem ich von der Existenz des Protokolls PTP oder Precision Time Protocol erfuhr. Hier einige Gedanken dazu

    Weiterlesen

Neueste Artikel

  • Präsentation zum Thema: Certificate and Signature Use Cases

    Eine Präsentation, die einige der Gesichtspunkte beleuchtet, die man beachten sollte, wenn man sich für elektronische Signaturen und Zertifikate in der eigenen Anwendung entscheidet. Weiterhin werden Möglichkeiten zur Benutzung aufgezeigt, die etwas weiter vom Mainstream entfernt sind.

    Weiterlesen
  • LinkCollections 2026 XI

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2026 folgt hier gleich die nächste:

    Weiterlesen
  • HexInspector Komponente in Java

    Als ich diese Lösung zur Darstellunbg und Analyse von beliebigen strukturierten Daten fand (das Beispiel erledigt das für ASN.1 kodierte Informationen), fasste ich den Entschluss, dass ich eine entsprechende Komponente in Java realisieren wollte.

    Weiterlesen

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.