آموزش راهاندازی 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 هستید،
نتورکفا انتخاب حرفهایهاست.
4 دیدگاه
ممنون بابت اموزش خوبتون اما چند تا نکته ی مهم رو نگفتید
مورد اول کاربر باید چه نیم سروری رو رو دامنه ست کنه
مورد بعدی کاربر باید چند تا هاست داشته باشه و اینکه اگر دو تا هاست می خواد چطور وبسایت رو سینک کنه
ممنون که در این روز های سخت کمک می کنید
کاربر باید این dns server را برای دامین استفاده نمایید بجای ns های هاست .
برای مورد دوم به زودی آموزش اضافه خواهد شد.
کاربران ایران رو چطوری تشخیص میده؟
در ایران بسیاری از کاربران از resolver های گوگل (۸.۸.۸.۸) استفاده میکنند، اونارو چطوری به سرور ایران هدایت میکنین؟
درصورتی که Edns فعال نباشد بر اساس سورس آیپی درخواست دهنده این مورد انجام میشود به طور مثال وقتی از 8.8.8.8 (anycast) استفاده میکنید از آیپی backend آن که در آلمان قراردارد به سمت dns server شما درخواست ارسال میشود و جواب آیپی مربوط به zone آلمان خواهد بود.
ولی با فعال بودنedns زمان ارسال درخواست سابنت آیپی درخواست دهنده (ایرانی) از سمت recursive dns server به dns server ارسال میشود و براساس آن جواب میدهد.
برای تست این موضوع میتوانید از دستور های زیر استفاده کنید.