PS Vita Remote Play and SoftEther
Sony’s latest gaming handheld, the Playstation Vita, has a great new feature: Remote Play. Your Playstation 4 turns on, starts playing a game, and then streams the video to your Vita. You control everything remotely via the Vita. It’s a great way to play PS4 games when you’re away from your console (or away from your house).
Because the game is actually being executed and rendered on your PS4, it needs to be on for this to work. But what happens if your PS4 isn’t on?
PS4 consoles will register themselves with a remote Sony service, which records their public IP address (which can change on most residential connections) and other information. Your PS4 is rarely “off” but rather “asleep” when you put it away. While asleep, it can be woken up by this remote Sony service, which then lets you connect to it via Remote Play (forwarded ports on your router/firewall). During the DDoS attack Sony experienced around Christmas 2014, this remote Sony service was down, so PS4s could not register themselves.
My own PS4 was happily asleep at home, but I could not turn it on remotely to access it. There are no PC-based tools to turn a PS4 on, no management software, etc. But there is another way to turn on a PS4: with a Vita. The Vita can send out a specially crafted broadcast packet, which will wake up the PS4 and allow you to connect. The issue is that you can’t easily send a broadcast packet from your Vita and have it hit your PS4 without being on the same network.
That’s where SoftEther comes in. SoftEther allows you to make a seamless layer 2 tunnel between endpoints, which lets broadcast traffic through. I installed SoftEther server on my home PC (remotely), installed SoftEther bridge on my laptop, and got to work. Because the Vita can only connect to the network via wifi, IĀ used an extra USB NIC + wifi access point to tunnel my Vita through to my home network. The broadcast from the Vita woke up the PS4, and I was good to go!
The catch with trying to use SoftEther in this manner is that Windows is not very good at allowing you to make your device a wireless access point. If you set your wireless to be an access point instead of a client, it transparently adds lots of NAT / DHCP and won’t let you natively bridge your interfaces together. In order to get around this, I needed a real access point, with a very simple config, and then bridged my LAN interfaces together in Windows. If you see an IP range like: 192.168.137.0/24, you know that Windows is silently using NAT / DHCP in the background.
I also took a capture of the broadcast traffic that the Vita uses to wake up the PS4, and I plan to try replaying that PCAP file next time to see if the same packets will wake it up.