Edit the Bonestructure of Mixamo Rigs

Intro

this article describes how Mixamo rigged Characters can be Imported into Unity to work with VRchat.
It is based on this amazing Blogpost:
http://vrchat.wikia.com/wiki/Quick_Start_-_Mixamo_Avatar_Creation

The Unity Add-In is supposed to block you from uploading imporperly rigged Characters.
If however you fixed the Prefab after importing it, you can end up with your character not beeing animated.

How to change the Bone Structure

  1. Load the rigged Model into the Assets, set Rig to Humanoid and edit the bonestructure
  2. Then set the "Upper Chest" to None, "Chest" to Spine2, Apply and Done.
    Now you can import the Character and continue with the tutorial.

Cheers,
Ori


Knochenstruktur von Mixamo Rigs anpassen

Intro

in diesem Artikel geht es darum, wie über Mixamo erstellte Rigs in Unity importiert werden können.

Als Grundlage dient dieser sehr ausführliche Blogpst:
http://vrchat.wikia.com/wiki/Quick_Start_-_Mixamo_Avatar_Creation

Eigentlich sollte das Unity Add-In von VRchat euch daran hindern Charaktere hochzuladen, die Probleme mit der Knochenstruktur haben.
Wenn aber nach dem importieren die Fehler in der Knochenstruktur gefixt werden, könnt ihr euer Model hochladen und trotzdem werden keine Animationen abgespielt.

Folgendermaßen könnt Ihr die Knochen anpassen

  1. Model in die Assets laden, Rig auf Humanoid setzen und die Knochenstruktur anpassen
  2. Nun "Upper Chest" auf None setzen und "Chest" auf Spine2 setzen, Apply und Done.
    Anschließend kann der Character importiert und mit dem Tutorial fortgefahren werden.

Cheers,
Ori


Gelöschte Objekte wiederherstellen

Wenn auf einem Microsoft Server im Active Directory der Papierkorb nicht aktiviert wurde, was leider oft der Fall ist und Computer oder Benutzerkonten nicht deaktiviert und in eine ruhige OU gelegt werden sondern einfach gelöscht werden, ja dann kann es passieren, dass ihr die Objekte aus der versteckten OU "deleted Objects" wiederherstellen müsst.

Mit LDP verbinden

Als erstes startet Ihr die ldp.exe als Dom-Admin.

In LDP verbindet Ihr euch jetzt mit dem DC über Hostname oder IP.

Anschließend authentifizieren wir uns am DC.
Dazu geht Ihr auf Verbindung > Binden.

Wenn Ihr als Dom-Admin angemeldet seid, könnt ihr Single Sign On verwenden, ansonsten müsst Ihr Admin Credentials der Domäne angeben.

Jetzt müssen wir uns mit der Organisationseinheit (OU / Organisational Unit) mit dem schönen Namen "Deleted Objets" verbinden.
Dies machen wir über Ansicht > Struktur:

CN=Deleted Objects, DC="Domain", DC="Domainsuffix"

Jetzt wird auf der linken Seite zwar die OU angezeigt, in ihr sind aber noch keine gelöschten Objekte zu finden.
Um diese einzublenden, muss man die Steuerelemente anpassen.

Hier wählt man nun Return deleted Objects, checkt es ein und wieder aus (yay!) und schon werden die gelöschten Objekte auch angezeigt.

Gelöschte Objekte wiederherstellen

Anschließend muss man das Attribut "isDeleted" entfernen und "distinguishedName" durch "CN=OBJEKTWUNSCHNAME," gefolgt vom Kanonischen Namen des last known Parent.

 

Jetzt sollte das Objekt wieder in der OU auftauchen, allerdings deaktiviert.
Wenn es nicht angezeigt wird, einfach die anzeige mehrmals über F5 erneuern oder AD neu starten.

So einfach... danke Peter!

Cheers,
Ori


Mails landen nicht im richtigen Postausgang

Wenn in Exchange 2016 einem User das Recht "Senden Als" für ein Postfach gegeben, kann der User in Outlook in einer neuen Mail über "Von" Mails als dieser Absender verschicken.
Als dieses Postfach versendete Mails werden in seinen persönlichen "Gesendete Elemente" Ordner einsortiert und nicht in dem des Postfaches.

Das ist der von Microsoft so gewollte Default.

Wenn nun aber mehrere Nutzer mit diesem Postfach arbeiten, kann es nützlich sein,  gesendete Mails im "Gesendete Objekte" Ordner des Postfaches abzulegen.
So können andere Berechtigte sehen, was versendet wurde.

Exchange Einstellungen anpassen

Folgendes in die (Exchange Verwaltungs-) Powershell eingetragen werden:

Get-Mailbox <POSTFACH> | Set-Mailbox -MessageCopyForSendOnBehalfEnabled:$true -MessageCopyForSentAsEnabled:$true

Anschließend wird die gesendete Mail dem "Gesendet" Ordner des Benutzers und eine Kopie in dem "Gesendet" Ordner des Postfaches abgelegt.

Cheers,
Ori


RDP Zugang remote aktivieren

Wenn sich in einer Domäne ein domänenintegrierter Server oder Client nicht per RDP erreichen lässt kann folgender Trick helfen.
(Voraussetzung ist, dass der $Admin Share aktiv ist)

PS Tools herunterladen administrative CMD starten

Nun in das Verzeichnis von den pstools navigieren und psexec starten

psexec \\HOSTNAME cmd

Falls das Ziel nicht in einer oder der gleichen Domäne ist, nutzt folgende Syntax um Benutzername und Passwort anzugeben.

psexec \\HOSTNAME -u DOMÄNE\BENUTZER -p PASSWORT cmd

Jetzt hat man eine CMD mit Systemrechten auf dem Zielsystem und kann die RDP Ports öffnen.

netsh firewall set service remoteadmin enable
netsh firewall set service remotedesktop enable

Jetzt noch den Registry Key setzen der regelt, ob der Entfernte Rechner RDP aktiviert hat.

reg add "hklm\system\currentcontrolset\control\terminal server" /f /v fDenyTSConnections /t REG_DWORD /d 0

Dann klappts auch mit den Nachbarn.

 

Cheers,

Ori


Portforwardings Einrichten mit IP Tables

Dieser Artikel ist eine Anleitung wie man auf mit iptables eine Portweriterleitung einrichtet.

In unserem Fall wollen wir den Webserver einer virtuellen Maschine aus dem Internet erreichbar machen. Da wir im Regelfall nur eine oder wenige Öffentliche Adressen zur Verfügung haben bedienen wir uns dem sogenannten Natting oder Network Adress Translation.

Wir definieren, wie sich ein anfragender Client bei unserem Server zu melden hat, damit seine Datenpakete an den Webserver weitergeleitet werden. Das unter Linux hierfür verwendete Standardwerkzeug nennt sich iptables.

Iptables untersucht vom Server empfangene PI-Datenpakete und entscheidet anhand von einem komplexen Regelwerk, was mit Ihnen geschehen soll.

Bevor wir uns aber dem eigentlichem Thema widmen können, müssen wir dem Linux Kernel erstmal sagen, dass er IP Pakete weiterleiten darf. Hierzu öffnen wir die Datei  /etc/sysctl.conf und setzen folgenden Wert von 0 auf 1:

net.ipv4.ip_forward = 1

Anschließend starten wir den Dienst neu, damit die Änderung wirksam wird.

sudo service networking restart

 

 

NAT einrichten

Jeder Computer verfügt nach dem TCP/IP Standard über 6443 Ports auf denen er angesprochen werden kann.
Die ersten 1024 sind nach IANA standardisiert und sollten nicht für NAT genutzt werden.

Die Standartports für Webserver sind 80 (http) und 443 (https)

Wir legen nun fest, auf welchem Port sich ein anfragender Client melden soll, damit seine Pakete an den virtuellen Webserver weitergeleitet werden. In diesem Beispiel für http Port 2080 und Https Port 20443.

Damit haben wir folgende Informationen über das eingehende Datenpaket des Clients:

  • Die ziel IP Adresse ist die öffentliche IP Adresse unseres Servers: 73.97.113
  • Der Zielport ist der von uns definierte: 2080
  • Es wird ein bestimmtes Protokoll gesprochen sprechen: tcp

Außerdem wissen wir, dass das Datenpaket weitergeleitet werden sollen an:

  • Die IP Adresse des Webservers: 168.122.178
  • Den Port des Webservers: 443

In iptables nennen sich die Regelwerke, nach denen Datenpakete beurteilt werden „tables“.
Das von uns verwende Regelwek namens „nat“ besteht aus drei Teilen:

  • PREROUTING: Betrachtet eingehende Pakete
  • OUTPUT: Betrachtet selbst erzeugte Pakete
  • POSTROUTING: Betrachtet ausgehende Pakete

Wir schreiben nun eine Regel nach der ein Datenpaket nach dem table „nat“ behandelt werden soll wenn es:

  • Eingehend ist (PREROUTING)
  • Vom Protokolltyp TCP
  • Als Zieladresse (Destination) unsere öffentliche IP (213.73.97.133)
  • und als Ziel-Port (Destination Port) 2080 anspricht

Wenn diese Kriterien erfüllt sind, soll:

  • zu dem Regelwerk DNAT gesprungen (-j, jump) werden
  • welches die Zieladresse des Datenpakets gegen 168.122.178
  • und den Zielport gegen 80 austauscht

In der Syntax von iptables sieht das dann so aus:

sudo iptables -t nat -I PREROUTING -p tcp -d 213.73.97.133 --dport 2080 -j DNAT --to-destination 192.168.122.178:80

Komfortabler weise merkt sich der Server welche Anfragen er weitergeleitet hat und wir müssen keine Regeln für die Antworten des Webservers anlegen.

Das Selbe jetzt nochmal für Port 20443 auf 443:

sudo iptables -t nat -I PREROUTING -p tcp -d 213.73.97.133 --dport 20443 -j DNAT --to-destination 192.168.122.178:443

Wir können uns jetzt die Regeln nochmal ansehen.

sudo iptables -L -t nat --line-numbers

 

Firewallregel anlegen

Erstens: Firewallregeln werden von oben nach unten abgearbeitet.
Zeitens: Wenn eine Regel zutrifft erlaubt sie den Traffic entweder, oder sie verbietet Ihn.

Es gibt bei der Arbeitsweise von Firewalls zwei wichtige Fragen die je nach Hersteller unterschiedlich beantwortet werden:

  • Wie wird verfahren, wenn eine Regel zutrifft die den Traffic erlaubt?
    --> Bei iptables: Erlaube den Traffic, ignoriere NICHT nachfolgende DENY Regeln.
  • Wie wird verfahren, wenn keine Regel zutrifft?
    --> Bei iptables: Verbiete den Traffic

In iptables sind Firewallregeln in Chains unterteilt.

Je nachdem, welche Art von Datenverkehr betrachtet wird, greift eine andere Chain von Firewallregeln. Die für unsere Pakete greifende Chain ist FORWARD, da wir unsere Pakete weiterreichen (NAT).

Iptables verwirft wie bereits erwähnt den Traffic wenn keine Regel greift.
Eine gute Gedankenstütze ist es sich eine unsichtbare „deny any:any“ Regel unter dem Regelwerk vorzustellen.

Wir müssen also eine Firewallregel anlegen, die explizit erlaubt, dass Pakete von dem Eingehenden Interface (in meinem Fall enp2s0) an das Netz 192.168.122.0/24 weitergeleitet werden dürfen.

Damit der Traffic nicht von einer nachfolgenden Regel geblockt wird, springen wir mit -j (jump) direkt in das Regelwerk ACCEPT, wenn die Regel zutrifft.

sudo iptables -i enp2s0 -I FORWARD -m state -d 192.168.122.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT

Das können wir uns jetzt nochmal ansehen.

Cheers,
Ori

Vielen Dank an Fl@ und beegeees, die maßgeblich bei der Erstellung dieses Artikels mitgewirkt haben.


KVM: Einrichtung auf Ubuntu 16.04

Dieser Artikel ist eine Anleitung wie man auf einem Ubuntu Server:

  • KVM installiert
  • Einen virtuellen Ubuntu Server erstellt
  • Eine Portweiterleitung an die Viruelle Maschine einrichtet

Dieses Vorgehen ist sinnvoll um:

  • Den Host-Server (und die Gast-Server gegeneinander) abzusichern
  • Dienste (Webserver, Datenbank etc.) mehrach laufen zu lassen ohne, dass ungewollte Synergieeffekte auftreten

Komfortabler Weise entwickelt Canonical ein sogenanntes Ubuntu "Cloud Image".
Dieses Image ist eine für diese Verwendung optimierte und abgespeckte Version des Ubuntu Servers.

Des weiteren werden uns mit Libvirt und ukv-kvm sehr mächtige Werkzeuge an die Hand gegeben um das Virtualisieren mit KVM zu vereinfachen.

 

KVM installieren

Verbindet euch per ssh zu dem Ubuntu Server mit einem Benutzer der sudo Rechte hat.
Bevor wir irgendwelche Arbeiten an dem Server beginnen, aktualisieren wir die Paketquellen und installieren ausstehende Updates.

sudo apt-get update && sudo apt-get upgrade

Nicht jede CPU unterstützt Virtualisierung.
Um zu prüfen, ob der Prozessor in eurem Server geeignet installieren wir den "cpu-checker".

sudo apt-get install cpu-checker

Mit kvm-ok könnt ihr jetzt prüfen, ob die CPU den Anforderungen entspricht.

Anschließend installieren wir das sogenannte uvtool.

sudo apt-get install uvtool

Es bringt dazu folgende Werkzuge mit diversen Parametern mit:

  • uvt-simplestreams-libvirt → Images herunterladen und aktualisieren (synchronisieren)
  • uvt-kvm → Verwalten der VMs

Nun laden wir ein Ubuntu 16.04 (xenial) 64-bit image herunter.
Auch wenn die Cloud Images im vergleich zu orginalen Server Images relativ klein sind, kann dies je nach Internetleitung einige Minuten dauern.

uvt-simplestreams-libvirt sync release=xenial arch=amd64

 

Virtuelle Maschine erstellen

Um uns mit der zu erstellenden VM verbinden zu können, müssen wir einen öffentlichen ssh Schlüssel in der VM hinterlegen.
In unserem beispiel erstellen wir einen neuen, ihr könnt aber auch euren eigenen verwenden.

Gebt dem key einen anderen namen als "id_rsa", um euren eigenen nicht zu überschreiben.

ssh-keygen

Jetzt nutzen wir uvt-kvm um eine VM mit dem Namen „vm_xenial“ zu erstellen und hinterlegen den öffentlichen SSH-Schlüssel.
(Dieser wird den default user "Ubuntu" in die Datei /home/ubuntu/.ssh/Authorized_keys geschrieben)

uvt-kvm create vm_xenial release=xenial --ssh-public-key-file ~/.ssh/vm_xenial_id_rsa.pub

Mit virsh lassen wir uns nun einmal unsere laufenden VMs anzeigen.

virsh list


Anschließend finden wir die IP Adresse der neu erstellten VM fest und verbinden uns per ssh.

uvt-kvm ip xenial

ssh -i ./vm_xenial_id_rsa ubuntu@<ip>

Cheers,
Ori

Vielen Dank an Fl@ und beegeees, die maßgeblich bei der Erstellung dieses Artikels mitgewirkt haben.


Nextcloud Kaldersynchronisation mit iPhone

In diesem Artikel zeige ich euch, wie Ihr den Kalender in der Nextcloud mit dem Kalender auf eurem iPhone synchronisiert.
Die Idee ist, dass ihr auf eurem Telefon sofort in der Cloud eingetragene Termine seht und selbst hinzufügen könnt.

 

1) Zuerst müsst Ihr in die Einstellungen wechseln

2) Hier wählt Ihr dann Accounts und Passwörter

3) Einen neuen Account hinzufügen

4) Vom Typ "Andere"

5) Unter Kalender einen CalDAV-Account hinzufügen

6) Hier die Daten der Nextcloud eingeben

Achtung: Bei BENUTZER in der Serveradresse den Loginnamen verwenden!

Nun könnt ihr testen,
ob ihr Termine sehen und Erstellen könnt.

7) Kalender auswählen

8) Neuen Termin erstellen

9) Unter Kalender könnt Ihr nun wählen...

10) ... ob der Termin lokal auf dem iPhone
oder in der Nextcloud
eingetragen wird.

Cheers,
Ori


VPN einrichten

In diesem Artikel soll es darum gehen, wie man in einem Netz mit einer Meraki Firewall, am Beispiel einer MX80, ein VPN einrichtet und einen Client damit verbindet.

Meraki Portal Konfigurieren

Als Erstes müsst Ihr euch am Meraki Portal anmelden
https://account.meraki.com/secure/login/dashboard_login

Alle Cisco Meraki Produkte werden primär über das Meraki Portal konfiguriert.
Dort muss die Firewall registriert (Platzhalter für weiteren Blogartikel) werden, damit sie sich Änderungen an der Config zieht.

Im Meraki Portal müsst Ihr die Organisation und das Netzwerk wählen, in welchem die Firewall Member ist.
Anschließend könnt ihr unter Security Appliance > Client VPN > "Add new user" einen neuen VPN Benutzer anlegen.

Auf derselben Seite muss der Client VPN Server aktiviert und ein separates Netz für die User, welche sich über VPN verbinden, definiert werden. Das ist auch prinzipiell nicht nur bei Meraki sinnvoll, da so leicht Firewallregeln für VPN User geschrieben werden können.

Abschließend muss bei „Secret“ noch ein PSK eingetragen werden.
Dieser PSK zusammen mit Hostname und Passwort werden nun beim Einrichten des Clients benötigt.

 

Cheers,
Ori

 

 


Installing the Linux Subsystem

I have found my self a lot of time beeng mad at how unnecessarily complicated and unintuitive the powershell feels.
Often I would miss the core utils, Screen / Byobu or even ssh for that matter.

A few days ago I came along a Blogpost by fefe where he mentiones the "Linux Subsystem for Windows".
http://blog.fefe.de/?ts=a7172ae6

Lets give it a try.

 

What is it
Windows Subsystem für Linux is Microsoft trying to implement a working Linux Shell in Windows.

How this is working on a technical level is described in the related Microsoft blogpost.


https://blogs.msdn.microsoft.com/wsl/2016/04/22/windows-subsystem-for-linux-overview/

Installation
The installation is quite easy.

Run (Windows + R): control /name Microsoft.WindowsUpdate

There you can activate the the developer mode.
This can take a few minutes.

Afterwards you have to activate the windows feature "Windows-Subsystem for Linux (Beta)" and restart the Host.

After reboot you can start the bash.

On first startup a couple of files will be downloaded from the microsoft store and you have to set up a user for the shell.
In this process there will be a few dialoges claiming that the procedure "Might take a few minutes"... if it appears to be stuck just hit Enter ;)

Finaly update und upgrade you packets and you are good to go.
sudo apt-get update && sudo apt-get upgrade

 

Tadaa, Bash on Windows:

There are limitations that I have run into already.
I will play around with it a bit and make a separate Blogpost for that.

Cheers,
Ori