It seems like you have already opened the necessary ports in both your local firewall and NSG, and you are able to connect to FTP locally but not remotely. One thing to check is if you have enabled stateful FTP filtering that will dynamically open ports for data connections. To enable stateful FTP filtering, you can use the following command in a command prompt:
netsh advfirewall set global StatefulFtp enable
It's also important to note that active FTP connections may require an outbound connection from port 20 to be enabled on the server, and the FTP client machine would need to have its own firewall exceptions set up for inbound traffic. Additionally, FTP over SSL (FTPS) will not be covered by these rules, and you will need to configure your Windows Firewall settings for FTP differently if you intend to use FTP over SSL (FTPS).
If you have already checked these settings and are still unable to connect remotely, you may want to check your network configuration and ensure that your VM is accessible from the internet.
References: