Cookie Notice
This site utilizes cookies to improve your browsing experience, analyze the type of traffic we receive, and serve up proper content for you. If you wish to continue browsing, you must agree to allow us to set these cookies. If not, please visit another website.
Whitelabel Nameservers on Route53
This is a quick(ish) how to that you can do to utilize one of your registered domains on Amazon’s Route53 service.
Required:
- A registered Domain
- An account with Amazon’s AWS, in particular, their Route53 service
- An IAM account, with API access to allow the creation, reading, and updating Route53 Domain records
- The AWS cli installed on a linux distro that you have shell access to
- A bit of patience
- Remembering what DNS propagation is like…
How to do it:
First things first, drop into shell on your linux machine and run the following command. You will need to copy/paste it’s output, so have your favorite text editor handy.
aws route53 create-reusable-delegation-set --caller-reference $(date +%s%N)
The output of this command should look similar to the following:
{ "Location": "https://route53.amazonaws.com/2013-04-01/delegationset/N244H6F5LUSLJ8", "DelegationSet": { "NameServers": [ "ns-39.awsdns-04.com", "ns-523.awsdns-01.net", "ns-1129.awsdns-13.org", "ns-1612.awsdns-09.co.uk" ], "CallerReference": "1512169214076311809", "Id": "/delegationset/N244H6F5LUSLJ8" } }
Once your delegation set is created you will need to run and capture a few more commands so we can get the IPv4 addresses, and the IPv6 addresses, so stay in shell for now.
From the output, copy and paste the “Id”, and the “Nameservers” to your text pad, and save it.
Now, in shell, run this for each of the nameservers in the “Nameservers” block, and copy and paste the output from each
host ns-39.awsdns-04.com
This will return you the IPv4 and IPv6 addresses, which we will need soon.
Now, you can create the hosted zone at Route53 by using the following command. It will specify the delegation set that you retrieved the Id from above, so replace the appropriate placeholder with the Id you already copy and pasted, also replace your domain name. If you already use Route53 for your domain, you will need to export your zone file, delete all records, and finally delete the name from it… importing the records back again after you run the following command… it only takes 15-20 seconds, and typically your TTL will be much greater than that.
aws route53 create-hosted-zone --caller-reference $(date +%s%N) --delegation-set-id /delegationset/THE_DELEGATION_ID --name YOURDOMAINNAME.EXT
You will need the returned ID… so copy and paste it somewhere…
Now, pop over to AWS Route53, we need to create some A and AAAA records for each of the nameservers you need for your whitelabel. One for each record type, and you will use the appropriate IPv4 for the A record, and IPv6 for your AAAA record. Do not forget to name them… typically, they are named ns# where # is a number.
Now, back to shell, here we’re going to force the domains nameservers and SOA records
# Force the Nameservers Upon Us aws route53 change-resource-record-sets --hosted-zone-id /hostedzone/YOUR_HOSTED_ZONE_ID --change-batch '{ "Changes": [{ "Action": "UPSERT", "ResourceRecordSet": { "Name": "YOURDOMAINNAME.EXT", "Type": "NS", "ResourceRecords": [ {"Value": "ns1.YOURDOMAINNAME.EXT."}, {"Value": "ns2.YOURDOMAINNAME.EXT."}, {"Value": "ns3.YOURDOMAINNAME.EXT."}, {"Value": "ns4.YOURDOMAINNAME.EXT."} ], "TTL": 60 } }] }'
Make sure to change the ns1-4 to whatever it was you decided to use when you named them above.
# Force the SOA Upon Us aws route53 change-resource-record-sets --hosted-zone-id /hostedzone/YOUR_HOSTED_ZONE_ID --change-batch '{ "Changes": [{ "Action": "UPSERT", "ResourceRecordSet": { "Name": "YOURDOMAINNAME.EXT", "Type": "SOA", "ResourceRecords": [ {"Value": "ns1.YOURDOMAINNAME.EXT. hostmaster.YOURDOMAINNAME.EXT. 1 7200 900 1209600 60"} ], "TTL": 60 } }] }'
Change that ns1 above to whatever you decided to use for your “primary” nameserver record.
Now you need to “glue” it all together 😉
Run this command, replacing your domain, and the IP’s you got and set above
aws route53domains --region us-east-1 update-domain-nameservers --domain-name YOURDOMAINNAME.EXT --nameservers Name=ns1.YOURDOMAINNAME.EXT,GlueIps=THE_IPV4,THE_IPV6 Name=ns2.YOURDOMAINNAME.EXT,GlueIps=THE_IPV4,THE_IPV6 Name=ns3.YOURDOMAINNAME.EXT,GlueIps=THE_IPV4,THE_IPV6 Name=ns4.YOURDOMAINNAME.EXT,GlueIps=THE_IPV4,THE_IPV6
Congratulations, you have now whitelabeled your nameservers to a domain of your chosing. You can move forward with updating the rest of your domains nameservers if you wish to utilize these new nameservers. If they are managed at Route53, you can use the following to utilize the delegation set you created earlier.
# Force the nameservers upon us aws route53 change-resource-record-sets --hosted-zone-id /hostedzone/YOUR_HOSTED_ZONE_ID --change-batch '{ "Changes": [{ "Action": "UPSERT", "ResourceRecordSet": { "Name": "YOUR_OTHER_DOMAINNAME.EXT", "Type": "NS", "ResourceRecords": [ {"Value": "ns1.YOURDOMAINNAME.EXT."}, {"Value": "ns2.YOURDOMAINNAME.EXT."}, {"Value": "ns3.YOURDOMAINNAME.EXT."}, {"Value": "ns4.YOURDOMAINNAME.EXT."} ], "TTL": 7200 } }] }'
# Force the SOA upon us aws route53 change-resource-record-sets --hosted-zone-id /hostedzone/YOUR_HOSTED_ZONE_ID --change-batch '{ "Changes": [{ "Action": "UPSERT", "ResourceRecordSet": { "Name": "YOUR_OTHER_DOMAINNAME.EXT", "Type": "SOA", "ResourceRecords": [ {"Value": "ns1.YOURDOMAINNAME.EXT. hostmaster.YOURDOMAINNAME.EXT. 2018080301 7200 900 1209600 8600"} ], "TTL": 7200 } }] }'
# Set the "no glue needed" nameserver records aws route53domains --region us-east-1 update-domain-nameservers --domain-name YOUR_OTHER_DOMAINNAME.EXT --nameservers Name=ns1.YOURDOMAINNAME.EXT Name=ns2.YOURDOMAINNAME.EXT Name=ns3.YOURDOMAINNAME.EXTName=ns4.YOURDOMAINNAME.EXT