Mittwoch, 24. April 2019

Windows Blackscreen Fix Hyper-V Subsystem mit AMD Ryzen und bcdedit

Da die Installation vom Hyper-V Subsystem auf meinem Ryzen 3550H zu einem Blackscreen beim Booten geführt hat, hab ich es im Safe Mode deinstalliert. Trotzdem wollte der Rechner nicht mehr booten. Dies kann daran liegen das die Bootoptionen verändert werden beim Installieren, hypervisorlaunchtype wird hier auf auto gestellt, welches bei meinem Prozessor das Booten verhindert hat.

Hier hilft vom Recovery / USB-Installer zu booten, ne cmd zu öffnen und mit 'bcdedit set hypervisorlaunchtype off' dies zu ändern. Das Gerät wird per GUID angegeben, damit auch die Festplatte und nicht der USB-Stick geändert wird. Was nicht gleich ersichtlich ist: wird keine GUID angezeigt muss die GUID mit "{default}" angegeben werden!

Danach wollte es zwar booten aber nur bis zum Bluescreen. Da es mit dem letzten Systemwiederherstelllungspunkt nicht geklappt hat, wurde ein älterer ausgewählt. Als das System wieder lief konnte auf den aktuellsten Systemwiederherstelllungspunkt  gewechselt werden. Da gleichzeitig zu neue Radeon GPU Treiber installiert wurden, könnte bei euch auch das bcdedit ohne Systemwiederherstellungspunkt reichen.

Eine Lösung das Hyper-V System mit dem Ryzen 3550H zum laufen zu bekommen, hab ich noch nicht gefunden. Falls ihr eine kennt, gerne in die Kommentare damit.

OpenVPN Server unter Windows 10 bei IPv6 Anschlüssen mit feste-ip.net als Portmapper und einer Fritzbox

Irgendwie fand ich im Internet nur sehr verteilt die Informationen, welche man für einen OpenVPN-Server mit Passwort und Zertikaten unter Windows benötigt. Skripte die wegen kleiner Fehler nicht liefen, auf den meisten Seiten nur ein oder zwei der drei Einstellungen die fürs Routing benötigt werden unter Windows 10, wenn der gesamte Internetverkehr der Clients durch den Server rausgehen soll. Auch das Passwortauth ist nicht gerade selbsterklärend unter Windows. Dazu kam, dass dies hinter einem Kabel Deutschland Anschluss mit DualStack-Lite (öffentliche IPv6-Adresse) laufen sollte und von IPv4 Anschlüssen, wie o2 Handys, erreichbar sein sollte, inkl. externem Provider der eingehende Verbindungen auf IPv6 umsetzt und den FritzBox Einstellungen.

Momentan läuft es, ich kann mich innerhalb des LAN zum Testen via IPv4, als auch von extern via Handy durch den IPv6/IPv4-Tunnel verbinden, und dies sowohl von Android als auch von Windows 10, so dass der gesamte Netzwerk- und Internetverkehr über den VPN-Server ins LAN bzw Internet geleitet wird. Aus Sicherheitsgründen wollte ich Zertifikate + Benutzername/Passwort benutzen, der Rest der Konfiguration ist jedoch noch nicht auf Sicherheit optimiert, hier gibt es noch einige Tipps und HowTos via Google.

Zum Inhalt:
OpenVPN Server unter Windows 10
Windows 10 Einstellungen
FritzBox Einstellungen
Feste-IP.net Einstellungen
Windows-Client
Android-Client

OpenVPN Server:

Installation: Download Ich hab die aktuellste 2.4.7 genutzt. Bei der Installation bitte die easy-rsa Sachen mitinstallieren, diese werden für die Zertifikatserzeugung später benötigt.

Beispiel Serverconfig:(C:\Programme\OpenVPN\config\server.ovpn)

port 11934
proto tcp
dev tun

ca "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\server.crt"
key "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\server.key"

dh "C:\\Program Files\\OpenVPN\\easy-rsa\\keys\\dh2048.pem"

server 10.0.0.0 255.255.255.0

ifconfig-pool-persist "C:\\Program Files\\OpenVPN\\log\\ipp.txt"

push "route 192.168.178.0 255.255.255.0"
#push "dhcp-option DNS 192.168.178.1"
push "dhcp-option DNS 8.8.8.8"
push "redirect-gateway def1"


keepalive 10 120

cipher AES-128-CBC

persist-key
persist-tun

status "C:\\Program Files\\OpenVPN\\log\\openvpn-status.log"

verb 3
script-security 4

auth-user-pass-verify "C:\\Program Files\\OpenVPN\\config\\auth.bat" via-env

Die Route 192.168.178.0 ist mein LAN.
redirect-gateway ist sinnvoll mit def1, dies sichert die bisherige Defaultroute.
script-security muss größer 2 sein, damit ans auth-script via 'via-env' auch das Passwort übergeben wird.
10.0.0.0 ist das Netz für die Clients.
Der Rest ist ziemlich Standard bis auf den Port und das Protokoll, bei UDP hatte ich Probleme mit der Erreichbarkeit vom Portmapper aus, aber vielleicht funktioniert es ja bei euch.

Auth-Skript angepasst: (die meisten im Internet hatten Probleme mit dem Dateinamen und Pfaden, C:\Programme\OpenVPN\config\auth.bat)

@echo off 
set n_user=%username%-%password%#;
echo %n_user% >c:\tmp\txt.txt
set n_user=%username% %password%
find /n "%n_user%" "C:\Programme\OpenVPN\config\users.txt" > "C:\Programme\OpenVPN\config\result.txt"
for /f "skip=1" %%a in ("C:\Programme\OpenVPN\config\result.txt") do set n=%%a
if "%n%"=="----------" exit 1
exit 0

find ist eine Zeile, erst bei for fängt die nächste an.
Zum Debuggen wird der Username und das Passwort in c:\tmp\txt.txt geloggt, falls ihr c:\tmp habt.
Wichtig ist vollständige Pfade in der for-Schleife zu nutzen mit Anführungszeichen, da es bei nur dem Dateinamen zu Fehlern kommen kann.

Users File: (C:\Programme\OpenVPN\config\users.txt)

david Musterpasswort
(ein Leerzeichen)

Zertifikate erzeugen:

(Common Name muss rein und für jedes Cert (alle Clients und Server) verschieden sein, sonst sagt er es gibt schon ein Cert und generiert nur csr und key, aber kein crt!)

Ne cmd mit Adminrechten starten und ab ins Verzeichnis easy-rsa im OpenVPN Programmverzeichnis, dann folgende Befehle:
init-config.bat
dann die vars.bat editieren, hier ein Beispiel:

@echo off
rem Edit this variable to point to
rem the openssl.cnf file included
rem with easy-rsa.

rem Automatically set PATH to openssl.exe
FOR /F "tokens=2*" %%a IN ('REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN"') DO set "PATH=%PATH%;%%b\bin"

rem Alternatively define the PATH to openssl.exe manually
rem set "PATH=%PATH%;C:\Program Files\OpenVPN\bin"
set OPENSSL_CONF=C:\Program Files\OpenVPN\easy-rsa\openssl-1.0.0.cnf

set HOME=%ProgramFiles%\OpenVPN\easy-rsa
set KEY_CONFIG=openssl-1.0.0.cnf

rem Edit this variable to point to
rem your soon-to-be-created key
rem directory.
rem
rem WARNING: clean-all will do
rem a rm -rf on this directory
rem so make sure you define
rem it correctly!
set KEY_DIR=keys

rem Increase this if you
rem are paranoid.  This will slow
rem down TLS negotiation performance
rem as well as the one-time DH parms
rem generation process.
set DH_KEY_SIZE=2048

rem Private key size
set KEY_SIZE=4096

rem These are the default values for fields
rem which will be placed in the certificate.
rem Change these to reflect your site.
rem Don't leave any of these parms blank.

set KEY_COUNTRY=DE
set KEY_PROVINCE=RLP
set KEY_CITY=Kaiserslautern
set KEY_ORG=KulschIT
set KEY_EMAIL=the1andonlydave@gmail.com
set KEY_CN=xxx.feste-ip.net
set KEY_NAME=xxx
set KEY_OU=Wohnzimmer
set PKCS11_MODULE_PATH=Modulepfaedchen
set PKCS11_PIN=9876

Hier beugt set OPENSSL_CONF=C:\Program Files\OpenVPN\easy-rsa\openssl-1.0.0.cnf
weiteren Problemen vor, ansonsten sollten noch der untere Block angepasst werden, nichts sollte leer sein.
nun:
vars
clean-all (löscht den keys ordner, falls ihr schonmal Zertifikate erzeugt habt!)
vars
build-ca
vars
build-dh (dauert auf nem aktuellen Rechner ca 2 Minuten)
vars
build-key-server server
dann beliebig oft:
vars 
build-key BENUTZERNAME


Danach noch den Dienst OpenVPNService starten und in den Autostart:



Windows 10 Routingeinstellungen:

Hier muss einmal der Dienst Routing und RAS gestartet werden und der Starttyp auf automatisch gestellt werden:


Dann muss in der Registry mit regedit.exe folgende Änderung gemacht werden: (benötigt nen Reboot)
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
IPEnableRouter=1


Und zuletzt muss die Freigabe der Internetverbindung am Adapter eingestellt werden:


Ausserdem muss geprüft werden ob der Adapter auch per IPv6 verbunden ist und Internet hat:


Und in der Firewall muss auch nochmal für TCP oder UDP eine Regel erstellt werden, je nachdem was ihr in eurer Config stehen habt. Ich nutze hier die Windows Standardfirewall:



FritzBox Einstellungen:

Prüfen ob ihr einen Internetzugang mit DS-Lite-Tunnel habt:


MyFritz Konto anlegen:




IPv6 Einstellungen bei mir: (alles Standard)


Bei lokalem DNSv6-Server ist der Standard eingestellt.

Freigaben:
Die erste Freigabe als MyFritz Freigabe anlegen wegen dem DNS-Namen. Diese MyFRITZ!-Adresse ohne den Prefix/Port müsst ihr dann bei feste-ip.net eintragen.

Weitere Freigaben gehen ganz normal, den DNS-Namen habt ihr ja nun.


PING6 reicht, die Firewall müsst ihr nicht weiter öffnen. Die Freigabe mit der LAN-IPv4 könnt ihr ignorieren.

Fertig:


MyFritz Weblogin zum Testen:


Feste-IP.net Einstellungen:

(Hier kann auch ein anderer Anbieter genutzt werden, aber feste-ip.net funktionierte in meinen Tests immer, hat ein Supportforum und liegt mit knapp unter 5€ (pro Jahr!) und der Möglichkeit es bis zu 50 Tage gratis zu testen, auch preislich sicher im Rahmen)

Übersicht:

Hier muss bei DNS-Name der Name im Format meinPC.meinefritzid.myfritz.net eingegeben werden, siehe obigen Screenshot vom MyFritz-Freigabe anlegen und bei Alias eine Wunschdomain, bei Port nur der VPN-Port.


Windows Client Config:

Hier kann der beim OpenVPN Installer enthaltene GUI-Client verwendet werden, ins Verzeichnis C:\Users\BENUTZERNAME\OpenVPN\config sollten:
ca.crt
BENUTZERNAME.crt
BENUTZERNAME.key
client.ovpn:
client

dev tun

proto tcp

remote 192.168.178.27 11934

resolv-retry infinite

nobind

persist-key
persist-tun

ca ca.crt
cert peter.crt
key peter.key

remote-cert-tls server

cipher AES-128-CBC

verb 3

auth-user-pass

Bei remote dann xxx.feste-ip.net eingeben, wenn der Zugriff von Extern erfolgen soll, ansonsten die LAN-IP. Wichtig ist noch das auth-user-pass damit auch nach dem Passwort gefragt wird.

Hier könnte man nun mit TLS-Keys und anderem Fortfahren, um das VPN weiter abzusichern. Auch könnte man bei den Benutzerzertifikaten Challengepasswörter benutzen, die beim Verbindungsaufbau benötigt werden, da wir jedoch Zertifikate+Benutzerpasswort benutzen, würde ich davon abraten. So kann man nämlich ein Zertifikat pro Laptop erzeugen und jeder Benutzer kann sich mit jedem Laptop und seinen Logindaten einwählen theoretisch.

Android Client Config:

Config folgt, App gibt im Google Play
Beachtet, wenn Android und Laptop das gleiche Benutzerzertifikat nutzen und auf Auto-Reconnect stehen werfen sie sich dauernd gegenseitig aus der VPN.

Dienstag, 23. April 2019

Duplikate in Spotify entfernen ohne Playlists / Account zu teilen

Da ich einige Playlists beim Aufräumen meines Spotify Accounts zusammengelegt hab, wobei Duplikate auf Wunsch eigentlich entfernt werden sollten, hatte ich irgendwann eine Playlist mit über 9000 Titeln.
Ziel war diese auszusortieren und dann aufs Smartphone herunterzuladen, um nicht irgendwelche Lieder nur aus einer von vielen Downloadplaylisten zu löschen. Immerhin hat mein aktuelles Smartphone wesentlich weniger Speicherplatz als das letzte. Anscheinend läuft der Desktopclient von Spotify aber beim Kopieren von großen Playlists (bei mir bis zu 1500 Titel pro Liste) ineinander nicht ganz sauber und hängt teilweise, was bei mir dazu geführt hat dass einige Tausend Titel bis zu 3 mal in der neuen Playlist waren, trotz dass ich immer "Duplikate nicht übernehmen" gewählt hatte, was mir beim Aufräumen der Playlist auffiel ("Hach das hab ich doch vor 5 Minuten erst gelöscht?!").

Eine kurze Recherche fand eine sehr einfache Lösung, bei der man seine Playlists auch nirgends freigeben muss oder seine Spotify Accountdaten teilen. Man drückt in der Playlist einfach strg+a, strg+c und fügt dies in Excel / Google Tabellen ein und filtert auf Duplikate. Ich habe Google Tabellen genutzt, hier geht dies mit dem Add-On Remove Duplicates von ablebits.com (Link zum Chrome Webstore ), auch in der Gratis-Testversion. Erstmal hab ich auf Duplikate gefiltert und diese entfernt. Da ich nun jede Menge Lücken in der Liste hatte hab ich nochmal auf Uniques (Einzigartige) gefiltert und diese in ein neues Tabellenblatt verschoben. Soweit ich sehen konnte blieb die Reihenfolge wie vorher.

Zurück zu Spotify (ich nutze hierzu den offiziellen Windows Desktop Client), neue Playlist erstellen, strg+v und fertig.