Why not use use a dynamic dns service? My router updates my VPN's dns entry automatically at cloudflare when it gets a new up. Everything works like magic just like the previous poster's setup, except without a static home ip.
Many ISPs, particular in EMEA, don't even hand out public IP addresses to their customers; cf. CGNAT [0]. End users, at home, will get RFC1918 or RFC6598 IPs from their provider.
While they could still use a dynamic DNS service, the public IP that it sees will actually be a public IP address that is shared by many customers.
This works for me, my Pi has a little script to get public IP and update DNS. The rare IP switch at home is updated in 10 minutes. Bonus the endpoint is in my domain.