It seems that certain home router firmware is designed to work with Dynamic DNS services (e.g. noip & dyndns) to serve a subdomain from a server behind a consumer ISP. On a similar note, are there any dynamic dns services that will work with a shared web hosting account?
Example
For instance, Dreamhost has an API that can retrieve a domain name's IP address. In theory, the dynamic DNS service would periodically make a request to the Dreamhost API for the website's IP address. If the IP address on Dreamhost changes, the DNS host would automatically make the necessary changes to the zone file for that website as soon as it notices a discrepancy.
Why?
In the past, I had paid for a static IP address on a shared host, my domain name was registered at GoDaddy and the nameserver was set to EveryDNS. Due to catastrophic hardware failure at the shared host, my site was moved and the IP address changed.
In the example setup above, the DNS records would have automatically updated. Instead, I had to manually update my A record.
Question Summary
Is there a Dynamic DNS hosting service and shared web host that will allow this?
Is the solution proposed in the above example viable?
Bonus (at the risk of exposing my ignorance on this subject): are there any other ways, outside of DNS, to detect the IP address for a website? Perhaps a script in your shared hosting directory could detect an IP change and notify the DNS host?
Thanks in advance!
So far it has happened (to you) just once and that was for extraordinary reasons. Considering the drawback of dynamic DNS I really don't think it's worth the bother. If you still want to do it anyway just get one of the DDNS clients and run it on the server itself, as that's the only place it will work correctly.
If you are seriously concerned you should also implement some form of monitoring to ensure the server is reachable and have it alert you if it's not.
You've already mentioned DynDNS, it sounds like all you're missing is the client. They mention a couple linux-compatible clients on their website.
Using either of these in combination with a dynamic DNS service should accomplish what you want.
I originally assumed that your shared hosting would provide you with shell access. Without shell access, things get a bit tricky. First, you need some way to run a script periodically. Some web apps implement "fake cron" by calling a routine on every page load, but that won't help when your site isn't accessible. That means you need access to the crontab.
If you have the ability to run a task periodically, you could develop a script that sends the new IP address to another host you control, which is also the authoritative DNS. The receiving host would use the new IP address to update the zone file, then reload the DNS configuration.
TL;DR No, I don't know of any service that already provides this.
Nope, that doesn't exist.
What does exist, however, are 3rd party services which monitor your website by making HTTP requests, and change DNS when your webserver is down. However, these aren't 'automagically' integrated with your web host, and will not know if your web host has set up a new server for you. You will have to run 2 or more webservers yourself (using for example 2 different web hosts), and let the service fail over to a server designated by you.
Examples of such services are DNS Made Easy's DNS failover, and EdgeDirector together with their monitoring service. There are several others who offer something similar, typically at a higher price.
Please note, using DNS 'tricks' is not a perfect solution for high availability; because DNS records are cached by ISPs and web browsers. Thus a unknown number of your users will not be directed to the backup server right away, it will take some time.
You could also look at CloudFlare. They don't operate by 'dynamic DNS' as you asked about, but proxy your content through their network of nodes. However, they can to a degree provide service from cached content even if your server is down.
vaguely this could involve using php or some other scripting language to get an ip address (since its shared hosting you'd have a very limited amount of choice) and somehow grabbing that ip address and passing it on to a DynDNS script - presumably doing something with curl and php if its available. Sorry for lacking precision, but shared hosting is REALLY limited, and you don't have too many tools at your disposal.