General overview
Goal
My goal here is to be able to play on my PC remotely from a portable device (laptop, tablet or phone) .
I used steamlink first to play through the Internet. It worked well and did not need to have additional setup (no vpn or additional port in/out manual setup on my computer or router).
I also want my computer to be able to go to sleep to save energy and be able to wake it up remotely. I needed a solution to send magic packet (wake on lan) safely so Wireguard VPN comes in action.
TeamViewer / ruskDesk / Remote Desktop / Moonlight feedbacks
Unfortunately, on my last macOS update, steamlink kept crashing after the update. I had no other choice to give up and look up for another alternative. I’ve tried:
- Teamviewer:
- advantage: simple and quick setup
 - drawbacks:
- Close source
 - Issue in terms of performance for gaming
 - Major issue: no possiblity to self host
 
 
 - rustDesk:
- advantages:
- Opensource
 - Self-host (I was able to use it with a VPN) AND through their servers
 
 - drawbacks:
- Setup using rustDesk servers is apparently not very good in terms of performance (not tested myself though)
 - Setup was a bit quirky for self-host setup (and I wanted it this way since it is more secure)
 - Major issue on gaming: https://github.com/rustdesk/rustdesk/issues/2525
 
 
 - advantages:
 - Windows Remote Desktop
- advantage: Coming with Windows so no additional setup needed (if you have professional Windows)
 - drawbacks:
- RDP server only comes with Windows Professional. If you have a Home edition, you’ll need to do additional setup to enable it.
 - Performance issues on gaming
 - WAN setup is not advised
 
 
 - Sunshine(server) / Moonlight(client)
- advantages:
- open-source
 - self-host
 - can work on LAN and WAN
 - client can be installed on mobile as well
 
 - drawbacks:
- Only works with Nvidia graphic cards
 
 
 - advantages:
 
Setup schema
My steamlink setup:
flowchart LR
    remote[remote device]-. ssh through wireguard .-> pi[raspberry pi]
    pi -- send magic packet if PC is in sleep mode --> pc
    steamlink -- play through internet --> steam
    subgraph remote
        steamlink
    end
    subgraph LAN
        pi
        pc
    end
    subgraph pc[windows PC]
        steam
    end
    style LAN fill:#f66
My moonlight/sunshine setup:
flowchart LR
    remote[remote device]-. ssh through wireguard .-> pi[raspberry pi]
    pi -- send magic packet if PC is in sleep mode --> pc
    moonlight -. play through wireguard vpn .-> sunshine 
    sunshine --> steam
    sunshine --> desktop
    subgraph remote
        moonlight
    end
    subgraph LAN
        pi
        pc
    end
    subgraph pc[windows PC]
        sunshine
        desktop
        steam
    end
    style LAN fill:#f66
Installation steps
- Create a dynDNS address (using for instance https://www.noip.com/) [1]
 - Setup your dynDNS on your router [2]
- Personally, I have a livebox so the setup is under 
Configuration avancée > Réseau > DynDNS
 
 - Personally, I have a livebox so the setup is under 
 - Install wireguard on your raspberry using piVPN [1]
 - Install wakeonlan command on raspberry pi [3]
sudo apt install etherwake - On your host device,
- enable 
Remote Playin your Steam settings - OR install sunshine
 
 - enable 
 - On your remote device,
- install wireguard “client”
 - install steamlink OR moonlight
 
 
Play steps
- Connect to your wireguard VPN
 - (Optional) To run only if your PC is in sleep mode:
- SSH to your raspberry pi using wireguard IP
 - Send magic package to your PC from raspberry pi
 
wakeonlan <PC mac address> - Start steamlink/moonlight on your client and connect to your PC
 
Sources
[1] How to install wireguard on raspberry pi using piVPN https://raspberrytips.com/install-wireguard-raspberry-pi/
[2] How to configure dynDNS on a livebox https://communaute.orange.fr/t5/Trucs-et-astuces/Livebox-Comment-y-acc%C3%A9der-depuis-Internet/ta-p/635954
[3] How to send a magic packet: https://www.cyberciti.biz/tips/linux-send-wake-on-lan-wol-magic-packets.html