OVS (Open VSwitch)

JY Lee·2023년 8월 15일
0
post-thumbnail

OVS 란?

분산 가상 다중 계층 스위치 의 오픈 소스 구현 입니다 . Open vSwitch의 주요 목적은 컴퓨터 네트워크 에서 사용되는 여러 프로토콜 및 표준을 지원하면서 하드웨어 가상화 환경을 위한 스위칭 스택을 제공하는 것입니다.

출처 - https://en.wikipedia.org/wiki/Open_vSwitch

즉, 다중계층 가상 스위치 라는 말임

물리적인 네트워크
= underlay network

이와 반대로

물리 네트워크 위에 성립되는 가상의 네트워크
= overlay network

OVS 실습

VM srv1 에서

yum install -y epel-release
yum -y install https://www.rdoproject.org/repos/rdo-release.rpm
yum -y install openvswitch

systemctl restart openvswitch
systemctl enable openvswitch

cd /etc/sysconfig/network-scripts/
mv ifcfg-br0 ifcfg-vswitch01 #인터페이스 변경
vi ifcfg-vswitch01 #변경

DEVICE=vswitch01
NAME=vswitch01
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=none
ONBOOT=yes
DNS1=8.8.8.8
IPADDR=211.183.3.10
PREFIX=24
GATEWAY=211.183.3.2
NM_CONTROLLED=no
vi ifcfg-eth0 #도 변경

DEVICE=eth0
NAME=eth0
DEVICETYPE=ovs
TYPE=OVSPort
ONBOOT=yes
OVS_BRIDGE=vswitch01
NM_CONTROLLED=no
systemctl restart network #재시작
ifconfig eth0 #확인
ifconfig vswitch01
ping 8.8.8.8

네트워크 생성(1)

cd /etc/libvirt/qemu/networks/
vi vswitch01.xml #밑 입력
<network>
<name>vswitch01</name>
<forward mode='bridge'/>
<bridge name='vswitch01'/>
<virtualport type='openvswitch'/>
</network>
virsh net-define vswitch01.xml #확인
virsh net-start vswitch01 #시작

네트워크 생성(2)

/etc/libvirt/qemu/networks #경로
vi vswitch02.xml #밑 복붙
<network>
<name>vswitch02</name>
<forward mode='bridge'/>
<bridge name='vswitch02'/>
<virtualport type='openvswitch'/>
</network>
virsh net-define vswitch02.xml #확인
virsh net-start vswitch02 #시작

add-br

ovs-vsctl add-br vswitch02
ovs-vsctl show #확인

init 6 #재부팅 하면 바뀌어있음

VM srv3에서

cd /shared

cp -p cirros.img cirros1.img
cp -p cirros.img cirros2.img
cp -p cirros.img cirros3.img
cp -p cirros.img cirros4.img

다시 VM srv1에서는

virt-install --name=cirros1 --ram=512 --disk=/remote/cirros1.img --import --network virtualport_type='openvswitch',source=vswitch02,target=port1 &
virsh console cirros1

sudo vi /etc/network/interfaces #아래 입력
auto eth0
iface eth0 inet static
address 172.16.101.10
netmask 255.255.255.0
sudo ifup eth0 #적용
sudo ifdown eth0 
sudo ifup eth0 

위에서 cirros1을 만들었기에
cirros2도 만들어보자!

virt-install --name=cirros2 --ram=512 --disk=/remote/cirros2.img --import --network virtualport_type='openvswitch',source=vswitch02,target=port2 &
virsh list #확인
virsh console cirros2

sudo vi /etc/network/interfaces
#오타없이 입력!
auto eth0
iface eth0 inet static
address 172.16.101.10
netmask 255.255.255.0
sudo ifup eth0 #적용
sudo ifdown eth0 
sudo ifup eth0 

#ctrl + ] = 탈출
ovs-vsctl show #확인

💡 srv2 설정

  1. br0 → vswitch01 인터페이스 변경
  2. vswitch01, vswitch02 네트워크 정의 및 시작
  3. ovs에 vswitch를 add-br
  4. cirros3 및 cirros4를 생성하여 각각 vswitch02의 port3과 port4에 연결.
  • vswitch를 통한 GRE 연결
    = 사설 네트워크끼리 연결된 것 처럼 해줌

다시 sv1 에서

ovs-vsctl add-port vswitch02 gre12 -- set interface gre12 type=gre option:remote_ip=211.183.3.20

포트 지우는 명령어

ovs-vsctl del-port vswitch02 gre12

srv2 에서

ovs-vsctl add-port vswitch02 gre21 -- set interface gre21 type=gre option:remote_ip=211.183.3.10

srv1에서 srv2로 핑을 보내고 확인함

sudo tcpdump -i eth0 -nn

VLAN tagging


빨강 포트10 : 172.16.101.0 /24 (1번, 3번)
파랑 포트20 : 172.16.102.0 /24 (2번 4번)

💡 tag가 다르면 같은 대역이더라도 통신이 안된다.
💡 tag가 없고 대역이 같거나 / tag가 같고 대역이 같으면 통신
💡 tag는 지우지 않고 덮어쓸 수 있다.

VLAN tagging 실습

VM srv1에서

ovs-vsctl set port port1 tag=10
ovs-vsctl set port port2 tag=20
ovs-vsctl show #확인

profile
배고픈 소크라테스

0개의 댓글