نحن في أسس كنا نعاني من مشكلة, ان بعض الحسابات تظهر ان تم تسجيلها من عنوان شبكة دوكر. وهو شيء غير ممكن, ويجب فعليا ان يظهر عنوان المصدر, و حتى تغيير خادم الويب لم يحل المشكلة, فما مصدرها؟
السبب كان اتصالات IPv6, لان عكس المتوقع, كشف الحاويه لجميع الشبكات و اضافه سجل DNS جديد ليس كافي لتفعيل دعم IPv6 في دوكر.
اذا لم تقم باي خطوات اضافية, جميع اتصالات IPv6 ستظهر وكائنها من Gateway شبكة Docker, وبمعظم الحالات العنوان يبدء ب172.
الحل لهذه المشكلة هو ان تكون كل شبكات Docker تدعم IPv6, من شبكة الجسر الى الشبكات الداخليه.
تفعيل دعم IPv6 في دوكر
/etc/docker/daemon.json
|
|
هذا سيفعل ipv6tables في دوكر, وهي تساعد بتوجيه المنافذ وعزل الشبكات, لكن يجب تفعيل الوضع التجريبي لتشغيلها.
تفعيل IPv6 على شبكة الجسر الافتراضية (Bridge Network)
تفعيل وضع IPv6 في دوكر من المفترض ان يكن كافيا, لكن لنتأكد ان جميع الشبكات تستخدم IPv6, نفعله في شبكة الجسر الافتراضية ايضا.
/etc/docker/daemon.json
|
|
توزيع IPv6 Subnets تلقائيا
هذه الخطوة اختيارية, لكن بدونا ستضطر لتحديد الsubnet لكل شبكة يدويا داخل Docker - compose او بأمر docker network create --ipv6 --subnet=xxx $NETWORK_NAME
.
أذا كنت ان تحصل على تجربة تلقائية شبيهه بطريقة عمل دوكر مع IPv4, فيجب عليك تحديد مجال العناوين المستخدم لتوزيع الSubnets للشبكات الجديدة تلقائيا.
/etc/docker/daemon.json
|
|
يحبذ عدم استخدام 2001:db8::/104
كمجال حقيقي, لانه مخصص للguides فقط.
أذا كن تريد مجال عناوين للشبكات المحلية فقط, افتح موقع simpledns.plus و استبدل اول مربعين بالعنوان الظاهر الموقع(عشوائي)
أعد تشغيل ال Docker Daemon:
|
|
أضافة دعم IPv6 لحاويات أو مشاريع موجودة مسبقا
أعادة تشغيل ال Docker Daemon لن يكون كافي, خاصة عندما تكون لديك حاويات تستخدم شبكات Docker أخرى غير الافتراضية.
أذا كنت تستخدم Compose, فستضطر لحذف الحاويات:
|
|
ثم اضافة enable_ipv6: true
تحت كل شبكة داخل المشروع.
اذا تستخدم فقط الشبكة الافتراضية, تقوم بتحديدها ثم اضافة الخيار لها:
|
|
شبكات Docker الخارجيه ستضطر لحذفها ثم اعادة انشائها مع خيار --ipv6
|
|
الان من المفترض اصبح لديك دعم كامل لIPv6 مع ظهور مصدر الاتصال بشكل صحيح.
تحقق من حل المشكلة
للتحقق ان المشكلة فعلا أنحلت, شغل حاوية Python موصولة بشبكة Docker التي تستخدمها, واتصل بها من جهاز خارجي عبر IPv6 (استخدم منفذ 8080)
|
|
أذا مازال عنوان يظهر عنوان المصدر كعنوان IPv4 محلي, فجرب تشغيل نفس الحاوية لكن دون وصلها لشبكة أخرى:
|
|
أذا ظهر العنوان بشكل صحيح, فيعني هذا ان الشبكة التي كنت تستخدمها لا تدعم IPv6, اذا مازال لا يظهر مصدر الاتصال, فتأكد ان التغييرات طُبقت!