-
-
Save dalhundal/89159b3f032588586e91 to your computer and use it in GitHub Desktop.
#!/bin/sh | |
# Shell script to update namecheap.com dynamic dns | |
# for a domain to your external IP address | |
HOSTNAME=yoursubdomain | |
DOMAIN=yourdomainname.com | |
PASSWORD=y0urp455w0rd | |
IP=`curl -s echoip.com` | |
curl "https://dynamicdns.park-your-domain.com/update?host=$HOSTNAME&domain=$DOMAIN&password=$PASSWORD&ip=$IP" |
Awesome, worked like a charm on my tomato router. Thanks all!
Minor change to only update the dynamic DNS record when required. Allows for frequent update checking without hammering the namecheap update API.
#!/bin/sh
# Shell script to update namecheap.com dynamic dns as required
# for a domain to your external IP address
HOSTNAME=yoursubdomain
DOMAIN=yourdomainname.com
PASSWORD=y0urp455w0rd
CURRENT_IP=$(curl ifconfig.io)
DYN_IP=$( host "$HOSTNAME.$DOMAIN" | sed -e "s/.*\ //" )
if [ "$DYN_IP" != "$CURRENT_IP" ]; then
curl "https://dynamicdns.park-your-domain.com/update?host=$HOSTNAME&domain=$DOMAIN&password=$PASSWORD"
fi
This works fine if HOSTNAME has a value, like 'www'. That would update the DNS for www.yourdomain.com.
I tried setting HOSTNAME to '@' to update the base domain (yourdomain.com) but got an error. Then I tried setting it to '', also no good. How to set the DNS value of @?
Does this work? (I can't test it right now)
host=@
domain=your-own-domain.tld
password=your-own-password
response=$(curl -s "https://dynamicdns.park-your-domain.com/update?host=$host&domain=$domain&password=$password&ip=$ip")
echo $response
Here's namecheap's own documentation, unless I'm missing something we're updating using the described method:
One thing to double check, on your namecheap DNS you do have the @ record host type set to "A+ Dynamic DNS record" ?
If that's correct then I'd open a support case with namecheap.
According to this you should be using the "A+ Dynamic DNS record". Whilst it might work now with a regular "A record" there's a chance that functionality will be deprecated in the future YMMV.
Here's something that brings together several of the ideas above.
- Prevents clobbering the Namecheap update servers
- Only relies on core internet services from OpenDNS/dnsOmatic infrastructure (robust and purpose buit for ddns use cases)
- Will also discover AWS public DHCP IP addresses properly if you have a lot of internal RFC1918 DNS going on.
#!/bin/sh
# Shell script to update Namecheap.com dynamic dns
DDNS_HOSTNAME=hostname
DDNS_DOMAIN=example.com
DDNS_PASSWORD=XXXXXXXXXXX
CURRENT_IP=$(curl myip.dnsomatic.com)
CURRENT_DDNS=$(dig +short $DDNS_HOSTNAME.$DDNS_DOMAIN @resolver1.opendns.com)
echo "current Namecheap ddns record = $CURRENT_DDNS"
echo "current AWS public IP address = $CURRENT_IP"
if [ "$CURRENT_DDNS" != "$CURRENT_IP" ]; then
curl "https://dynamicdns.park-your-domain.com/update?
host=$DDNS_HOSTNAME&domain=$DDNS_DOMAIN&password=$DDNS_PASSWORD&ip=$CURRENT_IP"
fi
What the heck is park-your-domain.com and why would I send them my namecheap credentials? Is this a scam?
Thanks - I did search and didn't find any mention of park-your-domain.com in Namecheap's documentation. Why don't they use namecheap.com or api.namecheap.com as their API domain?
I made a couple of changes:
- Permits using "@" where you only have the TLD
- "silenced" the first curl
- Displays the Host and Domain values
- Changed the "dig"s to query dns1.registrar-servers.com since those are currently what NameCheap updates
#!/bin/bash
# Bash script to update Namecheap.com dynamic dns
DDNS_HOSTNAME="@"
DDNS_DOMAIN="YourDomainHere.com"
DDNS_PASSWORD="01234567890123456789012345678901"
CURRENT_IP=$(curl -s myip.dnsomatic.com)
if [[ "$DDNS_HOSTNAME" == "@" ]]; then
CURRENT_DDNS=$(dig +short $DDNS_DOMAIN @dns1.registrar-servers.com)
else
CURRENT_DDNS=$(dig +short $DDNS_HOSTNAME.$DDNS_DOMAIN @dns1.registrar-servers.com)
fi
echo "Hostname: $DDNS_HOSTNAME; Domain: $DDNS_DOMAIN"
echo "current Namecheap ddns record = $CURRENT_DDNS"
echo "current public IP address = $CURRENT_IP"
if [ "$CURRENT_DDNS" != "$CURRENT_IP" ]; then
curl "https://dynamicdns.park-your-domain.com/update?host=$DDNS_HOSTNAME&domain=$DDNS_DOMAIN&password=$DDNS_PASSWORD&ip=$CURRENT_IP"
fi
Not sure if this is new feature of namecheap dynamic DNS, but if you're just going to set it to the IP you're calling the URL from, then no need to specify the IP, it is determined automatically.
(reduces the dependency in another 3rd party service)
https://www.namecheap.com/support/knowledgebase/article.aspx/29/11/how-do-i-use-a-browser-to-dynamically-update-the-hosts-ip/
Just use: