الشبكات المحلية الافتراضية (VLANs)
تقسم الشبكات المحلية الافتراضية (VLANs، معيار IEEE 802.1Q) شبكة مادية واحدة إلى عدة شبكات معزولة على الطبقة الثانية (Layer 2). يحمل كل إطار (frame) معرّف VLAN ID بين 1 و4094، ولا تقوم المحولات (switches) بتسليمه إلا للمنافذ التي تنتمي إلى تلك الـ VLAN. يتيح ذلك لبطاقة شبكة مادية واحدة (NIC) حمل حركة مرور إدارة المضيف وحركة مرور العديد من شبكات الأجهزة الافتراضية، مع بقاء كل منها معزولاً عن الآخر.
يوفر Vapor طريقتين لاستخدام VLANs:
- Open vSwitch (OVS) — موصى به لشبكات الأجهزة الافتراضية. يتم تعيين شبكات VLAN على منافذ OVS (المسماة vPorts) وعلى مجموعات المنافذ (portgroups) الخاصة بشبكات libvirt، ويمكن لجسر (bridge) واحد حمل أي عدد من الـ VLANs.
- واجهات VLAN في Linux — واجهة فرعية مثل
eth0.10لكل VLAN. مناسبة لمنح المضيف عنواناً على VLAN، أو لإعداد جسر Linux بسيط مع VLAN واحد لكل جسر. راجع واجهات VLAN في Linux.
يتناول باقي هذا الدليل OVS.
كيف تعمل VLANs في Open vSwitch
على جسر OVS، تعتبر الـ VLANs خاصية لكل منفذ، وليست خاصية للجسر نفسه. تشارك ثلاثة أنواع من المنافذ:
| المنفذ | ما هو | أين يتم تعيين الـ VLAN الخاصة به |
|---|---|---|
| وصلة صاعدة (Uplink) | منفذ vPort من نوع system لبطاقة الشبكة المادية (مثل eno1) | Network > Virtual Switch > vPorts |
| منفذ المضيف (Host port) | منفذ vPort من نوع internal يحمل عنوان IP للمضيف، مثل عنوان الإدارة | Network > Virtual Switch > vPorts |
| منفذ الجهاز الافتراضي (VM port) | منفذ vnetN ينشئه libvirt لكل بطاقة NIC لجهاز افتراضي أثناء تشغيل الـ VM | مجموعة المنافذ (portgroup) الخاصة بشبكة libvirt المتصلة بها الـ NIC |
لكل منفذ وضع VLAN (VLAN mode):
| وضع VLAN | الحقول | السلوك |
|---|---|---|
| access | Tag | يحمل VLAN واحدة، غير موسومة (untagged). الإطارات التي تدخل المنفذ تنضم إلى VLAN الخاصة بالوسم (tag)؛ والإطارات التي تغادره يُزال منها الوسم. الإطارات التي تصل موسومة بالفعل يتم إسقاطها. |
| trunk | Trunks | يحمل شبكات الـ VLAN المدرجة، موسومة (tagged). القائمة الفارغة تعني جميع شبكات الـ VLAN. |
| native-untagged | Tag و Trunks | منفذ trunk يحمل أيضاً VLAN الخاصة بحقل Tag غير موسومة (untagged). الإطارات غير الموسومة التي تدخل المنفذ تنضم إلى تلك الـ VLAN. |
| native-tagged | Tag و Trunks | مثل native-untagged، ولكن إطارات الـ VLAN الأصلية تغادر المنفذ موسومة (tagged). |
| Auto (default) | Tag أو Trunks | يعمل كـ access إذا تم تعيين tag، وإلا فيعمل كـ trunk. |
المنفذ الذي ليس له tag ولا trunks يعمل كـ trunk لكافة شبكات الـ VLAN. الإطارات غير الموسومة التي يستقبلها تكون في VLAN 0، والتي لا ينتمي إليها أي منفذ موسوم. هذا هو سبب عدم تمكن بطاقة NIC لجهاز افتراضي لم تتلقَّ VLAN مطلقاً من الوصول إلى أي شيء على أي VLAN.
عند تغيير وضع VLAN لأحد المنافذ، يقوم Vapor بمسح الإعداد الذي لا يستخدمه الوضع الجديد: التبديل إلى trunk يزيل الـ tag، والتبديل إلى access يزيل الـ trunks.
اختيار وضع الوصلة الصاعدة (Uplink mode)
يجب أن يتطابق الـ uplink مع كيفية تهيئة منفذ المحوّل المادي. نسّق هذا الأمر مع فريق الشبكات لديك قبل البدء.
| منفذ المحوّل المادي | منفذ Uplink vPort (eno1) | شبكات VLAN التي يمكن للمضيف استخدامها |
|---|---|---|
| منفذ Access، VLAN 104 (غير موسوم) | access، مع Tag 104 | 104 فقط |
| 802.1Q trunk، شبكات VLAN 104, 105, 106 موسومة | trunk، مع Trunks 104,105,106 | 104, 105, 106 |
| Trunk مع native VLAN 104 غير موسومة، و105 و106 موسومة | native-untagged، مع Tag 104، وTrunks 104,105,106 | 104, 105, 106 |
يُعد الـ access uplink أبسط إعداد، لكنه يقصر المضيف على VLAN واحدة، وتتطلب إضافة VLAN ثانية لاحقاً إعادة تهيئة كل من المحوّل والمضيف. إذا كان هناك أي احتمال بأنك ستحتاج إلى أكثر من VLAN واحدة، فاستخدم trunk من البداية.
لا تقم مطلقاً بتعيين عنوان IP للمضيف على بطاقة الـ uplink NIC أو على الجسر نفسه. بمجرد أن تصبح بطاقة الـ NIC عضواً في جسر، فإنها تعمل على الطبقة الثانية (Layer 2) فقط، ومنفذ الجسر نفسه ليس له وسم فيقع في VLAN 0. ضع عناوين المضيف على منافذ vPorts داخلية (internal)، كما هو موضح أدناه.
مثال: الإدارة والأجهزة الافتراضية على نفس الـ VLAN
هذا هو المخطط الإنتاجي الأكثر شيوعاً: بطاقة NIC واحدة، وVLAN 104 لكل من واجهة الويب لـ Vapor والأجهزة الافتراضية، مع إمكانية إضافة المزيد من شبكات الـ VLAN لاحقاً.
awbr0 (VS Bridge)
├─ eno1 system vPort trunk, trunks 104 (بدون IP)
├─ mgmt0 internal vPort tag 104, "management" ← IP إدارة المضيف
└─ vnetN VM ports tag 104 ← من مجموعة منافذ الشبكةقم بهذا الإجراء من شاشة الطرفية (Console)
نقل عنوان الإدارة إلى منفذ جديد سيقطع الاتصال الذي تعمل من خلاله حالياً. استخدم طرفية الخادم (console) أو الإدارة خارج النطاق (out-of-band مثل iDRAC أو iLO أو IPMI) للخطوات من 2 إلى 4، أو وفّر طريقة ثانية للوصول إلى المضيف.
1. تهيئة منفذ المحوّل
اطلب من فريق الشبكات ضبط منفذ المحوّل المتصل به المضيف ليكون 802.1Q trunk يحمل VLAN 104 موسومة (tagged). إذا كان المحوّل يرسل VLAN 104 غير موسومة، فاستخدم native-untagged في الخطوة 3 بدلاً من trunk.
2. إنشاء الجسر
- انتقل إلى Network > Virtual Switch.
- انقر على Create VS Bridge وقم بتسميته، على سبيل المثال
awbr0.
3. إضافة الوصلة الصاعدة (Uplink)
- أسفل vPorts، انقر على Create vPort.
- اضبط VS Bridge على
awbr0، وvPort Type علىsystem، وحددeno1أسفل Interfaces. اسم الـ vPort هو نفسه اسم الواجهة. - اضبط VLAN Mode على
trunkوTrunks على104. اترك Tag فارغاً. - اترك خيار Remove IP addresses from these interfaces محدداً، حتى لا يتبقى أي عنوان على
eno1.
4. إضافة منفذ الإدارة
- انقر على Create vPort مجدداً.
- اضبط VS Bridge على
awbr0، وvPort Type علىinternal، وvPort Name علىmgmt0. - اضبط VLAN Mode على
accessوTag على104. - أسفل Service Tags، ضع علامة صح على
management. - انتقل إلى Network > Interfaces، وافتح
mgmt0، واستخدم Add IP لمنحه عنوان إدارة المضيف والبوابة (gateway).
يحفظ Vapor إعدادات الـ VLAN للمنفذ مع المنفذ نفسه. إذا فقد المضيف المنفذ بعد إيقاف تشغيل مفاجئ (hard power-off)، تقوم خدمة إقلاع بإعادة إنشائه بوسمه قبل بدء تشغيل الشبكة، حتى يظل عنوان الإدارة على VLAN 104.
5. إنشاء شبكة الأجهزة الافتراضية
- انتقل إلى Virtualization > Networks وأنشئ شبكة بالاسم
vlan104على سبيل المثال. - اضبط Backend Type على Open vSwitch (OVS)، وForwarding Mode على Bridge، وHost Bridge Name على
awbr0. - أضف مجموعة منافذ باسم
pg-104مع VLAN Tags بقيمة104، وضع علامة صح على Set as default for this network.
تحديد مجموعة المنافذ كافتراضية هو ما يجعل هذا الإعداد آمناً: ستحصل كل بطاقة NIC لجهاز افتراضي متصلة بـ vlan104 على VLAN 104 دون الحاجة لاختيار مجموعة المنافذ يدوياً.
6. إرفاق الأجهزة الافتراضية
في معالج إنشاء جهاز افتراضي، أضف بطاقة NIC على شبكة vlan104. سيعرض حقل Portgroup (optional) الخيار Network default (pg-104)، وهو ما تريده تماماً. يمكنك تركه كما هو.
7. التحقق من الإعداد
راجع التحقق من التهيئة.
مثال: عدة شبكات VLAN على بطاقة NIC واحدة
لمنح الأجهزة الافتراضية خيارات متعددة لشبكات VLAN، قم بتوسيع المخطط أعلاه.
- اجعل منفذ المحوّل يحمل جميع شبكات الـ VLAN التي تحتاجها، مثل 104 و105 و106.
- عدّل منفذ
eno1واضبط Trunks على104,105,106. - أنشئ شبكة libvirt لكل VLAN، كل منها على
awbr0مع مجموعة منافذ افتراضية واحدة:
| الشبكة | مجموعة المنافذ الافتراضية | وسوم VLAN |
|---|---|---|
vlan104 | pg-104 | 104 |
vlan105 | pg-105 | 105 |
vlan106 | pg-106 | 106 |
اختيار الشبكة الآن يعني تلقائياً اختيار الـ VLAN. إذا كان المضيف يحتاج أيضاً إلى عنوان على VLAN أخرى، مثل شبكة التخزين، فأضف vPort داخلياً آخر بذلك الوسم ووسم الخدمة المطابق.
شبكة واحدة بعدة مجموعات منافذ
بدلاً من شبكة واحدة لكل VLAN، يمكنك إنشاء شبكة واحدة بمجموعة منافذ واحدة لكل VLAN: pg-104 (افتراضية)، pg-105، pg-106. يتعين على كل بطاقة NIC لجهاز افتراضي بعد ذلك اختيار مجموعة المنافذ الخاصة بها، والبطاقة التي لا تحدد أياً منها ستستقر على الـ VLAN الافتراضية. هذا يحافظ على قصر قائمة الشبكات، ولكنه يزيد من احتمالية وضع جهاز افتراضي على الـ VLAN الخاطئة، لذا يُفضل استخدام شبكة واحدة لكل VLAN ما لم يكن لديك عدد كبير جداً من شبكات الـ VLAN.
أجهزة افتراضية تحتاج إلى عدة شبكات VLAN
جهاز التوجيه (router) أو الجدار الناري الافتراضي الذي يتعامل مع وسم VLAN بنفسه يحتاج إلى trunk. أضف مجموعة منافذ مع تفعيل Enable VLAN trunking وتعيين VLAN Tags على 104,105,106، وأرفق بطاقة NIC الخاصة بالجهاز الافتراضي بها. سيتلقى الجهاز الافتراضي حينها تلك الـ VLANs موسومة (tagged).
مجموعات المنافذ والأجهزة الافتراضية قيد التشغيل
يتم أخذ VLAN الخاصة ببطاقة NIC للجهاز الافتراضي من أول خيار متوفر بالترتيب التالي:
- VLAN محددة على بطاقة الـ NIC نفسها في تعريف الجهاز الافتراضي
- مجموعة المنافذ التي تختارها الـ NIC، أو مجموعة المنافذ الافتراضية للشبكة إذا لم يتم تحديد أي منها
- VLAN الخاصة بالشبكة نفسها
عند تعديل شبكة، أو إنشاء إحدى مجموعات المنافذ التابعة لها أو تعديلها أو حذفها، ينقل Vapor بطاقات NIC للأجهزة الافتراضية قيد التشغيل إلى الـ VLAN الناتجة عن هذا التغيير. لست بحاجة إلى إعادة تشغيل الأجهزة الافتراضية. تذكر دائماً:
- حذف مجموعة المنافذ الافتراضية يخرج فوراً الأجهزة الافتراضية التي كانت تعتمد عليها من تلك الـ VLAN. قم بتعيين مجموعة منافذ أخرى كافتراضية أولاً.
- إعادة تسمية مجموعة المنافذ تترك بطاقات الـ NIC التي حددتها بالاسم القديم على الـ VLAN الحالية، ولن تبدأ تلك الأجهزة الافتراضية بالعمل حتى يتم توجيه بطاقاتها إلى مجموعة منافذ موجودة.
- بطاقات NIC المزوّدة بـ VLAN خاصة بها لا تتأثر بتغييرات مجموعة المنافذ.
لا تقم بتعيين وسوم يدوياً على منافذ vnetN. يقوم libvirt بحذف تلك المنافذ وإعادة إنشائها في كل مرة يبدأ فيها جهاز افتراضي أو يتوقف أو يرحل، وبالتالي يُفقد الوسم اليدوي عند الإجراء التالي وقد يتغير اسم المنفذ. عيّن الـ VLAN على مجموعة المنافذ بدلاً من ذلك.
الترحيل الحي (Live migration)
يحتفظ الجهاز الافتراضي بأسماء شبكاته ومجموعات منافذه عند ترحيله، ويقوم المضيف الوجهة بتطبيق تعريفه الخاص لها. لكي تظل الأجهزة الافتراضية على الـ VLAN الصحيحة بعد الترحيل:
- يجب أن يحتوي كل مضيف على الشبكات بنفس الأسماء، ونفس مجموعات المنافذ، ونفس وسوم الـ VLAN.
- يجب أن يحمل الـ uplink الخاص بكل مضيف شبكات الـ VLAN التي تستخدمها مجموعات المنافذ تلك.
وجود مجموعة منافذ مفقودة يوقف الترحيل. مجموعة منافذ بوسم مختلف على الوجهة تنقل الجهاز الافتراضي إلى تلك الـ VLAN بدون تحذير.
التحقق من التهيئة
على المضيف، تحقق من إعدادات VLAN لكل منفذ على الجسر:
ovs-vsctl --columns=name,tag,trunks,vlan_mode list Portللمخطط أعلاه، يُتوقع ظهور eno1 مع trunks [104] وvlan_mode trunk، وmgmt0 مع tag 104، وكل منفذ vnetN لجهاز افتراضي قيد التشغيل مع tag 104.
لمعرفة المنفذ الذي ينتمي إلى جهاز افتراضي والـ VLAN التي أعطاها libvirt له:
virsh domiflist <vm-name>
virsh dumpxml <vm-name> | grep -A3 "<vlan>"ثم اختبر من كلا الطرفين: قم بإجراء ping لعنوان الجهاز الافتراضي من جهاز آخر على VLAN 104، وقم بإجراء ping لبوابة الـ VLAN من داخل الجهاز الافتراضي.
استكشاف الأخطاء وإصلاحها
الجهاز الافتراضي لا يملك وصولاً إلى الشبكة، بينما المضيف يملك ذلك. على الأرجح أن بطاقة الـ NIC الخاصة به غير موسومة (untagged). تحقق من منفذ vnetN التابع له: وجود tag فارغ وtrunks فارغة يعني أن الـ NIC لم تحصل على VLAN. إما أن تحدد مجموعة منافذ كافتراضية على شبكة الـ VM أو حدد مجموعة منافذ على الـ NIC. يحذر معالج إنشاء جهاز افتراضي عندما توشك NIC على شبكة Open vSwitch أن تنضم إليها غير موسومة.
اختفاء وسم تم تعيينه يدوياً على منفذ vnetN. هذا متوقع؛ راجع مجموعات المنافذ والأجهزة الافتراضية قيد التشغيل.
أصبح المضيف غير قابل للوصول بعد نقل عنوان الإدارة. من شاشة الطرفية، تأكد من أن منفذ المحوّل يحمل الـ VLAN موسومة (أو أصلية باستخدام native-untagged)، وأن خطوط الـ trunks في الـ uplink تشملها، وأن منفذ الـ vPort الداخلي يحمل الوسم الصحيح ويحتوي على العنوان. أي عنوان يترك على بطاقة uplink NIC أو على الجسر لن يعمل.
الأجهزة الافتراضية على مضيفين مختلفين على نفس الـ VLAN لا يمكنها الوصول لبعضها البعض. تأكد من أن كلا الـ uplinks يحملان تلك الـ VLAN، وأن منافذ المحولات بين المضيفين تسمح بمرورها.
تم رفض تغيير VLAN الخاص بأحد المنافذ. لا يمكن لمنفذ trunk أن يحتوي على tag، ولا يمكن لمنفذ access أن يحتوي على trunks. بالنسبة للـ trunk الذي يحمل أيضاً VLAN غير موسومة، استخدم native-untagged أو native-tagged.
واجهات VLAN في Linux
إذا كان منفذ المحوّل الخاص بالمضيف trunk ولا تستخدم OVS، يمكنك إنشاء واجهة VLAN فرعية لكل VLAN.
- انتقل إلى Network > VLANs.
- انقر على Create VLAN.
- حدد الواجهة الأصل (مثل
eth0أو Bond). - أدخل VLAN ID (من 1 إلى 4094).
يقوم Vapor بإنشاء واجهة فرعية مثل eth0.10 لـ VLAN 10. يمكنك تعيين عنوان IP لها، أو جعلها عضواً في Linux bridge بحيث تكون الأجهزة الافتراضية المرفقة بذلك الجسر على VLAN 10. تحتاج كل VLAN إلى واجهة فرعية وجسر خاصين بها، لذا عندما يكون هناك أكثر من زوجين من شبكات الـ VLAN، فإن إدارة OVS تكون أسهل بكثير.