I would recommend a mix of NAT/port-forwarding and VPN. Best is you seperate your local network into a DMZ and a LAN. In DMZ you put all your VMs that should be accessible from the internet and use port-forwarding in your router so they are accessible at all time from anyone (so hackers can always attack them). Than you make sure that VMs in that DMZ can only access the internet but not your LAN. If something bad happens and one of the VMs in the DMZ gets hacked, it only effects the VMs in your DMZ and a hacker doesn't get access to all your machines at home in your LAN.
And if you got VMs that shouldn't be public accessible (like a NAS, CCTV, homeautomation, monitoring tools and so on) you put them in your LAN. Then you can setup a VM to work as a VPN server (wireguard/OpenVPN/IPsec) in your LAN and set a port-forward for it up. If you then are on the road and want remote access to your LAN (so you can access all your devices and VMs that are only accessible from your local LAN) you can start a VPN client so your smartphone/tablet/laptop can be part of your LAN over a encrypted VPN tunnel. Because it is then just as your smartphone/laptop would be at home you can access everything normally but only you can access it, because only you got the keys to use that VPN. That way you can make your VMs accessible from the internet but only for your (and not public available).