It amazes me how there are more haters that reply to forum questions than people with the actual answers. Yes, the question has been asked before, but no, other than saying you cant do it, there haven't been any complete answers.
Here's how I solved it (using Windows 10 applications and GXP2170 phones):
1. Find whatever ringtone you actually want to use and convert it to a .wav file (There's a size limit but I cant remember what it is - I think it has to be relatively small.)
2. Use Grandstream's ringtone generator (download it at
http://www.grandstream.com/support/faq/common-questions/custom-ringtone-faq) to convert your .wav file to the bin file "Ring3.bin" (because the 3cx template makes Ring3 the default external ringtone)
3. If you don't have easy access to your phone system's backup location, change it temporarily in the 3cx app to a PC where you can get to it - I used an FTP site that downloads to my PC.
4. Create a backup of the phone system - it will get sent az a .zip file to the location you just changed the default to.
5. Copy the new Ring3.bin ringtone you created to the Desktop of the PC where you just downloaded the backup file.
6. Open that backup file in Windows Explorer. DO NOT EXTRACT, but just open/double click the .zip file of the backup.
7. The current Ring3.bin file will be in the {Backup File Location}\{backup file name}.zip\Provisioning\{Provision subfolder}\firmware\Grandstream\
8. Delete the Ring3 file in the backup file.
9. Copy and paste the new Ring3 file from the desktop into the backup zip file
10. Go back to 3CX and Restore the target backup you just altered
11. Reprovision all the phones.
12. Reset the Backup location of the phone system to where it was originally.
The internal and external ringtones are already different in the system.
I believe that if you want to change the internal-phone-to-internal-phone ringtone, you do the above, but by changing the Ring2.bin file instead of Ring3.
There is another way to do it that involves messing with the templates, but by doing it like I did above, most updates to the templates wont overwrite your new ringtone and take you back where you started.
Good Luck!