عملیات 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
و در نهایت فایل پیکربندی مزبور را ذخیره کرده و از آن خارج شوید.
در ادامه این بار فایل پیکربندی 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] میبایست IP آدرس این host را برای عبارت local_ip مشخص نمایید:
[ovs]
local_ip = 10.0.0.51
در آخر هم فایل پیکربندی مزبور را ذخیره کرده و از آن خارج شوید.
# vi /etc/neutron/plugins/ml2/openvswitch_agent.ini
و بعد پیکربندیهای زیر را در آن انجام دهید:
• در خط 114 و در زیر بخش [agent] خطوط زیر را درج کنید:
[agent]
tunnel_types = vxlan
l2_population = True
prevent_arp_spoofing = True
• در خط 195 و در زیر بخش [ovs] میبایست IP آدرس این host را برای عبارت local_ip مشخص نمایید:
[ovs]
local_ip = 10.0.0.51
در آخر هم فایل پیکربندی مزبور را ذخیره کرده و از آن خارج شوید.
سپس توسط دستورات زیر سرویس neutron-openvswitch-agent را یکبار restart نموده تا تنظیمات و پیکربندیهای انجام شده اعمال شوند. همچنین اگر فایروال Firewalld بر روی سرور شما در حال اجراست، آن را متوقف نمایید:
# systemctl restart neutron-openvswitch-agent
# systemctl stop firewalld
# systemctl restart neutron-openvswitch-agent
# systemctl stop firewalld