ویرگول
ورودثبت نام
Rohollah Balvardi
Rohollah Balvardi
Rohollah Balvardi
Rohollah Balvardi
خواندن ۲ دقیقه·۲ ماه پیش

رفع خطای تمدید SSL در DirectAdmin روی سرورهای ایران


حل قطعی خطای Let’s Encrypt با تنظیم صحیح BIND و DNS

اگر سرور شما داخل ایران است، احتمالاً با مشکلات متعدد در تمدید یا صدور گواهی Let’s Encrypt در DirectAdmin روبه‌رو شده‌اید.

در بسیاری از موارد، با خطایی شبیه به این مواجه می‌شوید:

text

lookup acme-v02.api.letsencrypt.org on 8.8.8.8:53: i/o timeout

یا:

text

Could not create client: dial tcp: lookup ... i/o timeout

این خطا معمولاً به اشتباه به «قطع اینترنت ایران» یا «مشکل در Let’s Encrypt» نسبت داده می‌شود، اما ریشهٔ اصلی آن در اکثر سرورهای ایران، تنظیمات نادرست BIND و DNS داخلی است.

در این مقاله، دقیقاً توضیح می‌دهم مشکل از کجاست و چطور در کمتر از ۵ دقیقه آن را برای همیشه حل کنید.

مشکل از کجاست؟

در سرورهای DirectAdmin، سرویس BIND (یا همان named) معمولاً به صورت DNS Authoritative نصب می‌شود.

اما DirectAdmin برای ارتباط با Let’s Encrypt، نیاز دارد که خودش بتواند DNS دامنه‌های خارجی را resolve کند.

مشکل اینجاست:

BIND روی سرورهای ایران معمولاً این‌گونه تنظیم شده:

recursion غیرفعال →سرور قادر به resolve کردن دامنه‌های خارجی نیست.

forwarder تعریف نشده →درخواست‌ها به هیچ DNS خارجی ارسال نمی‌شوند.

DNSSEC فعال است →در بسیاری از مسیرهای اینترنت ایران، DNSSEC fail می‌شود و نتیجه می‌شود: SERVFAIL.

بنابراین DirectAdmin وقتی می‌خواهد دامنهٔ Let’s Encrypt را resolve کند، با خطا روبه‌رو می‌شود.

علائم واضح مشکل

اگر این دستور را بزنید:

text

dig acme-v02.api.letsencrypt.org @127.0.0.1

معمولاً خروجی شبیه زیر است:

text

status: SERVFAIL

این یعنی BIND نمی‌تواند دامنهٔ Let’s Encrypt را resolve کند، و کل پروسهٔ صدور SSL شکست می‌خورد.

راه‌حل قطعی (بدون دردسر)

با سه تغییر کوچک در فایل named.conf مشکل کاملاً حل می‌شود.

مرحله ۱: فعال کردن recursion

فایل را باز کنید:

text

nano /etc/named.conf

این خط را پیدا کنید:

text

recursion no;

و به این تغییر دهید:

text

recursion yes;

مرحله ۲: تعریف forwarders مناسب برای ایران

در بلوک options این بخش را اضافه کنید:

text

forwarders {

178.22.122.100; // Shecan

185.51.200.2; // Shecan

};

(یا Cloudflare اگر ارتباط‌تان خوب است)

text

forwarders {

1.1.1.1;

1.0.0.1;

};

مرحله ۳: غیرفعال کردن DNSSEC validation

در ایران، مسیرهای بین‌المللی باعث شکست DNSSEC می‌شوند.

این خط را:

text

dnssec-validation yes;

به این تغییر دهید:

text

dnssec-validation no;

این تغییر مهم‌ترین بخش حل مشکل است.

فایل کامل تنظیم‌شده (نسخه پیشنهادی)

این نسخه تست‌شده و کاملاً سازگار با سرورهای داخل ایران است:

text

options {

allow-transfer { none; };

listen-on port 53 { any; };

listen-on-v6 port 53 { any; };

directory "/var/named";

allow-query { any; };

recursion yes;

allow-recursion { localhost; localnets; };

forwarders {

178.22.122.100;

185.51.200.2;

};

dnssec-enable yes;

dnssec-validation no;

managed-keys-directory "/var/named/dynamic";

pid-file "/run/named/named.pid";

session-keyfile "/run/named/session.key";

include "/etc/crypto-policies/back-ends/bind.config";

};

مرحله ۴: ری‌استارت سرویس

text

systemctl restart named

مرحله ۵: تست نهایی

دوباره تست کنید:

text

dig acme-v02.api.letsencrypt.org @127.0.0.1

اگر خروجی شبیه این باشد:

text

status: NOERROR

A 172.65.32.248

یعنی BIND اکنون درست عمل می‌کند و DirectAdmin می‌تواند SSL را صادر یا تمدید کند.

پس از انجام این مراحل

به DirectAdmin بروید:

User Level → SSL Certificates → Free & automatic certificate from Let's Encrypt

و درخواست را دوباره ارسال کنید.

این بار:

✔ گواهی بدون خطا صادر می‌شود

✔ تمدید خودکار هم کاملاً پایدار می‌شود

✔ wildcard هم بدون مشکل کار می‌کند

نتیجه‌گیری

مشکل صدور SSL روی سرورهای ایران تقریباً همیشه به دلیل:

recursion غیرفعال

نبود forwarder

و خرابی DNSSEC در مسیرهای بین‌الملل

است.

با فقط سه خط تغییر، سرویس DNS سرور شما درست کار می‌کند و DirectAdmin بدون خطا SSL صادر می‌کند.

دایرکت ادمینssl
۳
۰
Rohollah Balvardi
Rohollah Balvardi
شاید از این پست‌ها خوشتان بیاید