العودة إلى المدونة

IPv6 على خادمك الافتراضي: ماذا يمنحك نطاق /64 وكيف تستخدمه

فريق تحرير IM Host25 أكتوبر 20266 دقائق قراءة
IPv6 على خادمك الافتراضي: ماذا يمنحك نطاق /64 وكيف تستخدمه

تتضمن باقات VPS كثيرة نطاق IPv6 بحجم /64 إلى جانب عنوان IPv4. وغالبًا يبقى دون استخدام: الخادم يملكه، لكن الموقع وسجلات DNS والجدار الناري لا تعرف إلا IPv4. يشرح هذا الدليل معنى نطاق /64 فعلًا، وكيف تتأكد من أنه يعمل، والخطوات الأساسية لتقديم موقعك عبر IPv6 بشكل صحيح: العنوان، وسجل AAAA، وخادم الويب، والجدار الناري.

ماذا يعني /64؟

طول عنوان IPv6 هو 128 بت. ويعني "/64" أن أول 64 بت هي بادئة الشبكة التي يحددها مزود الخدمة، وآخر 64 بت لك أن تختارها. أي إن لديك 2 أُس 64 عنوانًا محتملًا، نحو 18 كوينتيليون، في شبكة فرعية واحدة.

يبدو الرقم مبالغًا فيه، لكنه ليس مصممًا لكي يُستهلك. فحجم /64 هو الحجم القياسي لشبكة IPv6 واحدة، وكثير من ميزات IPv6 مثل الإعداد التلقائي للعناوين (SLAAC) تفترضه. وعمليًا يمنحك ثلاثة أشياء مفيدة:

  • عنوان رئيسي ثابت للخادم، مثل عنوان ينتهي بـ ::1.

  • عناوين إضافية دون تكلفة: عنوان مستقل لكل موقع أو خدمة أو حاوية، دون طلب عناوين جديدة.

  • وصول مباشر: لا يوجد NAT. يمكن الوصول إلى كل عنوان من الإنترنت، ولهذا أيضًا يصبح الجدار الناري مهمًا.

في الأمثلة التالية يمثل 2001:db8:1234:5678::/64 شبكتك الفرعية. النطاق 2001:db8::/32 مخصص للتوثيق، فاستبدله بالبادئة الظاهرة في لوحة التحكم الخاصة بك.

الخطوة 1: تأكد من إعداد IPv6

ip -6 addr show
ip -6 route show default
ping -6 -c 3 2606:4700:4700::1111

تحتاج إلى ثلاثة أمور: عنوان بنطاق scope global (وليس عناوين fe80:: المحلية فقط)، ومسار IPv6 افتراضي، وردود على أمر ping. إذا لم تظهر إلا عناوين fe80:: فالنطاق مخصص للخادم لكنه غير مُعَد داخل نظام التشغيل.

في Ubuntu يُضبط IPv6 عبر netplan. يبدو الإعداد الثابت المعتاد هكذا، مع العلم أن اسم الواجهة (eth0 أو ens3 وغيرها) تجده عبر ip link، والبوابة تجدها في بيانات خادمك لدى المزود:

network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 203.0.113.10/24
        - 2001:db8:1234:5678::1/64
      routes:
        - to: default
          via: 203.0.113.1
        - to: default
          via: fe80::1
      nameservers:
        addresses: [1.1.1.1, 2606:4700:4700::1111]

يستخدم كثير من المزودين fe80::1 كبوابة IPv6، لكن ليس جميعهم، فاستخدم البوابة الخاصة بخادمك. ثم طبّق التغيير مع شبكة أمان:

sudo netplan try
# press Enter to confirm within 120 seconds, or it rolls back
sudo netplan apply

يتراجع netplan try تلقائيًا إذا انقطع الاتصال، وهذا يحميك من فقدان الوصول إلى الخادم عبر SSH.

إضافة عناوين أخرى من النطاق

لتجربة عنوان إضافي دون تثبيته بشكل دائم:

sudo ip -6 addr add 2001:db8:1234:5678::2/64 dev eth0

ولإبقائه بعد إعادة التشغيل أضفه إلى قائمة addresses في netplan. إذا كان العنوان الرئيسي يعمل من الخارج والعنوان الإضافي لا يعمل، فاسأل مزود الخدمة عن طريقة توصيل نطاق /64: بعض الإعدادات توجّه النطاق كاملًا إلى خادمك، وبعضها يتطلب الإعلان عن كل عنوان في الشبكة المحلية.

الخطوة 2: أضف سجل AAAA

يربط سجل A الاسم بعنوان IPv4، ويفعل سجل AAAA الشيء نفسه مع IPv6. أضف لدى مزود DNS:

example.com.      3600  IN  AAAA  2001:db8:1234:5678::1
www.example.com.  3600  IN  AAAA  2001:db8:1234:5678::1

أبقِ سجلات A الحالية كما هي، فمعظم الزوار سيصلون عبر البروتوكول الأنسب لهم. ثم تحقق من النتيجة:

dig AAAA example.com +short

لا تضف سجل AAAA إلا بعد أن يعمل IPv6 بالكامل على الخادم. تعود المتصفحات عادةً إلى IPv4 عندما يفشل IPv6، لكن عملاء آخرين مثل بعض برامج API وأدوات المراقبة وخوادم البريد قد يُظهرون خطأً ببساطة. وسجل AAAA معطل أسوأ من عدم وجوده.

الخطوة 3: اجعل Nginx يستمع على IPv6

من المفاجآت الشائعة أن يعمل الموقع عبر IPv4، ويكون سجل AAAA صحيحًا، ومع ذلك يحصل زوار IPv6 على "connection refused". والسبب المعتاد أن خادم الويب يستمع على IPv4 فقط. في Nginx يغطي listen 80; بروتوكول IPv4 وحده، وتحتاج إلى سطر منفصل مع [::]:

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name example.com www.example.com;
    # ssl_certificate, root, locations ...
}

اختبر الإعداد وأعد التحميل، ثم تأكد من المنافذ المفتوحة:

sudo nginx -t && sudo systemctl reload nginx
sudo ss -tlnp | grep nginx

يُفترض أن ترى 0.0.0.0:80 و[::]:80 معًا (والأمر نفسه للمنفذ 443). على Linux يفتح Nginx منفذ IPv6 بوضع IPv6 فقط افتراضيًا، ولهذا يعمل السطران جنبًا إلى جنب. والفكرة نفسها تنطبق على البرامج الأخرى: إذا ارتبط التطبيق بالعنوان 0.0.0.0 فهو يعمل على IPv4 فقط، والمقابل في IPv6 هو ::.

الخطوة 4: طبّق الجدار الناري على IPv6 أيضًا

من السهل إغفال هذه الخطوة، وهي مهمة. مع IPv6 لا يوجد NAT يخفي خدماتك، وكل منفذ مفتوح على كل عنوان يمكن الوصول إليه ما لم يمنعه الجدار الناري.

UFW: تأكد من تفعيل دعم IPv6 في الملف /etc/default/ufw:

IPV6=yes

بعد ذلك تغطي كل قاعدة تضيفها البروتوكولين معًا:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status

يجب أن تظهر كل قاعدة مرتين في القائمة، إحداهما مع (v6).

iptables: لكل من IPv4 وIPv6 مجموعة قواعد منفصلة، وقواعد iptables لا تؤثر في IPv6 إطلاقًا. أي إن خادمًا بقواعد iptables صارمة وسياسة ip6tables فارغة يكون مفتوحًا بالكامل عبر IPv6. تحقق بالأمر:

sudo ip6tables -L -n -v

nftables: الجدول من عائلة inet يغطي البروتوكولين بمجموعة قواعد واحدة:

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;
    ct state established,related accept
    iif "lo" accept
    meta l4proto icmp accept
    meta l4proto ipv6-icmp accept
    tcp dport { 22, 80, 443 } accept
  }
}

لا تحظر ICMPv6 بالكامل، فبروتوكول IPv6 يعتمد عليه في اكتشاف الجيران (للوصول إلى البوابة) وفي اكتشاف أقصى حجم للحزمة على المسار (path MTU). وحظره قد يجعل IPv6 يفشل بطرق محيّرة، مثل اتصالات تُفتح ثم تتجمد عند الردود الكبيرة.

الخطوة 5: اختبر من الجهتين

من الخادم، تأكد من أن الاتصال الصادر عبر IPv6 يعمل:

curl -6 -s https://icanhazip.com

ومن جهاز آخر يدعم IPv6، اختبر الموقع عبر كل بروتوكول على حدة:

curl -6 -I https://example.com
curl -4 -I https://example.com

يجب أن يُرجع الأمران سطر الحالة نفسه، مثل HTTP/2 200 أو HTTP/1.1 301. ولاختبار عنوان محدد مباشرة ضعه بين قوسين مربعين:

curl -6 -I "http://[2001:db8:1234:5678::1]/"

أخطاء شائعة وما تعنيه عادةً:

  • Could not resolve host مع -6: لا يوجد سجل AAAA بعد، أو لم ينتشر.

  • Connection refused: العنوان يمكن الوصول إليه، لكن لا شيء يستمع على هذا المنفذ عبر IPv6. راجع أسطر [::] في إعداد listen.

  • Connection timed out: جدار ناري يُسقط الحركة، أو أن العنوان غير مُعَد أو غير موجّه.

  • Network is unreachable: الجهاز الذي تختبر منه لا يملك مسار IPv6.

ملاحظة حول البريد الإلكتروني

إذا كان خادمك يرسل بريدًا ولديه IPv6، فقد يرسل خادم البريد عبر IPv6. ويتحقق كبار مزودي البريد من أن عنوان الإرسال له سجل DNS عكسي (PTR) مطابق، وأنه مشمول في سجل SPF (مثلًا عبر إدخال ip6:). اضبط الأمرين قبل الإرسال عبر IPv6، أو اجعل خادم البريد يرسل عبر IPv4 فقط.

شغّله على IM HOST

يأتي كل Linux VPS من IM HOST بعنوان IPv4 مخصص ونطاق IPv6 بحجم /64، مع صلاحيات root كاملة على KVM وحماية من هجمات DDoS. تبدأ الباقات من 5 دولارات شهريًا، دون رسوم إعداد، ومع ضمان استرداد الأموال خلال 30 يومًا. ويمكنك تسجيل نطاقك أو إدارته لإضافة سجلات AAAA عبر خدمة أسماء النطاقات، وفريق المهندسين متاح على مدار الساعة إذا احتاج إعداد IPv6 لديك إلى مراجعة.

المزيد من مدونتنا

اكتشف المزيد من الأدلة العملية ورؤى الخدمات من فريق IM Host.

عرض كل المقالات