Freitag, 29. Mai 2020

IT-Fachartikel: Wireguard VPN mit Dual Tunnel IPv4 & IPv6

Da der Hausbau schon lange beendet ist und ich keinen zweiten Blog eröffnen will, werde ich hier nun bei Gelegenheit Fachartikel erstellen.

Seit Jahren verwende ich nun schon Wireguard VPN und bin begeistert.

Ich habe sehr lange versucht einen VPN Tunnel zu bauen der dual läuft, also per IPv4 & IPv6 erreichbar ist und auch im Tunnel beides überträgt. Letzteres habe ich lange nicht geschafft.

Diese Anleitung richtet sich an Wireguard Nutzer, die bereits einen IPv4 Tunnel betreiben und sich grundsätzlich auskennen mit Wireguard, Pi-Hole und Netzwerkeinstellungen.

Die erste Einrichtung habe ich damals nach dieser Anleitung durchgeführt:
Link Github / Link Github 2
Mit dem Script aus Link 2 kann man schnell viele Clienten anlegen inkl. QR-Codes, anstatt alle Schlüsselpaare manuell zu erstellen.

Ich verwende eine FritzBox welche jedem Netzwerkgerät neben der öffentlichen auch eine private IPv6 zuteilt, das muss man jedoch einstellen unter: Heimnetz - Netzwerk - Netzwerkeinstellungen - IPv6-Konfiguration:
gelber Kasten











(Als loker DNS Server trägt man später unten die IPv6 Adresse des Raspberry ein, um Pi-Hole für IPv4 & IPv6 zu nutzen.)

So bekommt jedes IPv6 fähige Netzwerkgerät mindestens 3 Adresse:
1. öffentlich, beginnt mit 2003: (bei der Telekom, Providerabhängig)
2. privat, beginnt mit fd00: (ich habe mich für den Prävix fd00:aaaa: entschieden)
3. link lokal, beginnt mit fe80: (wird sich immer selber von jedem Gerät zugewiesen)
Siehe auch Bereiche im Link: Erklärung

Als erstes öffnet man  /etc/dhcpcd.conf und stellt um auf eine feste, aus der MAC-Adresse generierte IPv6 (oberer Pfeil)













wenn man diese hat (neu starten, "ip a"), trägt man sie ein (unterer gelber Pfeil).

Die IPv4 Adresse habt ihr wahrscheinlich schon fest vergeben, wenn ihr Pi-Hole bereits nutzt, genauso wie Router & DNS. (DNS 127.0.0.1 bedeutet dass der Raspberry selber der DNS Server ist, das stellt PiHole bei der Konfiguration so ein).

Als nächstes kann man in /etc/sysctl.conf  IPv6 Forwarding aktivieren (langer gelber Pfeil), IPv4 Forwarding müsste schon aktiviert sein wenn man Wireguard mit IPv4 nutzt (kurzer gelber Pfeil):


 










Nun kann man die wg0.config anpassen indem man sie mit IPv6 Adressen bestückt & und die Firewall "iptables6" anpasst (alles gelb markiert):










Die IP Adressen für den Tunnel sind von mir frei gewählt aus dem privaten Bereich (192.168.99.x & fd08:x), wichtig ist, dass sie aus einem anderen Bereich sind als die Netze, die ihr miteinander verbindet (FritzBox klassisch 192.168.178.x & fd00:x)

Wireguard neu starten (sudo wg-quick down wg0 & sudo wg-quick up wg0) und schauen ob es keine Fehlermeldung gibt.

Abschließend die Portweiterleitung bzw. Öffnung (51820 UDP) in der FritzBox für IPv4 & IPv6 aktivieren, darauf achten dass die richtige IPv6 Interface-ID eingetragen ist ! 














Pi-Hole müsst ihr ggf. noch mal neu konfigurieren mit "pihole -r".
Als letztes die Konfig auf den Clienten anpassen, hier ein Beispiel:












 
Man kann zwei identische Profile anlegen*:
1. IPv4 - Endpunkt z.B. xy.myfritz.net (man wird per IPv4 verbunden)
2. IPv6 - Endpunkt  z.B. xy.dynv6.net (man wird per IPv6 verbunden)
Die restliche Konfig bleibt gleich.
Man kann so z.B. in einem reinen IPv4 Netz (wie im Moment bei O2) durch den Wireguard Tunnel das Internet per IPv4 und IPv6 benutzen inkl. Pi-Hole.

* gilt natürlich nur wenn man Zuhause eine echte IPv4 Adresse bekommt

-------------------------------------------------------------------------------------------

Man kann verschiedene Clienten Profile anlegen und diese anschließend als QR-Code bereit stellen zum schnellen abscannen per Handy/Tablet.
1. Profile manuell in Ordnern anlegen z.B. in Dokumente/Profil/profil.config
2.  "sudo apt-get install qrencode"
3. z.B. cd /home/pi/Documents/Handy1
4. qrencode -t ansiutf8 < handy1_IPv4.conf   => QR Code wird in der Konsole angezeigt (zum testen)
5. qrencode -o IPv4.png < handy1_IPv4.conf => QR Code wird als .png gespeichert


Samstag, 16. Mai 2020

Fachartikel: SMA Energy Meter / Home Manager 2.0 Messwerte auslesen

[2021: Bitte den Node-Red Flow nehmen]

Seit dem letzten Firmwareupdate des SMA Home Manager´s funktionieren die Auslese-Programme nicht mehr korrekt*, da SMA das Datagramm geändert hat, Erklärung siehe: Link 

Da die Autoren kein Update ihrer Programme liefern, habe ich mich auf die Suche nach einer Möglichkeit begeben die Live Werte auszulesen und bin auf folgendes Projekt gestoßen: Link

Die Anleitung ist nicht ganz korrekt bzw. für nicht Linux-Profis schwierig umzusetzen.
Daher habe ich die Anleitung sowie ein paar Fehler im Skript korrigiert.

Das ganze läuft im Shell auf Linux (bei mir auf dem Raspberry, außerdem getestet auf Ubuntu20) und sieht nachher so aus:

Die Werte werden jede Sekunde aktualisiert



















Nun zur korrigierten Anleitung (ich nutze Windows 10 Powershell):

(vorher sudo -i)

- apt install git (normalerweise schon vorhanden)
- apt install python3 cl-py-configparser
- mkdir /opt/smaemd/
- mkdir /etc/smaemd/
- cd /opt/smaemd/
- git clone https://github.com/datenschuft/SMA-EM.git
- cd /opt/smaemd/SMA-EM
- cp systemd-settings /etc/systemd/system/smaemd.service     


Konfig Datei erstellen:
- touch /etc/smaemd/config  
- nano /etc/smaemd/config


Inhalt von Github kopieren und eure Serien Nr. des EM eintragen und ipbind=0.0.0.0
(die Serien Nr. findet ihr z.B. im Sunny Portal unter Geräteübersicht)











Den Feature Teil könnt ihr weg lassen.

Mit Strg+O speichern & mit Strg+X beenden

- systemctl daemon-reload
- systemctl enable smaemd.service
- systemctl start smaemd.service


Nun kann das "Programm" schon getestet werden:

- python3 /opt/smaemd/SMA-EM/sma-em-measurement.py

beenden mit Strg+C und "exit" um vom root zum normalen user zu wechseln.

Leider ist das ganze auf englisch und ein paar Messwerte fehlerhaft.
Ich habe die beiden Dateien korrigiert [Update 8/2020]:
sma-em-measurement.py
speedwiredecoder.py

Die Dateien könnt ihr runterladen und z.B. ins Dokumente Verzeichnis kopieren.
Anschließend mit:

bei Ubuntu z.B.:
- sudo cp /home/user/Dokumente/speedwiredecoder.py /opt/smaemd/SMA-EM/speedwiredecoder.py
- sudo cp /home/user/Dokumente/sma-em-measurement.py /opt/smaemd/SMA-EM/sma-em-measurement.py  

bei Raspian 10 (Buster) z.B.:
- sudo cp /home/pi/Documents/speedwiredecoder.py /opt/smaemd/SMA-EM/speedwiredecoder.py
- sudo cp /home/pi/Documents/sma-em-measurement.py /opt/smaemd/SMA-EM/sma-em-measurement.py
 
die neuen Dateien über die Alten kopieren, anschließend wieder starten:
- sudo python3 /opt/smaemd/SMA-EM/sma-em-measurement.py 
nun solltet ihr die Werte korrekt angezeigt bekommen.

Das ganze kann man auch auf Android mit der App "Termux" nutzen.
Einfach mit "ssh pi@raspberrypi" einloggen und dann mit dem kleinen Pfeil nach oben zum letzten Befehl springen "python3 /..." und schon kann man durch´s Haus laufen und testen welches Gerät wieviel Leistung benötigt.