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

Neueste Artikel

  • SQL Funktionen in SQLite als BeanShell-Scripts

    Ich habe bereits hin und wieder über Erweiterungen der sQLshell berichtet, die bestimmte spezifische, proprietäre Features des jeweiligen DBMS in der sQLshell verfügbar machen.

    Weiterlesen...
  • Spieleengine IX

    Es gibt seit Ewigkeiten mal wieder Neues von meiner eigenen Spieleengine!

    Weiterlesen...
  • Neue Version plantumlinterfaceproxy napkin look

    Es gibt eine neue Version des Projektes plantumlinterfaceproxy - Codename napkin look.

    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.