X
X
X
X

قاعدة المعرفة

الصفحة الرئيسيةقاعدة المعرفةLinux - MultiVPS IPv6+IPv4My application needs an IPv4-format...

My application needs an IPv4-formatted IP on Linux, but ip addr shows IPv6s only. How can I communicate to/from it?

تحذير: تمت ترجمة هذا الدليل بواسطة نظام آلي. في جميع الأوقات، إذا كانت لديك أي شكوك، يجب عليك الرجوع إلى النسخة الإنجليزية عن طريق تغيير اللغة إلى ”EN“ وفتح نافذة جديدة.

تتطلب المشاكل الشائعة أحياناً حلولاً غير مألوفة

في بعض الأحيان، قد لا يدعم تطبيق أو آخر (غير محدث/كسول) الاستخدام المباشر عندما تكون نقطة البداية هي عنوان IPv6، لأنها مصممة لاستخدام عنوان بتنسيق IPv4. على الرغم من ذلك، فإنها عادةً ما تكون متسامحة مع نطاق IPv4 الذي تستخدمه، مما يسمح لك بتحديد عناوين IPv4 الداخلية (التي تقع في النطاق 10.x.x.x.x/8 أو 172.16.x.x.x/12 - 172.32.x.x.x/12 أو 192.168.x.x.x/16)، كما هو الحال في أي خادم VPS آخر تم شراؤه من NAT، حيث أنها لا تميز بين العناوين.

الفرق الوحيد بين C-Servers ومقدمي الخدمات الآخرين على NAT VPS هو أنه بينما يوفر الآخرون عنوان IPv4 NAT داخلي افتراضيًا (وهو ليس عامًا، بل خاصًا فقط)، فإننا نفضل توفير عنوان IPv6 عام مزدوج الوظيفة (يرسل / يستقبل أيضًا طلبات IPv4) ثم ترجمة + توجيه طلبك داخليًا إلى / من IPv4 الخاص بالخادم الرئيسي.

نظرًا لعدم توقع قوالب SolusVM 2 وصور الإصدار السحابي عدم توقع عنوان IPv4 داخلي بديل، وموقف خوادم C كشركة تعتمد IPv6 أولاً، فإننا لا نوفر افتراضيًا مثل هذه العناوين. ومع ذلك، سنوضح لك في هذا الدليل كيفية الحصول على اتصال IPv4 على التطبيقات التي تتطلب عنوان IPv4 فقط. يتم تحقيق ذلك من خلال عملية بسيطة من ثلاث خطوات:

- تعطيل خاصية Cloud-init على الخادم الافتراضي الخاص بك;
- إضافة عنوان IPv4 الداخلي إلى النظام;
- إنشاء اجتماع داخلي بين عنوان IPv4 و IPv6 للاتصال الكامل.

تكون الحزم التي تصل إلى الخادم الافتراضي الخاص الافتراضي الخاص بك من IPv6 مكتملة بالفعل، وتكون إعادة التوجيه داخلية بالكامل على مستوى مقبس TCP/IP، وهذا حل مستخدم منذ فترة طويلة.

كيفية الحصول على اتصال IPv4 داخلي أصلي على MultiVPS

أولاً، لنقم أولاً بإلغاء تنشيط التغييرات السحابية الداخلية للخادم الافتراضي الخاص بك. هذا مجرد مثال ؛ قد ترغب في تحرير منطقة مختلفة يدويًا لإلغاء تنشيط Cloud-init أو حتى تحرير قسم الشبكات مباشرةً في توزيع Linux الخاص بك.

أدخل SSH أو VNC إلى الخادم الخاص بك وأنشئ ملفًا لمنع تشغيل Cloud-init عند التشغيل اللاحق:

sudo touch /etc/cloud/cloud-init.disabled

إذا لم يفلح ذلك، فقد ترغب في تعديل الملف مباشرةً لتجنب أي إعادة تشغيل للواجهة التي تمحو ما نحن على وشك القيام به. نظرًا لأن Cloudinit (الذي يُنسق أحيانًا باسم Cloud-init) هو مجرد برنامج نصي يتم تشغيله بواسطة SolusVM 2 في نهاية كل إعادة تشغيل، يمكنك ببساطة القيام بما يلي

أي Cloudinit

أو

أيهما Cloud-init

لمعرفة مكان البرنامج النصي على القرص - أحيانًا يتم تحميله من قسم ملف تكوين الشبكة، وأحيانًا يكون نصًا برمجيًا كاملًا في حد ذاته. بديل آخر هو التحقق مباشرةً من سجل نظام لينكس. ببساطة اكتب في سطر الأوامر

journalctl

واستخدم مفتاح PgDn / Page Down على لوحة المفاتيح للتمرير لأسفل حتى آخر سجل إقلاع قمت به على الخادم الافتراضي الخاص بك - وهي بالضبط الشاشة التي تراها أثناء كل إقلاع لنظام لينكس. انتبه إلى الساعة/اليوم المتوفرة على الجانب الأيسر من كل سجل لتتبع إجراءات ومواقع الإقلاع السحابي.

لمزيد من الدعم، يمكنك دائمًا استخدام Google أو الذكاء الاصطناعي عند تهيئة ذلك.
إضافة عنوان IPv4 ثابت إلى واجهة الشبكة الخاصة بك. هذا مجرد مثال للتوزيعات المستندة إلى Enterprise Linux وDebian، يرجى التحقق من العملية المحددة اللازمة لنظام التشغيل والإصدار الذي اخترته قم بتحرير ملف تكوين الشبكة (يعتمد الموقع على التوزيعة الخاصة بك):
بالنسبة لنظام Ubuntu 22.04/24.04 (باستخدام Netplan):

sudo nano /etc/netplan/01-netcfg.yaml

ضمن هذا الملف، لا تحذف أي شيء آخر، وأضف (مرة أخرى، مجرد مثال، تحقق من العملية لنظام التشغيل الخاص بك)

الشبكة:
الإصدار: 2
ethernets:
eth0: # قد يكون اسم الواجهة الخاص بك مختلفًا
العناوين:
- 10.0.0.0.10.10/24 # أضف الإدخال واستبدل في النهاية بنطاق IPv4 الداخلي والشبكة الفرعية التي تريدها (كتل 172.16.x.x.x/12، 192.168.x.x.x/16)

Ctrl+O للحفظ، Enter للتأكيد، Ctrl+X للخروج من محرر Nano.
بالنسبة لنظام التشغيل لينكس للمؤسسات (RHEL/CentOS/Tencent/AlmaLinux/Rocky Linux، مثال لـ RHEL 9/AlmaLinux 9)، في سطر الأوامر العادي عبر SSH أو VNC، اكتب

nmcli con mod eno1 ipv4.عناوين 192.168.1.100.100/24 [يمكنك إدخال أي نطاق IPv4 خاص آخر، تأكد من أن الشبكة الفرعية وعنوان IP على ما يرام]
nmcli con mod eno1 ipv4.gateway 192.168.1.1.1 [من داخل نفس نطاق IPv4 الخاص المختار، ودائماً العنوان الأول منه]
nmcli con mod eno1 ipv4.dns 8.8.8.8.8 [استخدم أي IPv4 DNS عادي]
nmcli con mod eno1 ipv4.method يدوي [لا تدخل تلقائيًا، فهذا عنوان غير تابع لـ IPv4.dns]
لتشغيل الاتصال، ما عليك سوى إدخال:

nmcli con up eno1

قم بتثبيت socat إذا لم يكن مثبتًا بالفعل:

sudo apt update & sudo apt install socat -y # لـ Debian/Ubuntu، أو
sudo dnf install sudat # للتوزيعات المستندة إلى RHEL (مثال يعمل مع التوزيعات المستندة إلى RHEL8/RHEL9)

وتفعيل دعم إعادة توجيه IPv4 و IPv6 في sysctl:

صدى ”net.ipv4.ip_ip_forward=1“ | sudo tee -a /etc/sysctl.conf
صدى ”net.ipv6.conf.all.forwarding=1“ | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

قم بإنشاء خدمة systemd لتشغيل socat وإعادة توجيه حركة المرور من IPv4 الداخلي إلى IPv6:
sudo nano /etc/systemd/system/ipv4-to-ipv6-routing.service
أضف المحتوى التالي:

[الوحدة]
الوصف=IPv4 إلى خدمة التوجيه IPv6 سوكات IPv6
بعد=network.target

[الخدمة]
النوع = بسيط
ExecStart=/usr/bin/socat TCP4-LISTEN:PORT,bind=10.0.0.10,reuseaddr,su=nobody,fork TCP6:[Your_IPV6_ADDRESS]:PORT
إعادة التشغيل=دائماً
إعادة التشغيل=5

[تثبيت]
مطلوب من قبل=متعدد المستخدمين.target
استبدل

10.0.0.0.10 بعنوان IPv4 الداخلي الذي تريده
[YOUR_IPV6_ADDRESS_ADDRESS] مع عنوان IPv6 العام المقدم من IPv6 للخادم الافتراضي الخاص بك
PORT برقم المنفذ الذي تريد إعادة توجيهه
قم بتمكين الخدمة وبدء تشغيلها
sudo systemctl systemctl تمكين ipv4-to-ipv6-proxy.service
sudo systemctl systemctl بدء تشغيل ipv4-to-ipv6-proxy.service

وستبدأ هذه الخدمة الآن تلقائيًا عند كل تمهيد.

إذا كنت بحاجة إلى إعادة توجيه منافذ متعددة، يمكنك إما إنشاء ملفات خدمة متعددة أو تعديل الأمر socat للتعامل مع منافذ متعددة.
يعمل سوكات TCP/UDP، من IPv4 إلى IPv6، ومن IPv6 إلى IPv4. أمثلة على الأوامر هي

socat UDP4-LISTEN:10683,bind=10.0.0.10,reuseaddr,su=nobody,fork UDP6:[2a00::212:4b00:4b00:615:a1f7]:10683“ يقول الاستماع لـ UDP على المنفذ 10683 على اتصال IPv4 الداخلي، والتوجيه إلى عنوان IPv6 عام على العنوان المحدد وعلى نفس المنفذ.

socat TCP6-LISTEN:10022,bind=[2a00::212:212:4b00:615:a1f7],reuseaddr,su=nobody,fork TCP4:10.0.0.10:10022 ” يقول للاستماع لـ TCP ضمن IPv6 على المنفذ 10022 على عنوان IPv6 العام المحدد، والتوجيهات إلى مكدس IP IPv4 الداخلي الخاص بالـ IPv6 على نفس المنفذ.

تحذير عادل

هذا الحل مستمر وسيبقى في كل عملية إعادة تشغيل.

ومع ذلك، إذا فشل ذلك لسبب ما (على سبيل المثال التحديثات التي تغير وظائف النظام أو السوكات أو الشبكات)، فقد تحتاج إلى إنشاء برنامج نصي لتشغيله عند كل تمهيد - قد تكون crontab أو أدوات البرمجة النصية المشابهة مثيرة للاهتمام لهذا الغرض - مثل إعادة إدراج IPv4 عند كل تمهيد على VPS الخاص بك. إذا كانت هناك حاجة لذلك، فقد يكون من الجيد أيضًا أن تفعل الشيء نفسه مع socat.

يحتوي Solus VM 2 على Cloud-init، والذي عادةً ما يوفر معلومات الشبكة عند كل إقلاع، ويمحو المعلومات السابقة - ما لم يقم المستخدم بتعطيله وأتمتة عملية تضمين IP عند الإقلاع على VPS الخاص به (والتي، نظرًا لأنها تنشأ من فضاء المستخدم، لا تتعارض أبدًا مع Cloud-init).

إذا حدث خطأ في كل شيء آخر، ما عليك سوى استخدام خدمة النسخ الاحتياطي للنسخ الاحتياطي لـ C-Servers GoBack لاستعادة الخادم الافتراضي الخاص إلى نقطة زمنية سابقة، أو ببساطة إعادة تثبيت الخادم الافتراضي الخاص باستخدام أحد قوالب نظام التشغيل لدينا، من الصفر.

شيء واحد مؤكد

سيصلح هذا الحل معظم المشكلات المتعلقة بتطبيقات IPv4 فقط.

لا يمكنك العثور على المعلومات التي تبحث عنها؟

إنشاء تذكرة دعم
هل وجدتها مفيدة؟
(535 مرات / 1 وجدها الأشخاص مفيدة)

Powered by WISECP
Top