Steam In-Home-Streaming über openVPN

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Steam In-Home-Streaming über openVPN

      Da ich im Internet bisher nichts brauchbares gefunden habe, mich das Thema aber interessierte, schreibe ich dazu einen kleinen Text zusammen.

      Was ist Steam In-Home-Streaming
      Angenommen ich habe einen leistungsstarken PC in einem Zimmer im Haus und einen schwächeren PC in einem anderen Zimmer. Aus irgendeinem Grund will ich an dem schwachen PC ein Steam Spiel spielen. Dafür bietet sich das in-home-streaming an. Dieses Feature wurde von Steam im Mai 2014 eingeführt und kann von jedem User genutzt werden. Das Prinzip ist simpel. Befinden sich beide Rechner in einem Netzwerk, kann ich auf beiden Systemen den Steam Client starten. Das Programm erkennt die beiden Clients im Netzwerk und gibt die Möglichkeit das Spiel auf einem Rechner zu starten, aber auf dem anderen Rechner anzuzeigen. Hierbei rechnet die Grafikkarte des stärkeren Rechners, während die Eingaben am zweiten PC geschehen.
      Ich hatte dazu schon mal hier einen Artikel verfasst: Steam In Home Streaming
      Steam Seite zum Streaming: store.steampowered.com/streaming/?l=german

      Und wo zu brauche ich das wirklich?
      Steam bringt im Oktober 2015 den Steam Link heraus. Dies ist ein kleiner leistungsschwacher und lüfterloser PC, den ich an meinen Wohnzimmer TV stecken kann. Darüber streame ich mir das Spiel vom Hauptrechner übers Netzwerk auf meinen großen TV und kann dort bequem auf der Couch spielen.

      Und jetzt der VPN Teil
      Da sich dieses Feature nur auf das lokale Netzwerk bezieht, habe ich mir überlegt, ob man dies nicht auch über eine längere Strecke bewältigen könnte. Dafür kommt eigentlich nur ein sogenanntes Virtual Private Network in Frage. Dies baut einen Tunnel zwischen einem VPN Server und einem VPN Client auf, durch welchen verschlüsselte Kommunikation übertragen wird. Hauptsächlich wird dies von Firmen genutzt, um Standorte miteinander zu verbinden.
      Ich habe mich bei meinem Versuch für einen openVPN Server entschieden. Das Protokoll bietet zwei Arten von Tunneln.
      • tun - Das tun device baut zwei Endpunkte auf, die peer to peer miteinander kommunizieren
      • tap - Das tap device erstellt eine Netzwerkbrücke, die Server und Client in ein Subnetz platzieren
      • weitere Informationen: wiki.openvpn.eu/index.php/Vergleich_TUN/
      Für unseren Aufbau benötigen wir ein tap Device! In-Home-Streaming benötigt eine Broadcast Adresse, an welche es die Anfrage herausschickt, ob noch andere Clients im Netzwerk gerade Steam nutzen. Ohne den Broadcast kommt keine Kommunikation zustande.
      Ich erkläre hier allerdings jetzt nicht, wie man einen openVPN Server mit Bridging Modus konfiguriert. Dafür gibt es genügend Anleitungen im Netz. Eine gut geschriebene Anleitung dazu findet ihr hier. Alternativ einfach über eine Suchmaschine "openVPN server linux bridge" suchen. Da findet ihr bestimmt etwas.

      Nun wird es aber interessanter. Beide Steam PC's müssen nun also mit dem openVPN Server verbunden sein, damit sie sich in einem virtuellen Netzwerk "sehen" können. Zur Überprüfung kann man einfach ICMP Pakete zwischen den Clients verschicken. Antworten alle Gegenseiten, steht die Kommunikation. Starten wir nun Steam, haben wir noch kein in-home-streaming, da der Client die Anfragen über das default Gateway verschickt.
      Eine typische Broadcast Anfrage vom Client sieht wie folgt aus.

      09:02:58.431297 IP 192.168.15.102.27031 > 192.168.15.255.27036: UDP, length 93
      09:02:58.431330 IP 192.168.15.102.27031 > 192.168.15.255.27036: UDP, length 41

      Wir müssen den Client nun noch dazu bringen, dass er die Broadcast Anfragen über das tap Device verschickt, um den zweiten Steam Client zu sehen. Dazu können wir einfacherweise den openVPN Server als default Gateway verwenden.

      Folgende Konfiguration passen wir daher an.

      openVPN Server Konfiguration
      In der Serverkonfiguration folgende Zeile hinzufügen. Damit wird dem Client die Information mitgegeben, dass seine default route über das VPN Gateway geroutet werden soll. Jeder Traffic geht somit über den VPN Server. Damit verbindet sich Steam auf beiden Seiten auch über den VPN Server mit den Steam Servern und sind damit für die "Außenwelt" nur mit einer IP sichtbar.
      push "redirect-gateway def1"

      Des Weiteren müssen wir dem NAT auf dem openVPN Server mitteilen, dass die IP's der beiden Clients maskiert werden. Dazu nutzen wir iptables. Es reicht, wenn die beiden Client IP's maskiert werden. Die IP's müssen dabei gegen die Client IP Adressen ausgetauscht werden.
      iptables -t nat -A POSTROUTING -s 192.168.15.101/24 -o br0 -j MASQUERADE
      iptables -t nat -A POSTROUTING -s 192.168.15.102/24 -o br0 -j MASQUERADE

      Der openVPN Server und die Clients müssen nach der Konfiguration restartet werden. Die iptables Regeln halten übrigens nur bis zum nächsten Reboot.
      Für eine permanente Konfiguration müsst ihr euch ein autostart Script schreiben.

      Wie schaut das Ganze in der Praxis aus?
      Für mich unbrauchbar ;)
      Das Ganze sollte für mich nur ein Test sein, ob es möglich ist. Ja, es ist möglich! Aber mit einer einfachen Kabel-Internet Leitung zu Hause reicht die Bandbreite einfach nicht aus. Ich nutze eine 32Mbit/s Leitung zu Hause mit 2MBit/s Upstream. Der Upload reicht hier einfach nicht aus. Steam verlangt mindestens 3Mbit/s konstanten Upstream. Wer also Bei Kabel Deutschland 6Mbit/s oder bspw. über DSL 10Mbit/s Upstream hat, kann das Ganze gern noch mal testen. Allerdings spielt auch die Latenz eine große Rolle. Über weitere Testergebnisse mit stärkeren Leitungen wäre ich erfreut.