У меня подобная задача решена таким образом:
1) Куплен VDS с белым IP, там установлен сервер openvpn.
2) Домашний роутер с Openwrt. На нём настроен клиент openvpn, который подключается к VDS. Так же установлен wakeonlan для пробуждения компьютеров по локальной сети. На роутер всегда есть доступ через openvpn. На компьютеры за роутером - через ssh-туннель.
3) Есть один ПК, у которого wakeonlan работает кривовато, а менять железо желания нет. Для него изобрёл костыль на базе esp6288 и реле. Реле подключено параллельно кнопке Power на системном блоке. На esp6288 залита прошивка ESP-easy, настроено подключение к моей wifi-сети и статический IP (в моём примере 192.168.1.105). Реле подключено на GPIO pin 12 и по-умолчанию отключено.
На роутере есть скрипт power_on.sh
wget -qO /dev/null http://192.168.1.105/control?cmd=GPIO,12,1
sleep 1
wget -qO /dev/null http://192.168.1.105/control?cmd=GPIO,12,0
Как вы можете понять, скрипт включает реле, ждёт секунду, а потом отключает реле. Этим действием эмулирует нажатие кнопки Power. Системный блок прекрасно включается и работает. Выключаю ПК его уже через консоль с помощью shutdown -h now.