Not a direct answer to your question, but most likely the success of this idea would depend upon the device your son is using and if it can run shadowsocks.
I have found (messy) solutions to this type of issue myself by using port forwarding invoked via apps like Termius on iOS -- works great for TCP, but, UDP requires more thought, and, as you probably know, WireGuard is UDP based.
There are solutions like "socat" which can (and does) work nicely, but, again, whether or not your son can run that locally on his device to tunnel the WireGuard UDP inside of a TCP tunnel back to your shadowsocks (or other) solution is more complicated.
Have you checked to see if it's all UDP that's blocked, or only certain UDP ports, from his school?
May not be a trivial one to solve without having extra software on his device.
I have found (messy) solutions to this type of issue myself by using port forwarding invoked via apps like Termius on iOS -- works great for TCP, but, UDP requires more thought, and, as you probably know, WireGuard is UDP based.
There are solutions like "socat" which can (and does) work nicely, but, again, whether or not your son can run that locally on his device to tunnel the WireGuard UDP inside of a TCP tunnel back to your shadowsocks (or other) solution is more complicated.
Have you checked to see if it's all UDP that's blocked, or only certain UDP ports, from his school?
May not be a trivial one to solve without having extra software on his device.
"