DNS وRoute 53: عنوان موقعك
كيف يتحول اسم مثل example.com إلى عنوان، ووش تعني أنواع السجلات، والفرق بين CNAME وAlias، وسياسات التوجيه وفحوصات الصحة في Route 53، مع تجربة عملية بدون ما تشتري نطاق.
- الفكرة الأساسية
- تعريف
- متى يُستخدم
- تنبيه
في هذا المقال
موزّع الحمل في تطبيقنا من الجزء السابع اسمه شي زي web-alb-1234567890.eu-central-1.elb.amazonaws.com. ما أحد بيكتب هذا. الزائر يبي shop.example.com، واللي يربط بينهم هو DNS.
هذا القسم عن طريق الزائر لتطبيقك: الاسم في هذا الجزء، والسرعة في الجزء الجاي، ثم الشبكة الخاصة اللي يعيش فيها كل شي.
كيف يشتغل DNS؟
DNS دليل هاتف الإنترنت: تسأله باسم، ويجاوبك بعنوان. وما فيه سيرفر واحد يعرف كل شي، فالجواب يجي عبر سلسلة:
- متصفحك يسأل الـ Resolver، وهو عادةً من شركة الإنترنت أو خدمة عامة مثل
1.1.1.1. - الـ Resolver يسأل السيرفرات الجذرية، وهي توجّهه لسيرفرات
.com. - سيرفرات
.comتوجّهه لسيرفرات أسماء النطاق. - سيرفرات أسماء النطاق تعطيه الجواب النهائي.
- الـ Resolver يرجّع العنوان للمتصفح، ويحتفظ به لمدة TTL، فاللي يسأل بعدك يلقى الجواب فوراً.
وهذي المصطلحات اللي بتمر عليك:
| المصطلح | معناه |
|---|---|
| Domain | example.com: الاسم اللي تملكه |
| Subdomain | blog.example.com: اسم تحته |
| Registrar | الشركة اللي تشتري منها الاسم |
| Hosted Zone | الحاوية اللي فيها سجلات النطاق |
| Record | سجل واحد: اسم يشير لقيمة |
| TTL | كم يقدر الـ Resolver يتذكر الجواب |
Route 53
Route 53 خدمة DNS من AWS، واسمها من منفذ DNS رقم 53. وعندها ثلاث مهام: تحفظ سجلات نطاقك وتجاوب عنها، وتسجّل النطاقات، وتراقب صحة تطبيقك وتوجّه الزوار على أساسها. وAWS تلتزم فيها بتوفر 100%.
Hosted Zones
| النوع | يجاوب مين | مثال |
|---|---|---|
| عامة | أي أحد على الإنترنت | example.com |
| خاصة | داخل شبكات VPC تحددها فقط | db.series.internal |
كل واحدة تكلف حوالي نص دولار في الشهر، مع مبلغ بسيط على الاستعلامات.
أنواع السجلات
| النوع | يشير إلى | مثال |
|---|---|---|
| A | عنوان IPv4 | blog.example.com إلى 192.0.2.10 |
| AAAA | عنوان IPv6 | blog.example.com إلى 2001:db8::10 |
| CNAME | اسم ثاني | www.example.com إلى example.com |
| NS | سيرفرات أسماء النطاق | ns-1.awsdns-01.org |
| MX | سيرفرات البريد | mail.example.com |
| TXT | نص حر، مثل إثبات ملكية النطاق | v=spf1 ... |
CNAME أو Alias؟
عندك مشكلة شائعة: CNAME ما ينفع على النطاق الأساسي example.com، وأنت تبيه يشير لموزّع الحمل. الحل هو Alias، وهو نوع خاص في Route 53:
| CNAME | Alias | |
|---|---|---|
| يشير إلى | أي اسم | موارد AWS مثل ALB وCloudFront وAPI Gateway |
| النطاق الأساسي | ما ينفع | ينفع |
| الاستعلامات | مدفوعة | مجانية لموارد AWS |
| TTL | تحدده أنت | تحدده Route 53 |
| صحة الهدف | ما يتابعها | يقدر يتابعها |
القاعدة بسيطة: لو الهدف على AWS، استخدم Alias. ولاحظ إنه ما يشير لاسم DNS حق سيرفر EC2.
اختيار TTL
- مدة طويلة: استعلامات أقل وتكلفة أقل، بس أي تغيير ياخذ وقت عشان ينتشر.
- مدة قصيرة: التغيير ينتشر بسرعة، بس الاستعلامات تزيد.
سياسات التوجيه
"التوجيه" هنا ما يعني إن الزيارات تمر عبر Route 53. هي تختار وش الجواب اللي تعطيه فقط، وبعدها يتصل الزائر مباشرة بالعنوان.
| السياسة | كيف تجاوب | استخدام شائع |
|---|---|---|
| Simple | سجل واحد، وممكن فيه أكثر من قيمة | سيرفر واحد |
| Weighted | بنسب تحددها | تجربة نسخة جديدة على 10% من الزوار |
| Latency | الـ Region الأقل تأخير للزائر | تطبيق في أكثر من Region |
| Failover | الأساسي طالما سليم، وإلا الاحتياطي | التعافي من الكوارث |
| Geolocation | حسب دولة الزائر أو قارته | لغة أو محتوى حسب البلد |
| Geoproximity | حسب المسافة، مع تكبير أو تصغير نطاق كل موقع | نقل الزيارات تدريجياً بين المناطق |
| IP-based | حسب نطاق IP الزائر | شبكات معروفة عندك |
| Multivalue | لين 8 سجلات سليمة | توزيع بسيط، وما يغني عن موزّع الحمل |
فحوصات الصحة
عشان Failover وغيرها تشتغل، لازم Route 53 تعرف مين سليم:
| النوع | كيف يفحص |
|---|---|
| Endpoint | أجهزة فحص حول العالم تطلب عنوانك عبر HTTP أو HTTPS أو TCP |
| Calculated | يجمع نتائج عدة فحوصات في نتيجة وحدة |
| CloudWatch Alarm | يعتمد على إنذار، وهذا الحل للموارد الخاصة |
وأجهزة الفحص من الإنترنت، فما توصل لسيرفر في شبكة خاصة، ولازم مجموعة الأمان تسمح لنطاقاتها لو تفحص هدف عام.
نطاق مشترى من مكان ثاني
شراء النطاق وإدارة سجلاته شيئين منفصلين. لو اشتريت نطاقك من شركة ثانية وتبي Route 53 تجاوب عنه:
- أنشئ Hosted Zone عامة باسم النطاق.
- انسخ سيرفرات الأسماء الأربعة من سجل NS فيها.
- الصقها في إعدادات النطاق عند الشركة اللي اشتريت منها.
بعد ما ينتشر التغيير، Route 53 تصير هي اللي تجاوب.
ولو عندك شبكة في مكتبك، تقدر تربط DNS حقها مع AWS عبر Resolver Endpoints: الداخلي (Inbound) يخلي شبكتك تسأل عن أسماء AWS الخاصة، والخارجي (Outbound) يخلي AWS تسأل عن أسماء شبكتك. وهذا يحتاج اتصال بين الشبكتين، وهو موضوع الجزء الرابع عشر.
عملي: توجيه بالنسب بدون شراء نطاق
الـ Hosted Zone الخاصة تخليك تجرب كل هذا بدون نطاق حقيقي. وبنستخدم سيرفرك web-1 من الجزء الثالث داخل الشبكة الافتراضية. من CloudShell، أنشئ النطاق الخاص:
VPC_ID=$(aws ec2 describe-vpcs --filters Name=isDefault,Values=true \
--query "Vpcs[0].VpcId" --output text)
ZONE_ID=$(aws route53 create-hosted-zone --name series.internal \
--caller-reference "demo-$(date +%s)" \
--vpc VPCRegion=$AWS_REGION,VPCId=$VPC_ID \
--query HostedZone.Id --output text)
الحين أضف سجلين لنفس الاسم، 80% للنسخة القديمة و20% للجديدة. والعناوين هنا وهمية، لأن DNS يجاوب فقط وما يتصل بها:
CHANGES='{"Changes":[
{"Action":"CREATE","ResourceRecordSet":{"Name":"app.series.internal","Type":"A","TTL":5,
"SetIdentifier":"old","Weight":80,"ResourceRecords":[{"Value":"10.0.0.80"}]}},
{"Action":"CREATE","ResourceRecordSet":{"Name":"app.series.internal","Type":"A","TTL":5,
"SetIdentifier":"new","Weight":20,"ResourceRecords":[{"Value":"10.0.0.20"}]}}
]}'
aws route53 change-resource-record-sets \
--hosted-zone-id "$ZONE_ID" --change-batch "$CHANGES"
ادخل على السيرفر من EC2 Instance Connect، وأرسل 20 سؤال. والتجربة تاخذ دقيقتين لأننا ننتظر انتهاء TTL في كل مرة:
sudo dnf install -y bind-utils
for i in $(seq 1 20); do
dig +short app.series.internal
sleep 6
done | sort | uniq -c
بتشوف توزيع قريب من 16 مقابل 4. جرّب كمان dig +trace aws.amazon.com، وبتشوف السلسلة اللي في الرسم خطوة بخطوة.
ولو عندك نطاق، أضف سجل A من نوع Alias يشير لموزّع الحمل، وصار موقعك باسمك.
aws route53 change-resource-record-sets \
--hosted-zone-id "$ZONE_ID" --change-batch "${CHANGES//CREATE/DELETE}"
aws route53 delete-hosted-zone --id "$ZONE_ID"
الخلاصة
- DNS يحول الاسم لعنوان عبر سلسلة، والجواب ينحفظ لمدة TTL.
- Route 53 تحفظ سجلاتك، وHosted Zone ممكن تكون عامة أو خاصة.
- لو الهدف على AWS استخدم Alias، وهو ينفع على النطاق الأساسي.
- سياسات التوجيه تختار الجواب فقط، والزيارات ما تمر عبرها.
- فحوصات الصحة هي اللي تخلي Failover يشتغل.
اختبر نفسك
قبل ما تكمل، جرّب هذي الأسئلة عشان تتأكد إنك فهمت الجزء. كل سؤال موقف عملي، وبعد ما تجاوب يطلع لك الشرح.
السؤال 1 من 5
موقع مخبز يشتغل خلف Application Load Balancer، وصاحبه يبي اللي يكتب النطاق الأساسي example.com يوصل له. وعناوين الموزّع ممكن تتغير في أي وقت. أي سجل يناسب؟
اعرض الجواب
الجواب الصحيح: D
Alias ينفع على النطاق الأساسي، ويتابع عناوين الموزّع المتغيرة بدالك، والاستعلامات عن موارد AWS مثل هذا مجانية.
- A: CNAME ما ينفع على النطاق الأساسي.
- B: أول ما تتغير العناوين، يصير السجل يشير لمكان غلط.
- C: سجل TXT فيه نص حر، والمتصفحات ما تستخدمه عشان تلقى السيرفر.
للمراجعة: CNAME أو Alias؟ في هذا الجزء، وChoosing between alias and non-alias records في وثائق AWS.
السؤال 2 من 5
خدمة بث تشتغل في Regionين، فرانكفورت والبحرين. ورخصتها تشترط إن زوار السعودية ياخذون نسخة البحرين دايماً، حتى لو كانت فرانكفورت أسرع لهم. أي سياسة توجيه تناسب؟
اعرض الجواب
الجواب الصحيح: A
Geolocation يختار حسب مكان الزائر مو حسب السرعة، وهذا اللي يحتاجه شرط الرخصة.
- B: هذا يرسل الزائر لأسرع Region، وممكن تكون فرانكفورت.
- C: هذا يقسم الزيارات بنسب، مهما كانت دولة الزائر.
- D: هذا يرجّع عدة سجلات سليمة، بدون أي اعتبار للدولة.
للمراجعة: سياسات التوجيه في هذا الجزء، وGeolocation routing في وثائق AWS.
السؤال 3 من 5
تطبيق داخلي يستخدم سجل Failover في Hosted Zone خاصة. وسيرفراته الأساسية لها عناوين خاصة فقط، ولازم تبقى كذا. كيف تعرف Route 53 إن الأساسي سليم؟
اعرض الجواب
الجواب الصحيح: C
أجهزة الفحص في Route 53 جاية من الإنترنت، فما توصل لعنوان خاص. أما CloudWatch Alarm فيقدر يراقب مقياس من السيرفرات، وفحص الصحة يتبع الإنذار.
- A: أجهزة الفحص برا الشبكة، وما توصل لعنوان خاص.
- B: هذا يخالف شرط إن السيرفرات تبقى خاصة.
- D: هذا يجمع فحوصات ثانية بس، وهي لسا ما توصل للسيرفرات.
للمراجعة: فحوصات الصحة في هذا الجزء، وConfiguring failover in a private hosted zone في وثائق AWS.
السؤال 4 من 5
شركة ناشئة اشترت نطاقها من شركة ثانية وتبي يبقى التسجيل عندها، بس Route 53 هي اللي ترد على سجلات النطاق. وش لازم تسوي؟
اعرض الجواب
الجواب الصحيح: B
شراء الاسم والرد عليه شيئين منفصلين. وأول ما تضيف الشركة سيرفرات أسماء Route 53، تصير Route 53 هي اللي ترد.
- A: النقل اختياري، وما تحتاجه عشان تدير السجلات.
- C: الـ Zone الخاصة ترد داخل شبكات VPC تحددها فقط، مو للعامة.
- D: هذا يخلي شبكة المكتب تسأل عن الأسماء الخاصة، وما له علاقة بالردود العامة.
للمراجعة: نطاق مشترى من مكان ثاني في هذا الجزء، وMaking Route 53 the DNS service for a domain that's in use في وثائق AWS.
السؤال 5 من 5
فريق يبي يرسل 10% من الزوار لإصدار جديد من تطبيقه، ويرجّع هذي الزيارات خلال دقايق لو صار أي شي. أي خطوتين تناسب؟ (اختر اثنين.)
اعرض الجواب
الجواب الصحيح: A + E
سجلات Weighted تقسم الردود بالنسب اللي تحددها، والـ TTL القصير يعني التغيير يوصل للزوار بسرعة، لأن الـ Resolver يتذكر الجواب هذي المدة فقط.
- B: هذا يختار حسب المكان، مو حسب نسبة من الزوار.
- C: الـ Resolver بيحتفظ بالجواب القديم لحد يوم، فيصير الرجوع بطيء.
- D: سجل Simple ما يعطيك طريقة تحدد فيها النسبة.
للمراجعة: سياسات التوجيه واختيار TTL في هذا الجزء، وWeighted routing في وثائق AWS.
الحين موقعك له اسم، بس سيرفره لسا في مكان واحد، والزائر البعيد ينتظر. في الجزء الثاني عشر نقرّبه منه مع CloudFront وGlobal Accelerator.