brent timothy saner on 23 Apr 2014 09:39:59 -0700 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: [PLUG] Fwd: Your Dyn account status will change in 14 days |
If you have a linode[0] (or, rather, are using their nameservers), you can use their API. I have a cronjob that updates various records that looks a little something like this (partdon the linebreaks): #!/bin/bash curl --globoff -s -o /dev/null 'https://api.linode.com/?api_key=YOUR_API_KEY_HERE&api_action=domain.resource.update&DomainID=YOUR_DOMAIN_UUID_HERE&ResourceID=YOUR_A_RECORD_UUID_HERE&Target=[remote_addr]' You can generate your API key by logging in and going to https://manager.linode.com/profile/api Once that's done (let's say your API key is ABC123, though the real value should be much more complex), to get a list of domains you can do: curl --globoff -s 'https://api.linode.com/?api_key=ABC123&api_action=domain.list' | sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | sed -e 's/^\("DOMAINID.*\)/\n\1/g' Now, let's say the domain you want to update has a UUID of 000000. You can then get a list of *RECORDS* for that domain this way: curl --globoff -s 'https://api.linode.com/?api_key=ABC123&DOMAINID=000000&api_action=domain.resource.list' | sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' | sed -e 's/^\("DOMAINID.*\)/\n\1/g' Let's say that the A record for sub.domain.tld has a UUID of 111111. The final kit and kaboodle to update your A record would be: curl --globoff -s -o /dev/null 'https://api.linode.com/?api_key=ABC123&api_action=domain.resource.update&DomainID=000000&ResourceID=111111&Target=[remote_addr]' I recommend setting the TTL to 5 mins and running the cron every 10 mins. You can do a lot of other neat stuff[1] with their API as well. NOTE: This passes the API key and other sensitive information via a URL, so this should only be done with a trusted upstream. If you want to implement a bit more security, you could run a PHP script on somewhere static and trusted (liiiike, a Linode! or whatever.) that will take the visitor IP and use that as a variable to make the same API call (you'd replace [remote_addr] with the variable or a hardcoded value, so something like ....Target=123.123.123.321). That would let you lock down the PHP script with HTDIGEST and HTTPS or the like. [0] https://www.linode.com/ [1] https://www.linode.com/api/ ___________________________________________________________________________ Philadelphia Linux Users Group -- http://www.phillylinux.org Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug