مکانیزمهای امنیتی
- با توجه به ساختار یک VXLAN ترافیک tunnel شده میتواند از مکانیزمهای امنیتی سنتی که شامل رمزنگاری و احراز هویت میباشد، استفاده کند. زیرساخت LAN موجود تنظیمات خوبی را برای ما فراهم میکند. یک VLAN میتواند فقط برای ترافیکVXLAN طراحی شود و امنیت را فقط به کمک سرورهایی که ترافیک ارسال میکنند، فراهم کند. این تنظیم تضمین کننده این است که تمامend pointها در شبکه LAN مجاز هستند.
- همچنین در داخل ترافیکهای تمام پخشی، ترافیکهای ناشناس unicast و multicast، IP multicast داخل یک VXLAN استفاده میشود. هر دستگاه VTEP بطور جداگانه راهاندازی میشود و به عنوان یه میزبان دارایIP ، خود عضو گروه چند پخشی است.
- در واقع VXLAN یکی از بهترین روشها برای تسهیل vMotion است. (vMotion شکلی است از یک مهاجرت زنده هنگامیکه تمام ماشینهای مجازی میتوانند در کسری از ثانیه از یک سرور فیزیکی به دیگری سوئیچ کنند).
خلاصه اینکهVXLAN ها در کنار طیف وسیعی از شبکههای مجازی برای توسعه عملکرد و مقیاسپذیریVLAN ها ظهور کردهاند.
VTEP چیست؟
در واقع VTEP ، end pointی است که مسئول encapsulate کردن frameهای ethernet لایه 2 در یک VXLAN header و ارسال آن بر روی transport network میباشد. در شبکههای Multi-tenant فرض کنید دو شبکه مجزا و مستقل که هر کدام یک سرور Hypervisor (مثلاً ESXi) دارند میتوانیم بین آنها تانلهای VXLAN با استفاده از یه تکنولوژی به اسم VTEP ایجاد کنیم و این دو شبکه مجازی مستقل در لایه 2 با هم ارتباط میگیرند و انگار در یک VLAN هستند ولی اما دگیر به آن VLAN نمیگوییم، بلکه VXLAN میگوییم. در واقع VXLAN traffic بین VTEPها ارسال میشود و از fragmentation پشتیبانی نمیکند. ترافیک VXLAN بین VTEPها از سه متد مختلف: Unicast، Multicast و Hybrid میتواند استفاده نماید.
- با توجه به ساختار یک VXLAN ترافیک tunnel شده میتواند از مکانیزمهای امنیتی سنتی که شامل رمزنگاری و احراز هویت میباشد، استفاده کند. زیرساخت LAN موجود تنظیمات خوبی را برای ما فراهم میکند. یک VLAN میتواند فقط برای ترافیکVXLAN طراحی شود و امنیت را فقط به کمک سرورهایی که ترافیک ارسال میکنند، فراهم کند. این تنظیم تضمین کننده این است که تمامend pointها در شبکه LAN مجاز هستند.
- همچنین در داخل ترافیکهای تمام پخشی، ترافیکهای ناشناس unicast و multicast، IP multicast داخل یک VXLAN استفاده میشود. هر دستگاه VTEP بطور جداگانه راهاندازی میشود و به عنوان یه میزبان دارایIP ، خود عضو گروه چند پخشی است.
- در واقع VXLAN یکی از بهترین روشها برای تسهیل vMotion است. (vMotion شکلی است از یک مهاجرت زنده هنگامیکه تمام ماشینهای مجازی میتوانند در کسری از ثانیه از یک سرور فیزیکی به دیگری سوئیچ کنند).
خلاصه اینکهVXLAN ها در کنار طیف وسیعی از شبکههای مجازی برای توسعه عملکرد و مقیاسپذیریVLAN ها ظهور کردهاند.
VTEP چیست؟
در واقع VTEP ، end pointی است که مسئول encapsulate کردن frameهای ethernet لایه 2 در یک VXLAN header و ارسال آن بر روی transport network میباشد. در شبکههای Multi-tenant فرض کنید دو شبکه مجزا و مستقل که هر کدام یک سرور Hypervisor (مثلاً ESXi) دارند میتوانیم بین آنها تانلهای VXLAN با استفاده از یه تکنولوژی به اسم VTEP ایجاد کنیم و این دو شبکه مجازی مستقل در لایه 2 با هم ارتباط میگیرند و انگار در یک VLAN هستند ولی اما دگیر به آن VLAN نمیگوییم، بلکه VXLAN میگوییم. در واقع VXLAN traffic بین VTEPها ارسال میشود و از fragmentation پشتیبانی نمیکند. ترافیک VXLAN بین VTEPها از سه متد مختلف: Unicast، Multicast و Hybrid میتواند استفاده نماید.
عملیات VXLAN encapsulation اگر از VLANی استفاده نشود مقدار 50 بایت header یا اگر VXLAN endpoint بر روی یک VLAN tagged transport network باشد، مقدار 54 بایت را به original frame اترنت اضافه میکند.
شکل 80-14 نمایی بهتر از درک تفاوتها بین VLANها و VXLANها را نمایش میدهد.
VNI چیست؟
همانطور که در بحث VLAN مفهومی به نام VLAN ID داریم که جهت شمارهگذاری و مشخص کردن VLANهای مختلف مورد استفاده قرار میگیرد، در بحث VXLAN نیز مفهومی به VNI داریم که جهت مشخص کردن VXLAN Segment IDها مورد استفاده قرار میگیرد. برخلاف VLAN ID که یک عدد 12 بیتی است، VNI یک عدد 24 بیتی میباشد که یک شمارهگذاری منحصربفرد برای VXLAN Segmentها را فراهم میکند. VMها در VXLAN Segmentهای متفاوت نمیتوانند با یکدیگر ارتباط برقرار کنند. با NICهای 24 بیتی بیش از 16 میلیون VXLAN Segment در یک دامین مدیریتی میتوان داشت.
پیکربندی VXLAN
جهت پیکربندی شبکه مجازی با استفاده از VXLAN به سناریو شکل 81-14 دقت کنید. در این سناریو Network Node دارای 2 اینترفیس میباشد. با فرض اینکه بر روی هر سه Node پیشتر تنظیمات اولیه پیکربندی شدهاند، میبایست گامهای زیر را دنبال نمایید.
همانطور که در بحث VLAN مفهومی به نام VLAN ID داریم که جهت شمارهگذاری و مشخص کردن VLANهای مختلف مورد استفاده قرار میگیرد، در بحث VXLAN نیز مفهومی به VNI داریم که جهت مشخص کردن VXLAN Segment IDها مورد استفاده قرار میگیرد. برخلاف VLAN ID که یک عدد 12 بیتی است، VNI یک عدد 24 بیتی میباشد که یک شمارهگذاری منحصربفرد برای VXLAN Segmentها را فراهم میکند. VMها در VXLAN Segmentهای متفاوت نمیتوانند با یکدیگر ارتباط برقرار کنند. با NICهای 24 بیتی بیش از 16 میلیون VXLAN Segment در یک دامین مدیریتی میتوان داشت.
پیکربندی VXLAN
جهت پیکربندی شبکه مجازی با استفاده از VXLAN به سناریو شکل 81-14 دقت کنید. در این سناریو Network Node دارای 2 اینترفیس میباشد. با فرض اینکه بر روی هر سه Node پیشتر تنظیمات اولیه پیکربندی شدهاند، میبایست گامهای زیر را دنبال نمایید.
گام1: تغییر تنظیمات بر روی Control Node
برای این منظور فایل پیکربندی ml2_conf.ini را که در مسیر /etc/neutron/plugins/ml2 قرار دارد توسط ویرایشگر متنی vi باز کرده:
# vi /etc/neutron/plugins/ml2/ml2_conf.ini
و سپس پیکربندیهای زیر را در آن انجام دهید:
• در خط 115 و در جلوی عبارت tenant_network_type یک مقدار (در اینجا "vxlan") را اضافه نمایید:
[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vxlan
• در خط 166 و در زیر بخش [ml2_type_flat] عبارت زیر را اضافه نمایید:
[ml2_type_vlan]
flat_networks = physnet1
• در خط 220 و در زیر بخش [ml2_type_vxlan] عبارت زیر را مشخص کنید:
[ml2_type_vxlan]
vni_ranges = 1:1000
در نهایت نیز فایل پیکربندی مزبور را ذخیر کرده و از آن خارج شوید و سپس توسط دستور زیر سرویس neutron-server را یکبار restart نموده تا تنظیمات و پیکربندیهای انجام شده اعمال شوند:
# systemctl restart neutron-server
برای این منظور فایل پیکربندی ml2_conf.ini را که در مسیر /etc/neutron/plugins/ml2 قرار دارد توسط ویرایشگر متنی vi باز کرده:
# vi /etc/neutron/plugins/ml2/ml2_conf.ini
و سپس پیکربندیهای زیر را در آن انجام دهید:
• در خط 115 و در جلوی عبارت tenant_network_type یک مقدار (در اینجا "vxlan") را اضافه نمایید:
[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vxlan
• در خط 166 و در زیر بخش [ml2_type_flat] عبارت زیر را اضافه نمایید:
[ml2_type_vlan]
flat_networks = physnet1
• در خط 220 و در زیر بخش [ml2_type_vxlan] عبارت زیر را مشخص کنید:
[ml2_type_vxlan]
vni_ranges = 1:1000
در نهایت نیز فایل پیکربندی مزبور را ذخیر کرده و از آن خارج شوید و سپس توسط دستور زیر سرویس neutron-server را یکبار restart نموده تا تنظیمات و پیکربندیهای انجام شده اعمال شوند:
# systemctl restart neutron-server
گام2: تغییر تنظیمات بر روی Network Node
ابتدا جهت ایجاد یک bridge با نام br-eth1 از دستور زیر استفاده میکنیم:
# ovs-vsctl add-br br-eth1
سپس جهت اضافه کردن اینترفیس eth1 به عنوان پورتی از bridge فوق، از دستور زیر کمک میگیریم:
# ovs-vsctl add-port br-eth1 eth1
ابتدا جهت ایجاد یک bridge با نام br-eth1 از دستور زیر استفاده میکنیم:
# ovs-vsctl add-br br-eth1
سپس جهت اضافه کردن اینترفیس eth1 به عنوان پورتی از bridge فوق، از دستور زیر کمک میگیریم:
# ovs-vsctl add-port br-eth1 eth1
در ادامه نیز فایل پیکربندی ml2_conf.ini را توسط ویرایشگر متنی vi باز کرده:
# vi /etc/neutron/plugins/ml2/ml2_conf.ini
و سپس پیکربندیهای زیر را در آن انجام میدهیم:
• در خط 115، مقدار vlan را در جلوی عبارت tenant_network_types = اضافه میکنیم:
[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vxlan
• در خط 166 و در زیر بخش [ml2_type_flat] عبارت زیر را وارد کنید:
[ml2_type_flat]
flat_networks = physnet1
• در خط 220 و در زیر بخش [ml2_type_vxlan] عبارت زیر را اضافه نمایید:
[ml2_type_vxlan]
vni_ranges = 1:1000
• خط 248 را بصورت زیر تغییر دهید:
firewall-driver = iptables_hybrid
و در نهایت فایل پیکربندی مزبور را ذخیره کرده و از آن خارج شوید.
# vi /etc/neutron/plugins/ml2/ml2_conf.ini
و سپس پیکربندیهای زیر را در آن انجام میدهیم:
• در خط 115، مقدار vlan را در جلوی عبارت tenant_network_types = اضافه میکنیم:
[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vxlan
• در خط 166 و در زیر بخش [ml2_type_flat] عبارت زیر را وارد کنید:
[ml2_type_flat]
flat_networks = physnet1
• در خط 220 و در زیر بخش [ml2_type_vxlan] عبارت زیر را اضافه نمایید:
[ml2_type_vxlan]
vni_ranges = 1:1000
• خط 248 را بصورت زیر تغییر دهید:
firewall-driver = iptables_hybrid
و در نهایت فایل پیکربندی مزبور را ذخیره کرده و از آن خارج شوید.
حال این بار فایل پیکربندی openvswitch_agent.ini را توسط ویرایشگر متنی vi باز کرده:
# vi /etc/neutron/plugins/ml2/openvswitch_agent.ini
و سپس پیکربندیهای زیر را در آن انجام دهید:
• در خط 114 و در زیر بخش [agent] خطوط زیر را درج کنید:
[agent]
tunnel_types = vxlan
l2_population = True
prevent_arp_spoofing = True
• در خط 195 و در زیر بخش [ovs] آدرس این host را برای عبارت local_ip مشخص نمایید:
[ovs]
local_ip = 10.0.0.50
bridge_mappings = physnet1:br-eth1
در آخر نیز فایل پیکربندی مزبور را ذخیره کرده و از آن خارج شوید.
# vi /etc/neutron/plugins/ml2/openvswitch_agent.ini
و سپس پیکربندیهای زیر را در آن انجام دهید:
• در خط 114 و در زیر بخش [agent] خطوط زیر را درج کنید:
[agent]
tunnel_types = vxlan
l2_population = True
prevent_arp_spoofing = True
• در خط 195 و در زیر بخش [ovs] آدرس این host را برای عبارت local_ip مشخص نمایید:
[ovs]
local_ip = 10.0.0.50
bridge_mappings = physnet1:br-eth1
در آخر نیز فایل پیکربندی مزبور را ذخیره کرده و از آن خارج شوید.
حال کافیست تا دستور زیر را اجرا نموده:
# for service in dhcp-agent l3-agent metadata-agent openvswitch-agent; do
systemctl restart neutron-$service
done
# for service in dhcp-agent l3-agent metadata-agent openvswitch-agent; do
systemctl restart neutron-$service
done
و در صورتیکه فایروال Firewalld بر روی سرور شما در حال اجراست، با استفاده از دستور زیر آن را متوقف نمایید:
# systemctl stop firewalld
گام3: تغییر تنظیمات بر روی Compute Node
برای این منظور ابتدا فایل پیکربندی ml2_conf.ini را توسط ویرایشگر متنی vi باز کرده:
# vi /etc/neutron/plugins/ml2/ml2_conf.ini
و سپس پیکربندیهای زیر را در آن انجام میدهیم:
• در خط 115، مقدار vxlan را در جلوی عبارت tenant_network_types = اضافه میکنیم:
[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vxlan
• در خط 166 و در زیر بخش [ml2_type_flat] عبارت زیر را اضافه کنید:
[ml2_type_flat]
flat_networks = physnet1
• در خط 220 و در زیر بخش [ml2_type_vxlan] عبارت زیر را مشخص نمایید. در واقع توسط این دستور رنج VNIهای خود را تعریف میکنیم:
[ml2_type_vxlan]
vni_ranges = 1:1000
• خط 248 را بصورت زیر تغییر دهید:
firewall_driver = iptables_hybrid
و در نهایت فایل پیکربندی مزبور را ذخیره کرده و از آن خارج شوید.
# systemctl stop firewalld
گام3: تغییر تنظیمات بر روی Compute Node
برای این منظور ابتدا فایل پیکربندی ml2_conf.ini را توسط ویرایشگر متنی vi باز کرده:
# vi /etc/neutron/plugins/ml2/ml2_conf.ini
و سپس پیکربندیهای زیر را در آن انجام میدهیم:
• در خط 115، مقدار vxlan را در جلوی عبارت tenant_network_types = اضافه میکنیم:
[ml2]
type_drivers = flat,vlan,gre,vxlan
tenant_network_types = vxlan
• در خط 166 و در زیر بخش [ml2_type_flat] عبارت زیر را اضافه کنید:
[ml2_type_flat]
flat_networks = physnet1
• در خط 220 و در زیر بخش [ml2_type_vxlan] عبارت زیر را مشخص نمایید. در واقع توسط این دستور رنج VNIهای خود را تعریف میکنیم:
[ml2_type_vxlan]
vni_ranges = 1:1000
• خط 248 را بصورت زیر تغییر دهید:
firewall_driver = iptables_hybrid
و در نهایت فایل پیکربندی مزبور را ذخیره کرده و از آن خارج شوید.