Assuming you have a Linux system on the local network that is up and running.
You use systemd socket to listen on a port that executes a shell script to wake the other, ideally, you could check that the request contains a certain string to prevent script kiddies from waking your sleeping computer.
You forward a port on your router to your Linux system that is up.
Just opening a connection to your router on the specified port sending the specified string will start your sleeping Linux computer.
Another option, as the op has seen, is to configure your router to do the job. In my experience, wifi routers do not allow you to add static ARP entries. You could try OpenWRT, which is great, however, flashing your router with OpenWRT just for this is, I think, overkill. Then again, OpenWRT is really good and worth the effort, especially from a security stand point (you can patch the router when you see fit without having to wait for the vendor to release a patch)! All this, provided OpenWRT supports your router.