Khi sử dụng dynamic DNS, namecheap cho phép cập nhật IP động cho
- @: domain chính, thí dụ domain.com
- subdomain: subA thay cho subA.domain.com
- *: thay cho tất cả subdomain, không tính @
Trong trường hợp * và một subdomain được cập nhật IP khác nhau thì sub domain được ưu tiên dùng IP của mình.
Mỗi tên miền dùng dynamic DNS có một mật khẩu để cập nhật IP do namecheap cấp, không phải mật khẩu đăng nhập. Trước khi dùng script, khai báo các tham số trong mảng DOMAIN của script. Nếu update IP gặp lỗi, script sẽ gởi email thông báo về REPORT_TO.
#!/bin/bash
# namecheap
# Update dynamic IP for DNS record A on cloudflare
# © 2020 LNT <lnt@ly-le.info>
# version 20200424
#
TMP='/tmp/namecheap.ip'
REPORT_TO='mailme@domain.com'
declare -a DOMAIN
# Giả sử muốn cập nhật cho domain1.com: @,subdomain1,subdomain2,*
DOMAIN=(
'domain1.com:password1 @,subdomain1,subdomain2,*'
'domain2.org:password2 @,*'
)
[ -f "$TMP" ] && oIP=$(<$TMP) || oIP=''
IP=$(curl -s http://icanhazip.com/)
printf $IP > $TMP
if [ "$IP" != "$oIP" ]; then
msg=''
for data in "${DOMAIN[@]}"; do
oIFS=$IFS
read -r user sub <<< $data
IFS=: read -r dom pwd <<< $user
IFS=, read -ra hosts <<< $sub
IFS=$oIFS
for host in "${hosts[@]}"; do
ret=$(curl -s "http://dynamicdns.park-your-domain.com/update?host=$host&domain=$dom&password=$pwd" | grep -oP '(?<=<Done>)[^<]*')
[ "$ret" = 'true' ] || msg="${msg}- Updating $host for $domain FAILED!\n"
done
done
fi
[ "$msg" ] && echo "$msg" | mail -s "Update Dynamic IP" $REPORT_TO