การติดตั้ง openvswitch บน ubuntu 14.04 ขึ้นไป 2

ถ้าเครื่อง host ที่ติดตั้ง openvswitch บน ubuntu 14.04 ขึ้นไปเป็นเครื่องจริง หรือเป็น VM ที่สร้างขึ้นบน virtual box การติดตั้ง openvswich ก็จะตรงไปตรงมา แต่ถ้าเครื่อง host ที่จะติดตั้งเป็น VM ที่รันขึ้นด้วย virsh และ KVM เช่นบนระบบ Cloud เช่น OpenStack การติดตั้งก็จะมีสิ่งที่ต้องทำเพิ่มเติม ดังที่จะได้กล่าวถึงท้าย blog นี้

ก่อนอื่นสมมุติว่า host ของคุณมี network interface card (nic) หนึ่งอันและเชื่อมต่อกับ DHCP network และคุณรันคำสั่งเหล่านี้ที่ console (ที่ๆคุณป้อนคำสั่งได้ถึงแม้ว่า เครื่องใช้ network ไม่ได้ ยกอาทิเช่น console ของ OpenStack instance)

ให้รันคำสั่งต่อไปนี้

 
$ sudo apt-get install openvswitch-switch 
$ sudo ovs-vsctl show 

เริ่มต้นดังภาพ 1 คือ kernel ใช้ eth0 เพื่อสื่อสาร
netstack-eth0

ภาพ 1

สร้าง virtual switch หรือ bridge ชื่อ “sw0” ขึ้นใน network stack ของเครื่อง host (ภาพ 2)

$ sudo ovs-vsctl add-br sw0

netstack-sw0

ภาพ 2

ให้ modify ไฟล์ /etc/network/interfaces เพื่อเพิ่ม configuration ของ “sw0” เข้าไป

$ sudo su
# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
# cp /etc/network/interfaces interfaces.dhcp.backup
# vi /etc/network/interfaces
# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto sw0
iface sw0 inet dhcp
        bridge_ports eth0
        bridge_stp off
        bridge_maxwait 0
        bridge_fd 0
#

เชื่อม eth0 (ถ้า NIC ของเครื่อง host ของคุณใช้ชื่อนี้)เข้ากับ virtual switch “sw0” (ภาพ 3) ตอนนี้ network จะหลุดเนื่องจาก kernel’s network stack ไม่ได้เชื่อมกับ eth0

$ sudo ovs-vsctl add-port sw0 eth0

netstack-eth0-sw0

ภาพ 3

เช็ค hardware address ว่า hardware address ของ eth0 และ sw0 เหมือนกันหรือไม่ ณ. จุดนี้ ถ้าคุณใช้เครื่องจริงหรือ host ที่เป็น VM ที่สร้างจาก virtual box โดยตรง hardware address ก็น่าจะเหมือนกัน

แต่ในกรณีที่ VM นั้นสร้างด้วย virsh ก็อาจได้ hardware address ที่ต่างกันได้ (ยกตัวอย่างเช่นในระบบ openstack เมื่อผู้ใช้ที่ต้องการสร้าง openvswitch network สำหรับรัน container อาจเจอปัญหานี้) ดังนั้น เราจะเช็ค hardware address ก่อนและ เปลี่ยนค่าให้ตรงกันถ้าไม่ตรง

$ sudo su
# ip link
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  mtu 1450 qdisc pfifo_fast master ovs-system state UP mode DEFAULT group default qlen 1000
    link/ether fa:16:3e:cb:74:b1 brd ff:ff:ff:ff:ff:ff
3: ovs-system:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default
    link/ether e2:22:86:97:27:ee brd ff:ff:ff:ff:ff:ff
4: sw0:  mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/ether 0a:78:1b:28:87:42 brd ff:ff:ff:ff:ff:ff
#

จะเห็นว่า fa:16:3e:cb:74:b1 และ 0a:78:1b:28:87:42 มัน ต่างกัน เราจะใช้คำสั่งข้างล่างเพื่อทำให้เหมือนกัน

# ovs-vsctl set bridge sw0 other_config:hwaddr="fa:16:3e:cb:74:b1"
# ip link
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0:  mtu 1450 qdisc pfifo_fast master ovs-system state UP mode DEFAULT group default qlen 1000
    link/ether fa:16:3e:cb:74:b1 brd ff:ff:ff:ff:ff:ff
3: ovs-system:  mtu 1500 qdisc noop state DOWN mode DEFAULT group default
    link/ether e2:22:86:97:27:ee brd ff:ff:ff:ff:ff:ff
4: sw0:  mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default
    link/ether fa:16:3e:cb:74:b1 brd ff:ff:ff:ff:ff:ff
# exit
$ 

หลังจากนั้น เราจะใช้คำสั่งข้างล่างบอก kernel ให้ลบ ip address ที่กำหนดให้ eth0 ออกไป เนื่องจาก network stack ของเครื่องในขณะนี้เชื่อมต่อกับ sw0 (ไม่ไช่ต่อกับ eth0) (ภาพ 4)

$ sudo ifconfig eth0 0
$ sudo ifup eth0

อันดับถัดไป activate “sw0” ให้เป็น interface หรือช่องทางที่ network stack ของ host kernel ใช้สื่อสารกับโลกถายนอก host kernel ส่งคำร้องขอ dhcp IP address ผ่าน interface ที่ส่งคำขอผ่าน switch “sw0” (ซึ่งจะถูกส่งผ่าน eth0 อีกที) ไปยัง dhcp server บน network

$ sudo ifup sw0
Internet Systems Consortium DHCP Client 4.2.4
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/sw0/fa:16:3e:cb:74:b1
Sending on   LPF/sw0/fa:16:3e:cb:74:b1
Sending on   Socket/fallback
DHCPDISCOVER on sw0 to 255.255.255.255 port 67 interval 3 (xid=0xa6a8ca44)
DHCPREQUEST of 192.168.3.4 on sw0 to 255.255.255.255 port 67 (xid=0x44caa8a6)
DHCPOFFER of 192.168.3.4 from 192.168.3.2
DHCPACK of 192.168.3.4 from 192.168.3.2
bound to 192.168.3.4 -- renewal in 33661 seconds.
$

netstack-sw0-up

ภาพ 4

ในขณะนี้ถ้า “ifconfig” ก็จะเห็นว่า “sw0” ได้รบ ip address และคุณสามารถ ping หรือใช้ tools อื่นๆเข้าถึง internet ได้

$ ifconfig
eth0      Link encap:Ethernet  HWaddr fa:16:3e:cb:74:b1
          inet6 addr: fe80::f816:3eff:fecb:74b1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:8887 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5788 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:39476580 (39.4 MB)  TX bytes:616280 (616.2 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:412 (412.0 B)  TX bytes:412 (412.0 B)

sw0       Link encap:Ethernet  HWaddr fa:16:3e:cb:74:b1
          inet addr:192.168.3.4  Bcast:192.168.3.255  Mask:255.255.255.0
          inet6 addr: fe80::f816:3eff:fecb:74b1/64 Scope:Link
          UP BROADCAST RUNNING  MTU:1450  Metric:1
          RX packets:152 errors:0 dropped:0 overruns:0 frame:0
          TX packets:173 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:14294 (14.2 KB)  TX bytes:38146 (38.1 KB)
$

2 thoughts on “การติดตั้ง openvswitch บน ubuntu 14.04 ขึ้นไป

  1. Pingback: การติดตั้งและใช้งาน kvm (qemu) แบบ โบราณ ด้วย command line ล้วนๆ บน ubuntu 16.04 ← Science Cloud Community

  2. Pingback: การสร้าง openvswitch network ด้วย GRE tunneling สำหรับ Qemu/KVM virtual machines ← Science Cloud Community

Leave a Reply