Steam Link Streaming über VPN

Beitrag vom 31.03.2018

Innerhalb unserer Fahrrad Gruppe haben wir über den Winter mehrere Gaming Abende veranstaltet. Letztens kam dann die Idee Speedrunners anzuzocken und dabei gleich das Steam Link auf Herz und Nieren zu testen.

Ich hatte noch ein APU3 Board "rumliegen" und keine Lust meinen PC mit zum Zockerabend zu schleppen. Also auf dem Board OPNSense installiert, OpenVPN eingerichtet und schon kommte die Zockerei los gehen.

PC Engines APU2

Übers Internet switchen

OpenVPN beherrscht zwei Modi. TUN ermöglicht Routing zwischen mehreren IP Netzen über einen VPN Tunnel. Es laufen also nur Pakete über diese Verbindung, welche OSI Layer 3 beherrschen. Quell- und Zielsysteme befinden sich in unterschiedlichen IP Netzen, somit funktioniert im Steam Link das Auto Discover nicht.

Spannender ist hier der Modi TAP. Dieser arbeitet auf OSI Layer 2 und spannt einen virtuellen Switch (eine Bridge) zwischen Quelle und Ziel. Für die verbundenen Geräte sieht es dann so aus, als ob sie sich in einem gemeinsamen Netz befinden. Der einzige merkbare Unterschied ist eine etwas höhere Latenz.

Genau das wollen wir.

Besonderheiten von Bridges in FreeBSD

FreeBSD macht einiges anders bei Bridges als es Linux machen würde. Beachtet man dies nicht, geht man äußerst verwirrt auf Fehlersuche.

OPNSense Netzwerk Setup "Zuhause"

Ich gehe davon aus, dass der OPNSense Router schon vorhanden war und somit Internetzugriff, NAT, etc fertig konfiguriert ist.

  • LAN Port einem Interface LANNIC zuordnen, Interface aktivieren, keine IP vergeben
  • Eine Bridge LANBR erstellen, LANNIC als Member hinzufügen
  • Die Bridge einem neuen Interface LANBR zuordnen, Interface aktivieren, als IP 192.168.42.1/24 zuordnen
  • DHCP und DNS für LANBR konfigurieren

Nun kann man an den LAN Port einen Switch hängen, wo anschließend Gamer PC, Google Chromecast und viele andere Dinge angehängt werden können, die man so im Heimnetz findet.

OPNSense OpenVPN Server Setup "Zuhause"

  • Server Mode: Peer to Peer (Shared Key)
  • Protocol: UDP
  • Device Mode: tap
  • Interface: WAN
  • Local port: 16016
  • Shared key: "Generiere mir einen"
  • Encryption Algorithm: AES-256-CBC
  • Auth Digest Algorithm: SHA512
  • Bridge DHCP: yes
  • Bridge Interface: LANBR
  • Compression: Enabled with Adaptive Compression

Advanced Settings:

persist-key
persist-tun
persist-local-ip
reneg-sec 3600
fast-io
fragment 1300
mssfix 1450
tun-mtu 1500

OPNSense Netzwerk Setup "Zuhause" Nacharbeiten

  • Port 16016/udp in der Firewall für den WAN Port mit Ziel This Firewall freischalten
  • Dem neu erstellen OpenVPN Server ein Interface VPNLAN zuweisen, Interface aktivieren, keine IP vergeben
  • Das Interface VPNLAN der Bridge LANBR zuweisen
  • ggf. OpenVPN Server VPNLAN neustarten

OPNSense Netzwerk Setup "Unterwegs"

Nach der Standard-Installation sollten das erste und zweite Interface der APU3 LAN und WAN sein. Das kann auch so bleiben, denn so gibt es direkt einen Port mit dem man im Fehlerfall noch an die Weboberfläche von OPNSense kommt.

  • Port igb2 dem Interface VPNINTERFACE zuordnen, Interface aktivieren, keine IP vergeben
  • Eine Bridge VPNSWITCH erstellen, VPNINTERFACE als Member hinzufügen
  • Die Bridge einem neuen Interface VPNSWITCH zuordnen, Interface aktivieren, als IP 192.168.42.2/24 zuordnen
  • Dem Interface VPNSWITCH eine generelle Freischaltung in der Firewall einräumen, sodass man die "Unterwegs"-Box von PCs welche "Zuhause" stehen erreichen kann. (Optional, reine Admin-Freigabe)

OPNSense OpenVPN Client Setup "Unterwegs"

  • Server Mode: Peer to Peer (Shared Key)
  • Protocol: UDP
  • Device Mode: tap
  • Interface: WAN
  • Remote Server: meinedyndns.example.com:16016
  • Retry DNS resolution: yes
  • Shared Key: Key aus der "Zuhause"-Box übernehmen
  • Encryption Algorithm: AES-256-CBC
  • Auth Digest Algorithm: SHA512
  • Compression: Enabled with Adaptive Compression

Advanced Settings:

persist-key
persist-tun
persist-local-ip
reneg-sec 3600
fast-io
fragment 1300
mssfix 1450
tun-mtu 1500

OPNSense Netzwerk Setup "Unterwegs" Nacharbeiten

  • Dem neu erstellen OpenVPN Client das Interface VPNCLIENT zuweisen, Interface aktivieren, keine IP vergeben
  • Das Interface VPNCLIENT der Bridge VPNSWITCH zuordnen
  • ggf. OpenVPN Client neustarten

Unter "Connection Status" sollte nun die VPN Verbindung mit dem Status "up" gekennzeichnet sein. Ansonsten das Log File prüfen. Das Gerät welches in den dritten Port der APU gesteckt wird, sollte jetzt eine IP vom DHCP Server der "Zuhause" Box bekommen.

Performance

Getestet habe ich das ganze mit einem Telekom Magenta L (100MBit/sec down, 40MBit/sec up) und einem Telekom Magenta M (50MBit/sec down, 20MBit/sec up). Und das mit einem sehr beeindruckenden Ergebnis:

Alle Spiele ließen sich mit 1080p ruckelfrei spielen. Im Schnitt wurde dabei eine Bandbreite zwischen 10 MBit/sec und 20 MBit/sec verbraucht. Lags sind weder bei Indietiteln (Speedrunners) noch bei AAA Titeln (Portal 2, GTA V) merkbar gewesen.

Mit iperf konnte ich die Leitung über den VPN Tunnel komplett (halt die 40MBit/sec Upload) auslasten. Die Leistung der APU Boxen reicht also auch vollkommen.

Negativ hingegen ist unser Gamingabend verlaufen. Vor Ort gab es einen 200MBit/sec Vodafone Kabel Anschluss welcher gegen 20 Uhr den Dienst verweigerte. Das Bild ruckelte so schlimm, dass wir uns dafür enschieden kurzerhand Steam und die entsprechenden Spiele vor Ort auf einen PC zu installieren. Das funktionierte übrigens wieder sehr gut.

Anscheinend hat Vodafone seine Anbindungsprobleme auch über ein Jahr nachdem ich zur Telekom gewechselt bin noch immer nicht gelöst. Auch wenn es gefühlt leicht besser geworden ist.

APU2 Test Setup

Hallo Internet

Mein Name ist Christian, vom Beruf bin ich Anwendungsentwickler.

In meiner Freizeit beschäftige ich mich mit verschiedensten Technologien. Hier sammele ich Dinge, die für mich interessant waren oder sind.