1. کاهش TTL قبل از تغییر IP (برای حداقل downtime)
وقتی قصد تغییر IP یک دامنه را دارید، بهتر است TTL رکوردها را موقتاً پایین بیاورید تا پروپاگیشن سریعتر انجام شود و کاربران کمتر دچار قطعی شوند.
روش سریع و جهانی (برای همه رکوردها):
مرحله ۱: غیرفعال کردن TTL per-record
da config-set dns_ttl 0 --restart
مرحله ۲: کاهش TTL پیشفرض (مثلاً ۳۰۰ ثانیه)
da config-set default_ttl 300 --restart
مرحله ۳: بازنویسی تمام Zoneها
/usr/local/directadmin/directadmin taskq --run "action=rewrite&value=named" --debug 2000
مرحله ۴: بازگردانی TTL به حالت عادی
da config-set dns_ttl 1 --restart
da config-set default_ttl 14400 --restart
/usr/local/directadmin/directadmin taskq --run "action=rewrite&value=named" --debug 2000
نکته: این روش TTL همه رکوردها را یکسان میکند. برای تغییر TTL یک رکورد خاص، از DNS Management استفاده کنید.
---2. افزودن رکورد SRV در DirectAdmin
رکوردهای SRV برای سرویسهایی مثل SIP، XMPP، LDAP و ... استفاده میشوند.
فرمت رکورد SRV:
_service._proto.name TTL class SRV priority weight port target
مثال واقعی:
نام رکورد (Left):
_sip._tcp.example.com.
مقدار (Right):
0 5 5060 sipserver.example.com.
نحوه اضافه کردن:
- User Level → DNS Management → domain.com
- Add Record
- Type: SRV
- Name: _sip._tcp یا نسخه کامل با نقطه
- Value: 0 5 5060 sipserver.example.com.
- TTL: دلخواه
نکته مهم: اگر نام با نقطه تمام شود، دامنه اضافه نمیشود. اگر بدون نقطه باشد، DirectAdmin دامنه را خودکار اضافه میکند.
---3. فعالسازی DNSSEC برای دامنهها
پیشنیاز:
da config-set dnssec 1 --restart
فعالسازی DNSSEC:
- Admin Level → DNS Admin → domain.com
- Generate Keys
- Sign
- کپی DS رکوردها
- افزودن DS رکوردها در Registrar
نکته برای RHEL 9 / AlmaLinux 9 / Rocky 9: فقط یک DS رکورد تولید میشود.
---غیرفعال کردن DNSSEC:
از DNS Admin → Remove Keys
یا دستی:
rm /var/named/domain.com.ksk.*
rm /var/named/domain.com.zsk.*
rm /var/named/domain.com.db.signed
rm /var/named/dsset-domain.com.
در named.conf پسوند را از .signed به .db برگردانید و سپس:
systemctl restart named
---
4. DNSSEC برای سابدامین (Subdomain Delegation)
اگر سابدامین را بهصورت دامنه کامل ساختهاید، باید زنجیره اعتماد را حفظ کنید.
مراحل:
- DNSSEC برای سابدامین (Generate Keys + Sign)
- افزودن DS رکوردها در زون والد
- افزودن NS رکوردها:
sub.domain.com. NS ns1.domain.com.
sub.domain.com. NS ns2.domain.com.
- Sign مجدد زون والد
فعالسازی DNSSEC برای کاربران:
da config-set user_dnssec_control 1 --restart
---
5. افزودن خودکار TLSA رکورد با Let's Encrypt (DANE)
هشدار: DANE برای SMTP هنوز پایدار نیست. فعلاً فقط برای HTTPS (پورت ۴۴۳) استفاده شود.
مرحله ۱: ساخت اسکریپت set_tlsa.sh
nano /usr/local/directadmin/scripts/custom/set_tlsa.sh
محتوا:
#!/bin/sh
DOMAIN=$1
TQ=/usr/local/directadmin/data/task.queue
DTQ=/usr/local/directadmin/dataskq
if [ -z "$DOMAIN" ] || [ ! -d "/etc/virtual/$DOMAIN" ]; then
echo "$DOMAIN دامنه معتبر نیست"
exit 1
fi
wget -O lets-encrypt-x3-cross-signed.pem https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem
V=$(openssl x509 -in lets-encrypt-x3-cross-signed.pem -outform DER | openssl dgst -sha256 -hex | awk '{print "2 0 1", $NF}')
echo "action=dns&do=delete&domain=${DOMAIN}&type=TLSA&name=le-ca&value=*" >> $TQ
echo "action=dns&do=delete&domain=${DOMAIN}&type=CNAME&name=_443._tcp&value=*" >> $TQ
echo "action=dns&do=add&domain=${DOMAIN}&type=TLSA&name=le-ca&value=$V" >> $TQ
echo "action=dns&do=add&domain=${DOMAIN}&type=CNAME&name=_443._tcp&value=le-ca" >> $TQ
echo 'action=named&value=reload' >> $TQ
exit 0
chmod 755 /usr/local/directadmin/scripts/custom/set_tlsa.sh
---
مرحله ۲: ساخت post-hook برای Let's Encrypt
nano /usr/local/directadmin/scripts/custom/letsencrypt_post.sh
محتوا:
#!/bin/sh
/usr/local/directadmin/scripts/custom/set_tlsa.sh $domain
exit 0
chmod 755 /usr/local/directadmin/scripts/custom/letsencrypt_post.sh
---
6. تغییرات گروهی (Mass Update) روی همه دامنهها
مثال: تغییر همه رکوردهای A مربوط به mail به IP جدید
cd /var/named
tar cvzf /root/dns_backup.tar.gz *.db
perl -pi -e 's/^mail\s+14400\s+IN\s+A\s+.*$/mail\t14400\tIN\tA\t1.2.3.4/' *.db
بازنویسی Zoneها:
echo "action=rewrite&value=named" >> /usr/local/directadmin/data/task.queue
/usr/local/directadmin/dataskq d400
---
تغییر SPF همه دامنهها به -all
perl -pi -e 's/~all/-all/' *.db
---
افزودن رکورد جدید به همه دامنهها
for d in *.db; do
domain=${d%.db}
echo "myrecord 14400 IN A 1.2.3.4" >> $d
done