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

  • OAuth und OTP

    16.02.2020

    Wie bereits beschrieben will ich mich demnächst näher mit OAuth befassen...

    Weiterlesen...

Neueste Artikel

  • Split von Filesets in Apache ANT

    Ich musste neulich darüber nachdenken, eine Parallelisierung für einen meiner ANT-Tasks in meinem Static Site Generator einzubauen.

    Weiterlesen
  • Ein Doclet zur Erzeugung von DocBook aus Javadoc

    Ich habe mich mit der Idee zu diesem Projekt Monate abgequält - hätte ich gewusst, was die eigentliche Implementierung für Qualen verursachen würde, hätte ich sie wahrscheinlich eingestampft.

    Weiterlesen
  • Motion JPEG Erzeugung aus Java heraus

    Da ich mich in den letzten Wochen wieder einmal mit Javas Sicherheitsmechanismen und dem Erzeugen von Animationen beschäftigt habe, habe ich den Entschluss gefasst, die bisher mittels JMF AVIs in dWb+ zu erstetzen - nur wodurch?

    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.