There are so many VPN service online that users can use to hide their public IP.
How about using Mikrotik to provide this service

Any idea?
It would work. Many VPNs with encryption may use a lot of CPU. Mikrotik supports AES hardware support BUT only for IPSec. SSTP, OpenVPN, etc will not use AES acceleration and will use the CPU. You may want to consider installing RouterOS on a computer/server for better performance and memory. RouterOS has an API for configuring users, or you can use a radius server.
Checkout softether.org too.
So far, I have implemented a solution per the diagram shown.
The short coming in the solution is that the public IP with which users use to connect to the PPTP/L2TP VPN offered by the mikrotik vpn router remains the same as the one Goal.com and google sees on the internet.
After connecting to vpn, users Public IP on the internet should change to that of the Mikrotik VPN.
Has anyone implemented something similar?
The way I do it on Mikrotik is setup a PPP OenVPN Client, where the mikrotik “dials out” to the openvpn service (currently using SlickVPN) then what you do is mark the traffic going out to the world and then route it out the dynamic VPN tun.
The mangle rule can be your on/off switch.
To make the dynamically assigned VPN IP as the IP the destination sees will be a matter of NAT Masq out to the VPN.
Mine is using AES256 and performance is good enough for me.