Moving To CloudFlare
Description:
So currently, my site is gerrywilliams.ddns.net and it’s working fine. Just to learn new things, I decided to try some new things. Ultimately, I went from:
http site hosted free using noip.com => https site hosted on CloudFlare for a dollar a month for my domain name. Here are the steps I did:
To Resolve:
-
First, I found the domain name
gerrywilliams.net
on Google Domains for $12/yr. Purchased. -
I then signed up for Cloudflare and had change my DNS records in Google Domains to point to theirs. NOTE: By doing this, you will lose basically all the services that Google gives you like free emails, ex: admin@yourdomain.com or tech@yourdomain.com. That’s okay, we will get those back another way (see step 5).
- DNS servers at the time of this writing:
ali.ns.cloudflare.com
dale.ns.cloudflare.com
- DNS servers at the time of this writing:
-
The first thing I did was add an
A
record pointing my home IP address. So at this point you have one A record and the two NS records.- Record type =
A
- Name =
www
- Value =
MyPublicIPinV4Format
- TTL =
Automatic
- Record type =
-
Next, I setup the naked domain redirect.
-
Next, I setup Mailgun for the email.
-
Next, I setup SSL for my site.
-
I then had to go back to step 4 and add the
s
from http => https. -
Lastly, I wanted an automated way to update my home IP automatically so I modified this script and set it as a scheduled task (next step). All credit goes to creator of the script (see link)!
- Create a folder in your documents and copy this script
1 2 3 4
cd ~ mkdir update-ip cd /update-ip touch updateip.sh
- Copy and paste the following after modifying for your setup:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
#!/bin/bash # CHANGE THESE auth_email="user@example.com" auth_key="c2547eb745079dac9320b638fadsf5e225cf473cc5cfdda41" # found in cloudflare account settings zone_name="example.com" record_name="www.example.com" # MAYBE CHANGE THESE ip=$(curl -s http://ipv4.icanhazip.com) ip_file="ip.txt" id_file="cloudflare.ids" log_file="cloudflare.log" # LOGGER log() { if [ "$1" ]; then echo -e "[$(date)] - $1" >> $log_file fi } # SCRIPT START log "Check Initiated" if [ -f $ip_file ]; then old_ip=$(cat $ip_file) if [ $ip == $old_ip ]; then echo "IP has not changed." exit 0 fi fi if [ -f $id_file ] && [ $(wc -l $id_file | cut -d " " -f 1) == 2 ]; then zone_identifier=$(head -1 $id_file) record_identifier=$(tail -1 $id_file) else zone_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$zone_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*' | head -1 ) record_identifier=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" | grep -Po '(?<="id":")[^"]*') echo "$zone_identifier" > $id_file echo "$record_identifier" >> $id_file fi update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" -H "X-Auth-Email: $auth_email" -H "X-Auth-Key: $auth_key" -H "Content-Type: application/json" --data "{\"id\":\"$zone_identifier\",\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$ip\"}") if [[ $update == *"\"success\":false"* ]]; then message="API UPDATE FAILED. DUMPING RESULTS:\n$update" log "$message" echo -e "$message" exit 1 else message="IP changed to: $ip" echo "$ip" > $ip_file log "$message" echo "$message" fi
- Then
1 2 3
chmod +x updateip.sh ./updateip.sh # make sure it works
-
To set as a Scheduled Task (crontab):
1 2 3
crontab -e #paste in: 0,14,29,44 \* \* \* \* /home/gerry/update-ip/updateip.sh > /home/gerry/update-ip/crontab.log
-
This will update my CloudFlare IP every 15 minutes and log it to crontab.log in the same directory.
Comments