Projekt:VPN

Aus k4cg.org
Projekt:VPN
Betreuer*In noqqe
Jahr 2019
Läuft auf rumpl.k4cg.org
Status realisiert

Generelles

Wir haben ein VPN von einzelnen Maschinen zu unserem Server im Internet aufgebaut.

Dafür haben wir Wireguard benutzt und konfiguriert.

Das nutzen wir beispielsweise um Traffic von der CG auf unseren Server rumpl zu schicken mit Verschlüsselung und auch in die andere Richtung.

Topologie

+--------------------------------------------+
|                                            |
|                k4cg                        |
|                                            |
|   +-------+.2                              |
|   |  mqtt |                                |            .1
|   |       ++                   +---------+ |            +---------------+
|   +--------+                   |fritzbox|| |   internet |               |
|            +------------------>+        |-------------->+    rumpl      |
|   +--------+                   +---------+ |            |               |
|   |beehive++                               |            |    wireguard  |
|   |       |                                |            +---------------+
|   +-------+ .3                             |
|                                            |
|                                            |
+--------------------------------------------+

Networking

Wichtig!

Wir benutzen innerhalb des VPN Netzwerks 192.168.42.0/24

Bevor eine neue IP Addresse vergeben wird, bitte in Hosts nachsehen ob diese noch frei ist und wenn ja, eure neue IP auch gleich dort in der Tabelle hinterlegen!

Die Verbindungen anzeigen

Ich will hier jetzt keine Doku von Wireguard neu schreiben, aber im Grunde funktioniert das Setup so.

Alle funktionierenden Knoten sollten in dieser Ausgabe auf rumpl auftauchen:

14:48 root@rumpl:~ # wg
interface: wg0
  public key: fY0GiZHUVGSyuteTwrWTnBpURiGOwtJtP0p4gxBj8UY=
  private key: (hidden)
  listening port: 51666

peer: ClL2RRXutD3bYOjmpOvYjc2xCczG5gFM4lcD/s6/iFk=
  endpoint: 188.174.155.42:64210
  allowed ips: 192.168.42.3/32
  latest handshake: 42 seconds ago
  transfer: 695.90 MiB received, 72.74 MiB sent

peer: CiEyx82EHuibAc4AvB+BRbTVh9p1mDNIhBQ64mWUMA8=
  endpoint: 188.174.155.42:57130
  allowed ips: 192.168.42.2/32
  latest handshake: 47 seconds ago
  transfer: 20.53 MiB received, 10.10 MiB sent

Ist das nicht der Fall oder ohne Traffic, habt ihr was falsch gemacht.

Wie kann auch meine Gerät in das VPN?

1. Du brauchst auf dem Gerät/VM/IoT Device ein Wireguard

2. Eine Typische Client config eintippen. Der Peer eintrag kann kopiert werden. Ist die Rumpl.

[Interface]
ListenPort = 51666
PrivateKey = xxx

[Peer]
PublicKey = fY0GiZHUVGSyuteTwrWTnBpURiGOwtJtP0p4gxBj8UY=
AllowedIPs = 192.168.42.0/24
Endpoint = 213.95.154.150:51666

und in eure wg0.conf eingfügen, vorher wahrscheinlich noch ein wg genkey damit ihr ein Private/Public Keypair generiert.

3. Ihr braucht jemand der sich auf der rumpl einloggen kann und die nixos configuration.nix editieren darf. Schlüsselinhaber haben diesen Zugang meist.

 
  networking.wireguard.interfaces.wg0 = {
    ips = [ "192.168.42.1/24" ];
    privateKey = "xxx";
    listenPort = 51666;
    peers = [
      {
        allowedIPs = [ "192.168.42.2/32" ]; # mqtt.fritz.box
        publicKey = "CiEyx82EHuibAc4AvB+BRbTVh9p1mDNIhBQ64mWUMA8=";
      }
      {
        allowedIPs = [ "192.168.42.3/32" ]; # beehive.fritz.box
        publicKey = "ClL2RRXutD3bYOjmpOvYjc2xCczG5gFM4lcD/s6/iFk=";
      }
    ];
  };

Danach folgt noch ein

nixos-rebuild switch

4. VPN sollte funktionieren

Mittels

ssh rumpl
ping 192.168.42.X

kann das verifiziert werden.

Hilfe, mein Port kommt nicht durch

Das liegt daran, dass wir dedizierte Firewallregeln haben.

Im Moment darf man sich nur auf folgende Ports verbinden:

    networking.firewall.interfaces.wg0 = {
      allowedTCPPorts = [ 8086 ]; # InfluxDB
    };

Wenn weitere Dienste Ports brauchen ist dieses Array zu erweitern.

Public Key Liste

Host Interne IP VPN IP Public Key
rifleaccess 192.168.178.25 192.168.42.4 sdUar8cPJFz1mB+PLy/8bLVkfJ89E3E+zdPue9+uogc=