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 Github Repositories Gitlab Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Certstream, InfluxDB, Grafana und Netflix

    16.04.2019

    Nachdem ich vor kurzem über mein erstes Spielen mit dem certstream berichtete, habe ich weitere Experimente gemacht und die Daten zur besseren Auswertung in eine InfluxDB gepackt, um sie mit Grafana untersuchen zu können.

    Weiterlesen...

Neueste Artikel

  • Die sQLshell ist nun cloudnative!

    Die sQLshell hat eine weitere Integration erfahren - obwohl ich eigentlich selber nicht viel dazu tun musste: Es existiert ein Projekt/Produkt namens steampipe, dessen Slogan ist select * from cloud; - Im Prinzip eine Wrapperschicht um diverse (laut Eigenwerbung mehr als 140) (cloud) data sources.

    Weiterlesen...
  • LinkCollections 2024 III

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

    Weiterlesen...
  • Funktionen mit mehreren Rückgabewerten in Java

    Da ich seit nunmehr einem Jahr bei meinem neeun Arbeitgeber beschäftigt und damit seit ungefähr derselben Zeit für Geld mit Python arbeite, haben sich gewisse Antipathien gegenüber Python vertieft (ich kann mit typlosen Sprachen einfach nicht umgehen) - aber auch einige meiner Gründe, Python zu lieben sind ebenso stärker geworden. Einer davon ist der Fakt, dass eine Methode in Python mehr als einen Wert zurückgeben kann.

    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, muß 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 GitHub-Repositories findet man hier - meine öffentlichen GitLab-Repositories finden sich dagegen hier.