GeoDNS چیست و چگونه آن را پیادهسازی کنیم؟
در این مقاله میخوانید
- GeoDNS چیست؟
- نحوه کار GeoDNS چگونه است؟
- مزایای استفاده از GeoDNS
- معرفی معایب GeoDNS
- چرا GeoDNS در ایران دقت قابل اتکایی ندارد؟
- آموزش پیادهسازی سرویس GeoDNS
- نکات مهم فنی که باید در پیادهسازی GeoDNS رعایت کنید!
- Geo Load Balancing چیست و چه نقشی در عملکرد سایت دارد؟
- چه کسانی باید از GeoDNS استفاده کنند؟
- GeoDNS چه تفاوتی با DNS معمولی دارد؟
- تفاوت GeoDNS با Anycast DNS چیست؟
- آیا GeoDNS راهکاری مطمئن برای حفظ کامل سئو و دسترسی کاربران است؟
- کدام شرکتها سرویس GeoDNS را ارائه میدهند؟
- جمعبندی
- سوالات متداول
همانطور که میدانید، فاصله بین مکان جغرافیایی کاربر تا سرور یک سایت هر چقدر بیشتر باشد، مدت زمان بیشتری طول میکشد تا یک سایت بارگذاری شود. این مسئله به صورت مستقیم روی سئو و تجربه کاربری اثرگذار است. اگر کاربرانی از سراسر جهان دارید و میخواهید همه آنها سرعت تقریبا بالایی را در زمان استفاده از سایت شما تجربه کنند، GeoDNS به کمکتان میآید. این سرویس حتی در زمان قطع شدن اینترنت بینالملل در ایران، کمک میکند که کاربر به سرویس در دسترس هدایت شود و به این صورت امکان دسترسی کاربران را فراهم میکند. در نتیجه خواندن این مقاله از بخش آموزش DNS بلاگ پارسپک را به همه افرادی که در این حوزه فعالیت میکنند، توصیه میکنیم.
GeoDNS چیست؟
GeoDNS یک سرویس قدیمی است که با کمک آن میتوان موقعیت مکانی کاربر را تشخیص داد؛ سپس بسته به موقعیت جغرافیایی کاربر درخواستدهنده، این سرویس نزدیکترین IP را برای اتصال انتخاب میکند. با این ویژگی حتی در زمان قطعی اینترنت بینالملل کاربرانتان چه از داخل و چه از خارج به سایت شما دسترسی خواهند داشت. همچنین این مکانیابی باعث میشود تا کاربران با تاخیر کمتر و سرعت بارگذاری بیشتر به سایت دسترسی پیدا کنند. البته به یاد داشته باشید که پیادهسازی و استفاده از GeoDNS، کاری بسیار پیچیده است. همچنین این روش در شناسایی موقعیت جغرافیایی دقت پایینی داشته و حدودا در ۷۰% مواقع لوکیشن درخواستدهنده را نادرست تشخیص میدهد.
در مقاله زیر با روشهای تضمینشده که حتی در زمان قطع شدن اینترنت بینالملل در ایران هم دسترسی رباتهای گوگل و کاربران داخلی و خارجی را به سایت شما حفظ میکند، آشنا میشوید:
نحوه کار GeoDNS چگونه است؟
GeoDNS بر پایه اطلاعات موقعیت جغرافیایی، آدرس IP کاربر یا DNS resolver عمل میکند. حالا این عبارت به چه معناست؟ در واقع وقتی کاربر درخواست DNS ارسال میکند، این درخواست ابتدا به resolver میرود. حالا GeoDNS با استفاده از پایگاه دادههای GeoIP و IP resolver موقعیت کاربر را به صورت تقریبی حدس میزند. سپس آدرس IP مناسبترین سرور (مثلا نزدیکترین دیتاسنتر) را به کاربر باز میگرداند. در مقاله آیپی چیست از پارسپک، زیر و بم مفهوم IP را بررسی کردهایم، پس اگر هنوز با این مفهوم آشنایی عمیقی ندارید، توصیه میکنیم که حتما این مطلب را بخوانید.
مزایای استفاده از GeoDNS
استفاده از GeoDNS مزایای قابل توجهی برای سایتها و سرویسهای آنلاین دارد که از جمله آنها میتوان به موارد زیر اشاره کرد:
- کاهش تاخیر و افزایش سرعت بارگذاری سایت
- افزایش احتمال دسترسی کاربران از مناطق مختلف جهان، حتی در زمان قطعی اینترنت بینالملل در ایران
- توزیع بهتر ترافیک به سمت سرورهای نزدیکتر
- بالا بردن پایداری و دسترسی (در صورت خرابی یک سرور)
- قابلیت ارائه محتوای محلی یا مطابق با قوانین منطقهای
- بهبود تجربه کاربر
معرفی معایب GeoDNS
GeoDNS در کنار مزایا و ویژگیهای مثبت، نقصهای متعددی هم دارد. در ادامه به برخی از این معایب اشاره کردهایم:
- کارایی کمتر نسبت به روشهای جدیدتر
- دقت پایین در تشخیص موقعیت (۷۰% اشتباه در شناسایی موقعیت)
- هزینه بالا برای راهاندازی
- پیادهسازی پیچیده (نیاز به دانش فنی عمیق)
با توجه به معایبی که در این بخش نام بردیم، پیشنهاد ما جایگزین کردن یک روش بهتر، یعنی استفاده از Custome PopSite Rule، است.
چرا GeoDNS در ایران دقت قابل اتکایی ندارد؟
مکانیزم GeoDNS برای هدایت کاربر نهایی به نزدیکترین یا مناسبترین سرور، به تشخیص جغرافیایی IP کاربر وابسته است. این تشخیص در معماریهای مدرن DNS عمدتاً از طریق افزونه EDNS Client Subnet (ECS) انجام میشود که در RFC 7871 تعریف شده است.
در این مدل، Recursive DNS Resolver موظف است بخشی از آدرس IP کاربر نهایی (Subnet) را از طریق EDNS به DNS Authoritative منتقل کند تا سرور Authoritative بتواند بر اساس موقعیت واقعی کاربر، پاسخ DNS بهینه (IP مقصد مناسب) را برگرداند. اما این سازوکار تنها در صورتی بهدرستی عمل میکند که:
- DNS Resolver های ISP بهصورت صحیح پیکربندی شده باشند.
- پروتکل EDNS Client Subnet مطابق RFC 7871 پیادهسازی شده باشد.
- Resolver نقش واقعی Recursive Resolver را ایفا کند، نه صرفاً یک Forwarder ساده.
متاسفانه وضعیت پیادهسازی DNS Resolver در ISPهای ایران استاندارد نیست. در عمل، بخش قابل توجهی از ISPهای داخلی یکی از دو وضعیت زیر را دارند:
DNS Serverها صرفاً در حالت Forwarder پیکربندی شدهاند و عملاً بهعنوان یک Proxy روی Resolverهای عمومی مانند 8.8.8.8 یا 4.2.2.4 عمل میکنند. در این حالت، IP واقعی کاربر نهایی به DNS Authoritative منتقل نمیشود.
در مواردی که DNS Serverهای مستقل یا Authoritative پیادهسازی شدهاند، متأسفانه RFC 7871 و EDNS Client Subnet بهدرستی یا اصلاً پیادهسازی نشده است.
در نتیجه در چنین شرایطی، DNS Authoritative که مسئول پاسخگویی به کوئری دامنه شماست، در بخش قابل توجهی از درخواستها (حدود ۳۰٪ یا بیشتر) به IP واقعی کاربر نهایی دسترسی ندارد. به همین دلیل تشخیص موقعیت جغرافیایی کاربر نادرست انجام میشود و کاربر به سرور نامناسب یا ناحیه جغرافیایی اشتباه هدایت میشود. همچنین در همین فرایند تاخیر (Latency) افزایش مییابد و تجربه کاربری نیز کاهش پیدا میکند. اگر با مفهوم تاخیر یا latency آشنایی ندارید، پیشنهاد میکنیم که مقاله latency چیست را بخوانید.
راهکار مطمئنتر در این شرایط، انتقال تصمیمگیری مسیریابی از لایه DNS به لایه ۳ شبکه است که مسیریابی بر اساس BGP انجام میشود و میتوان از روش Anycast کاربر را به نزدیکترین Edge CDN با دقت نزدیک به ۱۰۰% رساند. باید در اینجا اشاره کنیم که BGP پروتکلی است که به روترها امکان به اشتراکگذاری مسیریابی را میدهد. برای اطلاعات بیشتر درباره روتر و نحوه کار آن مقاله روتر چیست را بخوانید.
آموزش پیادهسازی سرویس GeoDNS
پیادهسازی GeoDNS میتواند از دو روش کلی انجام شود:
۱. استفاده از سرویسهای مدیریت DNS
۲. راهاندازی GeoDNS بهصورت دستی
در این بخش هر دو روش را به صورت مجزا بررسی میکنیم:
روش اول: استفاده از سرویسهای DNS با پشتیبانی GeoDNS
استفاده از DNS Providerهایی که GeoDNS را آماده ارائه میدهند، سادهترین راه برای استفاده از این سرویس هستند. به طور مثال شما میتوانید از گزینههای رایجی مانند Cloudflare (Geo Steering)، GCore DNS یا NS1 استفاده کنید.
۱. برای این کار تنها کافی است که دامنه را به DNS آنها منتقل کنید.
۲. سپس یک رکورد A یا CNAME بسازید.
۳. در این مرحله که مرحله آخر است، باید قانون جغرافیایی تعریف کنید؛ مثلا اگر کاربر از ایران درخواست را ارسال کرد با کدام IP سرور به او پاسخ داده شود.
روش دوم: پیادهسازی دستی (برای افراد فنی)
پیادهسازی دستی GeoDNS نیازمند دانش مناسب در حوزه DNS، شبکه و معماری سرویسهای توزیعشده است و معمولا برای افراد مبتدی توصیه نمیشود. در این روش شما باید یک DNS Authoritative راهاندازی کنید که بتواند بر اساس موقعیت جغرافیایی منبع درخواست (DNS Resolver) پاسخ متفاوتی برگرداند. در ادامه، مراحل استاندارد و فنی پیادهسازی GeoDNS بهصورت دستی را بررسی میکنیم.
۱. راهاندازی DNS Authoritative قابل سفارشیسازی
اولین قدم، راهاندازی یک Authoritative DNS Server است که امکان منطقنویسی و پاسخدهی پویا داشته باشد. از گزینههای رایج میتوان به موارد زیر اشاره کرد:
- PowerDNS Authoritative Server (پیشنهاد اصلی)
- BIND (پیچیدهتر و محدودتر برای GeoDNS)
- راهکارهای سفارشی مبتنی بر dnsdist یا Lua
نکته:
PowerDNS به دلیل پشتیبانی از Lua Records، سازگاری با MaxMind GeoIP و انعطافپذیری بالا، گزینه مناسبتری نسبت به BIND برای پیادهسازی GeoDNS محسوب میشود.
نصب PowerDNS روی اوبونتو:
sudo apt update sudo apt install pdns-server pdns-backend-sqlite3
در این مرحله PowerDNS بهعنوان DNS authoritative پایه راهاندازی میشود.
هر آنچه که باید درباره مراحل گامبهگام نصب BIND بدانید را در مقاله زیر را مطالعه کنید:
۲. تهیه و بهروزرسانی پایگاه داده موقعیت جغرافیایی IP
GeoDNS برای تصمیمگیری به یک پایگاه داده مکانیابی IP نیاز دارد. رایجترین و استانداردترین گزینه، دیتابیسهای MaxMind GeoLite2 هستند.
نکته:
موقعیت تشخیصدادهشده در این روش معمولا مربوط به IP واقعی کاربر نبوده و مربوط به DNS Resolver است. بنابراین دقت مکانیابی در این روش به صورت تقریبی است و نه دقیق. همچنین دیتابیس آن باید بهصورت منظم (ماهانه) بهروزرسانی شود.
نصب کتابخانههای موردنیاز:
sudo apt install libmaxminddb0 mmdb-bin
به عنوان مثال برای قرار دادن فایل دیتابیس از کد زیر استفاده کنید:
/usr/share/GeoIP/GeoLite2-Country.mmdb
۳. فعالسازی GeoDNS در PowerDNS با استفاده از Lua Records
در نسخههای جدید PowerDNS، به جای استفاده از backendهای قدیمی باید از Lua Records استفاده کرد. به منظور استفاده از این ابزار باید مراحل زیر را طی کنید:
ابتدا Lua Records را در فایل تنظیمات فعال کنید:
enable-lua-records=yes
سپس یک منطق GeoDNS با Lua تعریف میکنید. مثال ساده:
local geoip = require("geoip")
function geo_based_response(remoteip)
local country = geoip.getCountry(remoteip)
if country == "IR" then
return "192.0.2.10" -- سرور داخل ایران
elseif country == "DE" then
return "198.51.100.20" -- سرور اروپا
else
return "203.0.113.30" -- سرور پیشفرض
end
end
و سپس در Zone:
A("www.example.com", geo_based_response)
۴. تعریف سیاستهای پاسخدهی جغرافیایی (Geo Policies)
در این مرحله باید مشخص کنید که هر کشور یا منطقه به کدام IP یا دیتاسنتر هدایت شود. بهطور معمول سیاستها به این شکل تعریف میشوند:
- کاربران ایران → سرور داخل کشور
- کاربران اروپا → دیتاسنتر اروپا
- سایر مناطق → سرور پیشفرض
همچنین میتوانید:
- fallback تعریف کنید.
- یا چند IP برای هر منطقه برگردانید. (Round-Robin)
۵. تنظیم TTL و مدیریت کش
TTL نقش بسیار مهمی در عملکرد GeoDNS دارد:
TTL کوتاه (۳۰–۶۰ ثانیه) باعث تغییر مسیر سریعتر میشود، اما در عین حال بار بیشتر روی DNS هم خواهد بود. هر چقدر TTL بیشتر باشد، کش پایدارتر و انعطافپذیری در شرایط اضطراری کمتر است.
نکته:
برخی DNS Resolverهای عمومی (مانند Google DNS یا Cloudflare) ممکن است TTLهای بسیار کوتاه را نادیده بگیرند یا حداقل TTL اعمال کنند.
۶. تست و اعتبارسنجی عملکرد GeoDNS
پس از پیادهسازی، باید پاسخها را از Resolverهای مختلف بررسی کنید.
نمونه تست با dig:
dig www.example.com @8.8.8.8
یا:
dig www.example.com +short
برای تست از کشورهای مختلف میتوانید از DNS Checker یا Looking Glassها و همچنین VPSها در مناطق جغرافیایی مختلف استفاده کنید تا مطمئن شوید پاسخ DNS بسته به موقعیت تغییر میکند.
نکات مهم فنی که باید در پیادهسازی GeoDNS رعایت کنید!
در این بخش چند نکته مهم و کاربردی را بررسی میکنیم که دانستن آنها در زمان استفاده از GeoDNS به شما کمک میکند.
نظارت بر صحت عملکرد
یکی از بهترین روشها برای اطمینان از عملکرد صحیح GeoDNS نظارت دائمی است. این کار را میتوانید با استفاده از ابزارها و تکنیکهای موجود برای مانیتورینگ DNS انجام دهید. به طور مثال استفاده از ابزارهایی مانند DNSPerf، Zonemaster، Datadog و UptimeRobot برای انجام این کار توصیه میشود.
استفاده از EDNS0 Client Subnet
گاهی اوقات ممکن است که GeoDNS نتواند موقعیت مکانی کاربران را به دلیل استفاده از CDN یا سرویسهای دیگر به درستی تشخیص دهد. به منظور جلوگیری از وقوع این مشکل، میتوان از EDNS0 Client Subnet استفاده کرد.
پیکربندی TTL مناسب
TTL مخفف عبارت Time to Live است که به معنای زمانی است که اطلاعات در کش باقی میمانند. شما باید بدانید که در GeoDNS داشتن TTL خیلی کوتاه بار DNS را زیاد میکند و TTL طولانی مانع از بهروزرسانی سریع در مواقع اضطراری میشود. به همین دلیل است که میگوییم پیکربندی TTL اهمیت زیادی دارد. اگر میخواهید در مورد نحوه تغییر TTL و روش تعیین آن اطلاعات بیشتری کسب کنید، مقاله آموزش تغییر TTL را مطالعه کنید.
برخورداری از امنیت قوی
در GeoDNS باید از برخی پروتکلهای امنیتی پشتیبانی شود تا یک وبسایت از انواع خطرات و حملات سایبری مختلف در امان بماند. به خصوص در زمان بازیابی اطلاعات پس از فاجعه یا انتقال ترافیک این مسئله اهمیت بسیار زیادی پیدا میکند. برای کسب اطلاعات بیشتر درباره بازیابی پس از فاجعه، به مقاله Disaster Recovery چیست مراجعه کنید.
Geo Load Balancing چیست و چه نقشی در عملکرد سایت دارد؟
برخلاف GeoDNS که فقط IP مناسب برای DNS برمیگرداند، Geo Load Balancing میتواند در هر منطقه ترافیک را بین چند سرور تقسیم کند تا بهترین عملکرد و پایداری را ارائه دهد. این روش باعث میشود که بار سرورها متعادل بماند و حتی در صورت خرابی یکی از سرورها، سیستم بهصورت هوشمند ترافیک را به سرورهای سالم هدایت کند.
چه کسانی باید از GeoDNS استفاده کنند؟
برای هر سایتی میتوانید از GeoDNS استفاده کنید. به خصوص کسبوکارهایی که در ادامه نام میبریم، بیشترین بهره را از بکارگیری GeoDNS میبرند:
- وبسایتها یا اپلیکیشنهایی که کاربرانشان در کشورهای مختلف هستند.
- پلتفرمهایی با نیاز به سرعت بالا مثل بازی آنلاین یا استریمینگ
- سرویسهایی با قوانین محلی متفاوت (مثلا قوانین ذخیره داده در اتحادیه اروپا)
- سرویسهای با ترافیک بالا که میخواهند هزینه پهنای باند را کاهش دهند.
- افرادی که میخواهند حتی در زمان قطعی اینترنت بینالملل یک سایت پایدار داشته باشند.
GeoDNS چه تفاوتی با DNS معمولی دارد؟
در DNS معمولی، هر کاربر در هر نقطه از جهان، یک IP واحد یا ثابت دریافت میکند. این در حالی است که GeoDNS با توجه به موقعیت DNS resolver، پاسخی متفاوت میدهد تا ترافیک به نزدیکترین یا مناسبترین سرور هدایت شود. در واقع این سرویس ترافیک را به نزدیکترین سرور هدایت میکند.
تفاوت GeoDNS با Anycast DNS چیست؟

GeoDNS و Anycast DNS هر دو برای بهبود عملکرد DNS طراحی شدهاند، اما تفاوتهایی هم با یکدیگر دارند. یکی از این تفاوتهای بزرگ آن است که GeoDNS ابتدا موقعیت کاربر را میسنجد و IP نزدیکترین سرور را به او ارائه میدهد؛ اما Anycast DNS نزدیکترین سرور از نظر مسیریابی شبکهای را انتخاب میکند. باید بدانید که به طور کلی استفاده از GeoDNS برای محتواهای بومی یا اعمال قوانین خاص هر منطقه، نتیجهای بهتر از Anycast دارد.
آیا GeoDNS راهکاری مطمئن برای حفظ کامل سئو و دسترسی کاربران است؟
در تئوری، GeoDNS میتواند با هدایت کاربران به نزدیکترین سرور، زمان پاسخگویی را کاهش داده و تجربه کاربری بهتری ایجاد کند؛ عاملی که در شرایط ایدهآل میتواند به بهبود سئو کمک کند. اما در عمل، GeoDNS همواره یک راهکار قابل اتکا و بدون ریسک نیست، بهخصوص در زیرساخت اینترنت ایران!
پیادهسازی GeoDNS هزینه بالایی دارد و نیاز به تنظیمات دقیق در سطح DNS دارد. با این حال، یکی از چالشهای اصلی، دقت پایین تشخیص موقعیت مکانی کاربران است. همان طور که در بالاتر گفته شد در ایران، به دلیل پیکربندی نادرست DNS در بسیاری از ISPها، استفاده گسترده از DNSهای Forwarder و عدم پیادهسازی صحیح استانداردهایی مانند EDNS Client Subnet (RFC 7871)، درصد قابل توجهی از درخواستها موقعیت واقعی کاربر به درستی به سرور authoritative منتقل نمیشود. نتیجه این وضعیت، هدایت اشتباه کاربر است.
این موضوع نهتنها میتواند باعث افزایش latency شود، بلکه در سناریوهایی مانند اختلال یا قطع اینترنت بینالملل، برخلاف انتظار، دسترسی کاربران داخلی را نیز با مشکل مواجه میکند. از منظر سئو نیز، رفتارهای ناپایدار در پاسخدهی، تغییرات غیرقابل پیشبینی IP و افزایش خطاهای دسترسی میتواند اثر منفی داشته باشد.
بنابراین، اتکا صرف به GeoDNS بهعنوان یک راهکار مطمئن برای حفظ کامل سئو و دسترسی پایدار کاربران توصیه نمیشود. در بسیاری از پروژهها، استفاده از راهکارهای دقیقتر و قابلکنترلتر مانند Custom POPSite Rule (بر اساس IP، ASN، هدرها یا منطق مسیریابی اختصاصی در لایه CDN یا Load Balancer) میتواند نتایج پایدارتر، قابل پیشبینیتر و کمریسکتری ارائه دهد.
معرفی Custome PopSite Rule و نحوه پیادهسازی آن را در مطلب زیر بخوانید:
کدام شرکتها سرویس GeoDNS را ارائه میدهند؟
از جمله شرکتهایی که در سطح جهانی، خدمات GeoDNS را ارائه میدهند میتوان به Akamai Edge DNS، Amazon Route 53، Azure DNS، Cloudflare DNS، NS1، EasyDNS و ClouDNS اشاره کرد؛ این سرویسها از طریق پنلهای تحت وب و API، به مدیران شبکه اجازه میدهند که ترافیک DNS را به نزدیکترین سرور یا نقطه حضور هدایت کنند تا کارایی، دسترسپذیری و پاسخدهی سرویسها در سطح جهانی بهینه شود. در ایران هم شرکتهایی هستند که سرویسهای تخصصی GeoDNS را ارائه میدهند اما به نسبت ارائهدهندگان خارجی پشتیبانی کامل و تخصصی ندارند. به همین دلیل توصیه میشود که در صورت نیاز از ارائهدهندگان خارجی برای دریافت این سرویس استفاده کنید.
جمعبندی
در این مقاله همه نکات ضروری و مهم درباره GeoDNS را برای شما شرح دادیم؛ از ماهیت این سرویس تا نحوه پیادهسازی و استفاده از آن. با مطالعه این مطلب حالا میتوانید در مواقع ضروری و نیاز با استفاده از GeoDNS سایت خود را از نظر سرعت و دسترسی دائمی بهینهسازی کنید. در نهایت هم تجربه کاربری بهتری به مخاطبین خود ارائه دهید.
سوالات متداول
۱. آیا GeoDNS برای سایتهای کوچک هم لازم است؟
خیر، اگر اکثر کاربران شما در یک کشور هستند، استفاده از GeoDNS ممکن است هزینهبر باشد و مزیت زیادی نداشته باشد. اما این سرویس میتواند در زمان قطع اینترنت بینالملل، حتی برای سایتهای کوچک و کسبوکارهای نوپا هم انتخابی مناسب باشد.
۲. GeoDNS چگونه باعث افزایش سرعت سایت میشود؟
با هدایت کاربران به نزدیکترین سرور، فاصله انتقال داده کاهش مییابد و سرعت بارگذاری سایت افزایش مییابد.
۳. آیا GeoDNS با CDN تفاوت دارد؟
بله، CDN محتوای سایت را در سرورهای مختلف ذخیره میکند، اما GeoDNS فقط DNS را هوشمند میکند تا کاربران به سرعت به سرور مناسب وصل شوند.
۴. آیا GeoDNS امنیت DNS را افزایش میدهد؟
خود GeoDNS ابزار امنیتی نیست، اما در معماریهای پیشرفته همراه با DNSSEC و روشهای دیگر میتواند به پایداری و جلوگیری از برخی حملات کمک کند.