در قطعی اینترنت بینالملل، دامنهی سایت فقط وقتی برای کاربر داخل ایران باز میشود که همهی حلقههای پاسخ DNS داخل کشور باشند: سرورهای پسوند دامنه، نیمسرورهای خود دامنه و حتی نشانی همان نیمسرورها. ۲۵ مهر ۱۴۰۵ این زنجیره را از یک سرور در دیتاسنتر ایران اندازه گرفتیم: سه سرور از چهار سرور پسوند ir داخل کشور و در ۴ تا ۸ میلیثانیه جواب دادند، اما هیچیک از سرورهای پسوند com، net، org و cloud داخل ایران نبود. دو سرور ریشهی DNS هم نسخهای در تهران دارند. این راهنما زنجیره را حلقهبهحلقه باز میکند، نشان میدهد کجا میشکند — از جمله حلقهای که کمتر کسی به آن فکر میکند، یعنی نام خود نیمسرور — و با یک چکلیست، دامنه و سایتتان را برای روز قطعی آماده میکند.
یک دامنه از داخل ایران چطور به آیپی میرسد؟ چهار حلقهی زنجیره
وقتی کاربری نشانی سایت را باز میکند، رزولور اپراتورش — مثلاً رزولور مخابرات — پاسخ را از چهار جا جمع میکند، مگر اینکه از قبل در حافظهاش داشته باشد:
- سرور ریشه میگوید پسوند ir یا com را از کدام سرورها بپرسد.
- سرورهای پسوند (برای ir، سرورهای ایرنیک) میگویند نیمسرورهای دامنهی شما چه نامهایی دارند.
- نشانی نیمسرورها باید پیدا شود؛ اگر نام نیمسرور زیر دامنهی دیگری است، این خودش یک پرسش جداگانه با همین چهار حلقه است.
- نیمسرور دامنه آیپی سایت را میدهد.
هر پاسخ مدتی، به اندازهی TTL خودش، در حافظهی رزولور میماند. در قطعی، پاسخی که هنوز در حافظه است کار میکند و پاسخی که تمام شده باید دوباره پرسیده شود؛ اگر یکی از این چهار جا بیرون از ایران باشد، همانجا زنجیره پاره میشود. مدت نگهداریها را هم اندازه گرفتیم: سرور ریشه نیمسرورهای پسوند ir و com را با TTL دو روز (۱۷۲۸۰۰ ثانیه) میدهد، ایرنیک نیمسرورهای یک دامنهی ir را با TTL پانزده دقیقه (۹۰۰ ثانیه)، و سرورهای com نیمسرورهای یک دامنهی com را با TTL دو روز.
سرورهای ریشه، ir و com از داخل ایران: اندازهگیری واقعی
مبدأ: سروری در شبکهی مهران هاست در دیتاسنتر داخل ایران، شنبه ۲۵ مهر ۱۴۰۵ حدود ساعت ۲۲:۴۰ به وقت تهران. برای هر سرور، زمان پاسخ و شناسهای را که خود سرور دربارهی محل نسخهاش برمیگرداند (پرسش hostname.bind) ثبت کردیم:
| لایه | سرورها | زمان پاسخ از ایران | محل نسخهای که جواب داد |
|---|---|---|---|
| ریشه | k.root-servers.net | ۴ ms | تهران (ns3.ir-thr.k.ripe.net) |
| ریشه | i.root-servers.net | ۲۰ ms | تهران (s1.thr) |
| ریشه | یازده سرور دیگر (a تا m) | ۶۰ تا ۳۲۰ ms | آمستردام، فرانکفورت، استانبول، ژنو، بخارست، توکیو؛ d پاسخ نداد |
| پسوند ir | a.nic.ir، b.nic.ir، d.nic.ir | ۴ تا ۸ ms | داخل ایران |
| پسوند ir | c.nic.ir | ۹۶ ms | بیرون از ایران |
| پسوند com و net | a تا h.gtld-servers.net | ۸۸ تا ۱۷۶ ms | لندن، ژنو، واشنگتن، مارسی |
| پسوند org | شش سرور | ۸۸ تا ۳۱۶ ms | آمستردام، فرانکفورت، پاریس، میامی |
| پسوند cloud | چهار سرور | ۵۶ تا ۲۴۰ ms | همه بیرون از ایران |
نتیجه روشن است: برای دامنهی ir، دو حلقهی اول زنجیره داخل کشور جواب دارند — نسخههای تهرانِ سرور ریشهی K و I، و سه سرور ایرنیک. برای دامنهی com، net یا org هیچ سرور پسوندی داخل ایران نیست. در قطعی، چنین دامنهای تا وقتی باز میشود که رزولورهای اپراتورها پاسخهای قبلی را در حافظه دارند؛ نیمسرورهای دامنهی com تا دو روز در حافظه میمانند و بعد از آن، رزولوری که دوباره بپرسد بیجواب میماند. اینکه نسخههای تهرانِ سرورهای ریشه در روز قطعی هم پاسخ بدهند به تصمیم گردانندگانشان بستگی دارد؛ ما فقط وضعیت روز اندازهگیری را گزارش میکنیم.
حلقهای که کمتر گفته میشود: نشانی خود نیمسرور و رکورد glue
فرض کنید دامنهی example.ir روی نیمسرورهای ns1.provider.cloud است و خود آن نیمسرور در تهران. ایرنیک فقط نام ns1.provider.cloud را برمیگرداند، نه آیپیاش را، چون آن نام زیر پسوند cloud است و ایرنیک مرجعش نیست. رزولور برای پیدا کردن آیپی باید سراغ سرورهای پسوند cloud و بعد نیمسرورهای provider.cloud برود؛ اگر اینها بیرون از ایران باشند، در روز قطعی پیدا کردن نشانی نیمسرور فقط تا وقتی ممکن است که آن نشانی در حافظهی رزولور مانده باشد — و این مدت را TTL رکورد آدرس نیمسرور تعیین میکند، که گاهی فقط چند دقیقه است.
راه بستن این حلقه رکورد glue است: نیمسرور با نامی زیر خود ir، مثل ns1.example.ir، که آیپیاش در خود ایرنیک ثبت شده باشد. آنوقت سرور ایرنیک هم نام نیمسرور و هم آیپیاش را در یک پاسخ برمیگرداند و زنجیره تمامداخلی میشود. در پنل ایرنیک این همان ستون «آیپی کارگزار» است که فقط برای نیمسرورِ زیر دامنهی ir پر میشود؛ مسیر پنل را در راهنمای اتصال دامنه به سرور مجازی آوردهایم. نیمسرور زیر دامنهی خودتان یعنی سرویس DNS را هم خودتان روی یک سرور داخل ایران اجرا میکنید، با همهی مسئولیت نگهداریاش.
اینکه دامنهی شما glue دارد یا نه، با یک دستور معلوم میشود: از یکی از سرورهای ایرنیک نیمسرورهای دامنه را بپرسید و ببینید در بخش ADDITIONAL آیپی آمده یا نه.
dig +norec @a.nic.ir example.ir NS
;; AUTHORITY SECTION:
example.ir. 900 IN NS ns1.example.ir.
example.ir. 900 IN NS ns2.example.ir.
;; ADDITIONAL SECTION:
ns1.example.ir. 900 IN A 203.0.113.53 <- glue: the address comes from IRNIC itself
اگر بخش ADDITIONAL خالی بود، نشانی نیمسرورها را جداگانه بپرسید و TTL آن را ببینید: dig ns1.provider.cloud A. نیمسرورهای رایگان مهران هاست، ns1.mehranhost.cloud و ns2.mehranhost.cloud، یکی داخل ایران و یکی در اروپاست و از داخل ایران ns1 در ۴ میلیثانیه پاسخ داد؛ اما نام هر دو زیر پسوند cloud است، پس همین حلقه دربارهی آنها هم صدق میکند. اگر باز ماندن دامنه در یک قطعی طولانی برای کسبوکارتان حیاتی است، الگوی نیمسرور زیر ir با glue را در نظر بگیرید.
TTL رکوردها در قطعی: کوتاه بهتر است یا بلند؟
اگر نیمسرور دامنه داخل ایران است و نشانیاش هم از داخل پیدا میشود، TTL رکوردهای سایت اهمیت زیادی ندارد: رزولور هر بار که حافظهاش تمام شود، دوباره از نیمسرور داخلی میپرسد و جواب میگیرد. TTL وقتی حیاتی میشود که یکی از حلقهها بیرون از ایران است؛ آنوقت TTL بلندتر یعنی چند ساعت یا چند روز بیشتر زنده ماندن پاسخ قبلی. بهای TTL بلند هم معلوم است: تغییر آیپی دیرتر به همه میرسد. یک قاعدهی عملی: TTL را در روزهای عادی روی ۳۶۰۰ ثانیه نگه دارید و فقط پیش از جابهجایی برنامهریزیشدهی سرور کوتاهش کنید — توضیح کامل TTL در آموزش رکوردهای DNS آمده است.
خود سرور هم باید DNS داخلی داشته باشد
سایت شما فقط مقصد پرسش DNS نیست؛ خود سرور هم برای هر کاری که با نام انجام میدهد — تأیید تراکنش با درگاه پرداخت، فرستادن پیامک، خواندن یک API — باید نامها را resolve کند. سرورهای ابری مهران هاست بهطور پیشفرض با رزولورهای 8.8.8.8 و 1.1.1.1 تحویل میشوند که بیرون از ایراناند؛ از داخل ایران هر پرسش بیکش به آنها ۵۶ تا ۱۰۸ میلیثانیه طول کشید، در حالی که رزولورهای مخابرات (217.218.127.127 و 217.218.155.155) در ۴ تا ۸ میلیثانیه جواب دادند. در روز قطعی، سروری که رزولورش خارجی است حتی نام درگاه پرداخت داخلی را هم پیدا نمیکند. دستور عوضکردن رزولور روی اوبونتو و ویندوز را در بخش DNS راهنمای سرور سرخطی نوشتهایم؛ یک رزولور خارجی را هم بهعنوان پشتیبان نگه دارید تا در روزهای عادی، اگر رزولور داخلی مشکل داشت، سرور بیDNS نماند.
DNS درست است؛ سایت باز هم ممکن است در قطعی بیفتد اگر…
یک سال گذشته دو قطعی سراسری داشت؛ دومی از ۹ اسفند ۱۴۰۴ شروع شد و تا بازگشت جزئی دسترسی ۸۸ روز طول کشید، طبق گزارش فرانس۲۴. در چنین بازهای، سایتی که DNS آن کاملاً داخلی است هم ممکن است به یکی از این دلیلها از دسترس بیرون برود:
- گواهی SSL منقضی میشود. گواهی رایگان Let's Encrypt ۹۰ روز اعتبار دارد و سرورهای صدورش بیرون از ایراناند؛ certbot معمولاً ۳۰ روز مانده به پایان تمدید میکند، پس در یک قطعی طولانی گواهی وسط قطعی تمام میشود و مرورگر هشدار امنیتی نشان میدهد. گواهیهای پولی هم از ۲۴ اسفند ۱۴۰۴ حداکثر ۲۰۰ روز اعتبار دارند (قاعدهی تازهی CA/Browser Forum). در دورههای پرخطر، گواهی را زودتر تمدید کنید تا اعتبار کامل بگیرد: certbot renew --force-renewal.
- سایت پشت CDN خارجی است. اگر رکورد سایت به لبههای یک CDN خارجی مثل کلادفلر اشاره میکند، کاربر ایرانی در قطعی به آن لبهها نمیرسد، حتی اگر سرور مبدأ داخل ایران باشد.
- صفحه به فایلهای خارجی وابسته است. فونت، اسکریپت یا تصویری که از سرور خارجی بارگذاری میشود صفحه را نیمهکاره یا کند میکند؛ روش پیدا کردن و حذف این وابستگیها در سرعت سایت روی نت ملی آمده است.
- خود سرور بیرون از ایران است. هیچ تنظیم DNSی سروری را که در آلمان است برای کاربر ایرانیِ پشت قطعی در دسترس نمیکند؛ چه چیزهایی روی سرور ایران در آن روزها کار میکند در رفتار سرور ایران در قطعی آمده است.
- ایمیل به سرور خارجی میرود. اگر رکورد MX دامنه به سرویس ایمیل خارجی اشاره کند، در قطعی ایمیل نه میرسد و نه فرستاده میشود.
چکلیست آمادهسازی دامنه و سایت برای قطعی اینترنت بینالملل
- برای سایتی که مخاطبش در ایران است، دامنهی ir داشته باشید؛ سرورهای پسوند com در ایران نسخه ندارند.
- نیمسرور دامنه داخل ایران باشد و نشانیاش هم از داخل پیدا شود: یا glue زیر ir، یا دستکم نیمسروری که رکورد آدرسش TTL بلند دارد.
- سرور سایت داخل ایران باشد و رزولور خود سرور هم داخلی.
- اگر از CDN استفاده میکنید، لبهای داخل ایران داشته باشد که مستقیم از مبدأ داخلی بخواند.
- گواهی SSL را پیش از دورههای پرخطر تمدید کنید و تاریخ پایانش را بدانید.
- وابستگیهای خارجی صفحه — فونت، اسکریپت، آنالیتیکس — را محلی کنید.
- پکیجها، ایمیجهای داکر و فایلهای لازم برای بالا آوردن دوبارهی سرویس را از قبل روی سرور داخلی داشته باشید.
اگر هنوز سرور ایران ندارید، یک سرور ابری ایران بسازید و DNS دامنه را هم رایگان در همان پنل نگه دارید؛ ساخت سرور کمتر از یک دقیقه طول میکشد و صورتحساب ساعتی است.
از کجا بفهمیم دامنه در قطعی باز میشود؟ چهار دستور
این چهار دستور را از یک سرور یا رایانهی داخل ایران اجرا کنید و نام دامنه را با دامنهی خودتان عوض کنید:
# 1. the whole chain, root to answer — where does each step come from?
dig +trace example.ir
# 2. does IRNIC hand out the nameservers' addresses (glue)?
dig +norec @a.nic.ir example.ir NS
# 3. if not: how long does a resolver keep the nameserver's address?
dig ns1.provider.cloud A # the number after the name is the TTL in seconds
# 4. when does the certificate expire?
echo | openssl s_client -connect example.ir:443 -servername example.ir 2>/dev/null | openssl x509 -noout -enddate
در خروجی dig +trace، کنار هر پاسخ نام سروری که جواب داده چاپ میشود؛ هر مرحلهای که از سرور بیرون از ایران آمده، حلقهای است که در قطعی به حافظهی رزولورها تکیه دارد. محل هر آیپی را هم میتوانید در RIPEstat ببینید.
سؤالات پرتکرار
آیا دامنهی ir در قطعی اینترنت بینالملل باز میشود؟
میتواند باز شود، به شرط آنکه نیمسرورهای دامنه داخل ایران باشند و نشانی آنها هم از داخل پیدا شود. در اندازهگیری ۲۵ مهر ۱۴۰۵ سه سرور از چهار سرور پسوند ir داخل ایران بودند و در ۴ تا ۸ میلیثانیه جواب دادند، و دو سرور ریشهی DNS هم نسخهای در تهران داشتند. اگر نام نیمسرورها زیر پسوندی مثل com یا cloud باشد، پیدا کردن نشانی آنها در قطعی به حافظهی رزولورها وابسته است؛ نیمسرور زیر ir با رکورد glue این حلقه را هم داخلی میکند.
دامنهی com در قطعی اینترنت بینالملل چه میشود؟
تا وقتی پاسخهای قبلی در حافظهی رزولورهای اپراتورها مانده باز میشود و بعد از آن نه. هیچیک از سرورهای پسوند com و net در اندازهگیری ما داخل ایران نبود و همه بین ۸۸ تا ۱۷۶ میلیثانیه فاصله داشتند. سرورهای com نیمسرورهای هر دامنه را با TTL دو روز میدهند، پس رزولوری که پس از آن دوباره بپرسد بیجواب میماند. برای سایتی که باید در قطعی باز بماند، دامنهی ir انتخاب امنتری است.
رکورد glue چیست و کجا ثبت میشود؟
رکورد glue آیپی نیمسروری است که نامش زیر خود دامنه یا پسوند آن است، مثل ns1.example.ir، و در ثبتکنندهی پسوند — برای ir در پنل ایرنیک، ستون آیپی کارگزار — ثبت میشود. با glue، سرور پسوند هم نام نیمسرور و هم آیپیاش را در یک پاسخ میدهد و رزولور برای پیدا کردن نشانی نیمسرور به هیچ سرور دیگری نیاز ندارد. نیمسروری که نامش زیر دامنه یا پسوند دیگری است glue در ایرنیک ندارد.
آیا سرور ریشهی DNS در ایران هست؟
در اندازهگیری ۲۵ مهر ۱۴۰۵ از داخل ایران، دو سرور از سیزده سرور ریشه از نسخهای در تهران پاسخ دادند: K-root با شناسهی ns3.ir-thr.k.ripe.net در ۴ میلیثانیه و I-root با شناسهی s1.thr در ۲۰ میلیثانیه. بقیه از آمستردام، فرانکفورت، استانبول، ژنو و توکیو جواب دادند. رزولورها هم فهرست سرورهای پسوندهای اصلی را دو روز در حافظه نگه میدارند، پس حلقهی ریشه معمولاً ضعیفترین حلقه نیست.
گواهی SSL سایت در قطعی اینترنت چه میشود؟
گواهی موجود تا تاریخ پایانش کار میکند، اما تمدید نمیشود، چون سرورهای صدور گواهی بیرون از ایراناند. گواهی Let's Encrypt ۹۰ روز اعتبار دارد و معمولاً ۳۰ روز مانده به پایان تمدید میشود، پس در قطعیای مثل قطعی ۸۸ روزهی ۱۴۰۴ تا ۱۴۰۵ وسط کار منقضی میشد. در دورههای پرخطر گواهی را زودتر تمدید کنید تا اعتبار کامل بگیرد؛ گواهیهای پولی هم از اسفند ۱۴۰۴ حداکثر ۲۰۰ روز اعتبار دارند.