آموزش راه‌اندازی GeoDNS با CoreDNS روی لینوکس

راه‌اندازی GeoDNS با CoreDNS روی لینوکس (راهنمای عملی و حرفه‌ای)

GeoDNS یا DNS مبتنی بر موقعیت جغرافیایی، یکی از تکنیک‌های مهم در زیرساخت‌های مدرن است که به شما اجازه می‌دهد
بسته به کشور یا موقعیت کاربر، IP متفاوتی را در پاسخ DNS ارائه دهید.
این روش نقش مهمی در افزایش سرعت، بهبود تجربه کاربری و ارتقای سئو دارد.


GeoDNS چیست و چرا اهمیت دارد؟

در GeoDNS، سرور DNS شما موقعیت جغرافیایی کاربر را تشخیص داده و نزدیک‌ترین سرور را به او معرفی می‌کند.
به عنوان مثال:

  • کاربران ایران → سرور ایران
  • کاربران اروپا → سرور آلمان
  • کاربران آمریکا → سرور آمریکا

این موضوع باعث کاهش Latency، افزایش سرعت بارگذاری و کاهش فشار روی یک سرور واحد می‌شود.


کاربردهای GeoDNS

  • وب‌سایت‌های بین‌المللی
  • فروشگاه‌های آنلاین
  • سرویس‌های دانلود و استریم
  • API و سرویس‌های SaaS
  • سرورهای گیم و اپلیکیشن

اگر کاربران شما از کشورهای مختلف به سایت یا سرویس شما متصل می‌شوند، استفاده از GeoDNS تقریباً ضروری است.


پیش‌نیازهای راه‌اندازی GeoDNS

  • سرور لینوکس (Ubuntu 20.04 یا بالاتر)
  • IP عمومی ثابت
  • دسترسی Root
  • DNS Authoritative (در این آموزش CoreDNS)

نکته مهم: پایداری DNS به‌شدت وابسته به کیفیت شبکه و سخت‌افزار سرور است.
برای همین استفاده از یک زیرساخت مطمئن اهمیت زیادی دارد.

سرورهای مجازی و اختصاصی نتورکفا با پورت شبکه پرسرعت، IP پایدار و دیتاسنترهای ایران و خارج،
گزینه‌ای مناسب برای راه‌اندازی GeoDNS حرفه‌ای هستند.


نصب کامل و سریع

 wget https://networkfa.net/uploads/deploy-coredns-geoip.sh && bash deploy-coredns-geoip.sh 

نصب CoreDNS

wget https://github.com/coredns/coredns/releases/download/v1.14.1/coredns_1.14.1_linux_amd64.tgz
tar -xzf coredns_1.14.1_linux_amd64.tgz
mv coredns /usr/local/bin/
chmod +x /usr/local/bin/coredns

دانلود دیتابیس GeoIP

برای تشخیص موقعیت جغرافیایی کاربران از دیتابیس GeoLite2 استفاده می‌کنیم:

mkdir -p /etc/coredns/geoip
wget -O /etc/coredns/geoip/GeoLite2-City.mmdb https://git.io/GeoLite2-City.mmdb

پیکربندی CoreDNS برای GeoDNS

فایل تنظیمات CoreDNS را ایجاد کنید:

nano /etc/coredns/Corefile
example.com:53 {
    # View for IR clients
    view ir {
        expr metadata('geoip/country/code') == 'IR'
    }
    geoip /etc/coredns/geoip/GeoLite2-City.mmdb {
      edns-subnet
    }
    metadata
    file /etc/coredns/zones/example.com.ir.db
}
example.com:53 {
    # Default view (all other clients)
    # MUST BE LAST - order is important!
    file /etc/coredns/zones/example.com.default.db
}

ساخت Zone File‌ها

کاربران ایران

nano /etc/coredns/zones/example.com.ir.db
example.com. 60 IN A 185.xxx.xxx.xxx

کاربران سایر کشورها

nano /etc/coredns/zones/example.com.default.db
example.com. 60 IN A 45.xxx.xxx.xxx

EDNS چیست و چرا در GeoDNS اهمیت دارد؟

EDNS (Extension Mechanisms for DNS) مجموعه‌ای از افزونه‌ها برای پروتکل DNS است
که امکان انتقال اطلاعات تکمیلی را بدون تغییر در ساختار اصلی DNS فراهم می‌کند.

یکی از مهم‌ترین قابلیت‌های EDNS در سناریوهای GeoDNS،
ویژگی EDNS Client Subnet (ECS) است.


EDNS Client Subnet چگونه کار می‌کند؟

در حالت عادی، سرور DNS فقط IP Resolver (مانند 8.8.8.8 یا 1.1.1.1) را مشاهده می‌کند،
نه IP واقعی کاربر نهایی.

با فعال بودن EDNS Client Subnet:

  • Resolver بخشی از IP کاربر (Subnet) را به سرور DNS ارسال می‌کند
  • سرور DNS می‌تواند موقعیت جغرافیایی دقیق‌تری تشخیص دهد
  • تصمیم‌گیری GeoDNS بر اساس موقعیت واقعی کاربر انجام می‌شود

مزایای EDNS در GeoDNS

  • تشخیص دقیق‌تر موقعیت جغرافیایی کاربران
  • هدایت کاربران به نزدیک‌ترین سرور واقعی
  • بهبود سرعت پاسخ (Latency کمتر)
  • عملکرد صحیح GeoDNS حتی هنگام استفاده از DNSهای عمومی
  • بهبود تجربه کاربری و کاهش خطای مسیریابی

فعال‌سازی EDNS در CoreDNS

در CoreDNS، استفاده از EDNS Client Subnet بسیار ساده است و تنها با یک گزینه فعال می‌شود:

geoip /etc/coredns/geoip/GeoLite2-City.mmdb {
    edns-subnet
}

با این تنظیم، CoreDNS اطلاعات EDNS ارسال‌شده توسط Resolver را برای تصمیم‌گیری GeoDNS استفاده می‌کند.


نکات مهم درباره EDNS

  • پشتیبانی EDNS به Resolver وابسته است (Google DNS و Cloudflare پشتیبانی می‌کنند)
  • EDNS فقط بخشی از IP کاربر را ارسال می‌کند، نه IP کامل
  • در صورت عدم ارسال EDNS، GeoDNS بر اساس IP Resolver تصمیم می‌گیرد
  • برای تست EDNS می‌توان از ابزارهایی مانند
    dig +subnet

    استفاده کرد

استفاده صحیح از EDNS، دقت GeoDNS را به‌طور قابل‌توجهی افزایش می‌دهد و
یکی از اجزای کلیدی معماری DNS حرفه‌ای محسوب می‌شود.


غیرفعال کردن systemd-resolved

برای آزادسازی پورت 53، سرویس systemd-resolved باید متوقف شود:

systemctl stop systemd-resolved
systemctl disable systemd-resolved
rm -f /etc/resolv.conf
echo -e "nameserver 1.1.1.1\nnameserver 8.8.8.8" > /etc/resolv.conf

اجرای CoreDNS

/usr/local/bin/coredns -conf /etc/coredns/Corefile

تست عملکرد GeoDNS

dig example.com @IP_DNS_SERVER

با تغییر موقعیت (VPN یا سرور خارجی) مشاهده می‌کنید که IP پاسخ داده شده تغییر می‌کند.


افزودن قابلیت whoami برای تست و عیب‌یابی DNS

پلاگین whoami در CoreDNS یک ابزار بسیار کاربردی برای تست و دیباگ است.
این پلاگین اطلاعاتی مانند IP کلاینت، پروتکل، پورت و مشخصات درخواست DNS را در پاسخ نمایش می‌دهد.

استفاده از whoami به‌خصوص در سناریوهای GeoDNS کمک می‌کند بررسی کنیم
درخواست از کدام مسیر، IP و Resolver به سرور DNS ما رسیده است.


پیکربندی whoami در CoreDNS

برای فعال‌سازی whoami، کافی است یک Subdomain اختصاصی در فایل Corefile اضافه کنید:

whoami.example.com:53 {
    whoami
}

در این مثال، هر درخواست DNS به دامنه

whoami.example.com

اطلاعات کاملی از درخواست را برمی‌گرداند.


تست whoami

پس از اعمال تنظیمات و Reload کردن CoreDNS، می‌توانید با دستور زیر تست بگیرید:

dig whoami.example.com @IP_DNS_SERVER

خروجی شامل اطلاعاتی مشابه موارد زیر خواهد بود:

  • IP کلاینت (Resolver)
  • نوع پروتکل (UDP/TCP)
  • EDNS Client Subnet (در صورت وجود)
  • Port و Transport

کاربرد whoami در سناریو GeoDNS

در معماری GeoDNS، whoami به شما کمک می‌کند:

  • تشخیص دهید درخواست واقعاً از کدام Resolver ارسال شده
  • بررسی کنید EDNS Subnet توسط DNSهای عمومی ارسال می‌شود یا نه
  • صحت عملکرد GeoIP و Viewها را تأیید کنید
  • مشکلات مربوط به کش یا Resolver واسط را شناسایی کنید

این ابزار ساده اما بسیار مفید، مخصوصاً در زیرساخت‌های حرفه‌ای DNS توصیه می‌شود.


تأثیر GeoDNS بر سئو

  • کاهش RTT و TTFB
  • بهبود Core Web Vitals
  • افزایش Crawl Rate توسط گوگل
  • تجربه کاربری بهتر برای کاربران جهانی

چرا نتورکفا برای GeoDNS انتخاب مناسبی است؟

پیاده‌سازی GeoDNS نیازمند سروری با شبکه پایدار و تأخیر کم است.
نتورکفا با ارائه:

  • سرور مجازی پرسرعت
  • سرور اختصاصی با NVMe و RAID
  • IP تمیز و پایدار
  • پشتیبانی فنی تخصصی

بستر مناسبی برای اجرای DNS، GeoDNS و سرویس‌های حساس فراهم می‌کند.

مشاهده و خرید سرور از نتورکفا


جمع‌بندی

GeoDNS یکی از مؤثرترین راهکارها برای افزایش سرعت، پایداری و سئوی وب‌سایت‌های بین‌المللی است.
با استفاده از CoreDNS و یک سرور قدرتمند، می‌توانید کنترل کامل DNS را در اختیار داشته باشید.

اگر به دنبال زیرساختی مطمئن برای GeoDNS هستید،
نتورکفا انتخاب حرفه‌ای‌هاست.

author
نتورکفا

4 دیدگاه

پرویز گفت:

ممنون بابت اموزش خوبتون اما چند تا نکته ی مهم رو نگفتید
مورد اول کاربر باید چه نیم سروری رو رو دامنه ست کنه
مورد بعدی کاربر باید چند تا هاست داشته باشه و اینکه اگر دو تا هاست می خواد چطور وبسایت رو سینک کنه
ممنون که در این روز های سخت کمک می کنید

نتورکفا گفت:

کاربر باید این dns server را برای دامین استفاده نمایید بجای ns های هاست .
برای مورد دوم به زودی آموزش اضافه خواهد شد.

Mind گفت:

کاربران ایران رو چطوری تشخیص میده؟
در ایران بسیاری از کاربران از resolver های گوگل (۸.۸.۸.۸) استفاده میکنند، اونارو چطوری به سرور ایران هدایت میکنین؟

نتورکفا گفت:

درصورتی که Edns فعال نباشد بر اساس سورس آیپی درخواست دهنده این مورد انجام میشود به طور مثال وقتی از 8.8.8.8 (anycast) استفاده میکنید از آیپی backend آن که در آلمان قراردارد به سمت dns server شما درخواست ارسال میشود و جواب آیپی مربوط به zone آلمان خواهد بود.
ولی با فعال بودنedns زمان ارسال درخواست سابنت آیپی درخواست دهنده (ایرانی) از سمت recursive dns server به dns server ارسال میشود و براساس آن جواب میدهد.
برای تست این موضوع میتوانید از دستور های زیر استفاده کنید.

dig example.com @127.0.0.1 +subnet=x.x.x.0/24 
dig example.com @8.8.4.4 +subnet=x.x.x.0/24