분산 가상 다중 계층 스위치 의 오픈 소스 구현 입니다 . Open vSwitch의 주요 목적은 컴퓨터 네트워크 에서 사용되는 여러 프로토콜 및 표준을 지원하면서 하드웨어 가상화 환경을 위한 스위칭 스택을 제공하는 것입니다.
즉, 다중계층 가상 스위치 라는 말임
물리적인 네트워크
= underlay network
이와 반대로
물리 네트워크 위에 성립되는 가상의 네트워크
= overlay network
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 설정
- br0 → vswitch01 인터페이스 변경
- vswitch01, vswitch02 네트워크 정의 및 시작
- ovs에 vswitch를 add-br
- cirros3 및 cirros4를 생성하여 각각 vswitch02의 port3과 port4에 연결.
다시 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
빨강 포트10 : 172.16.101.0 /24 (1번, 3번)
파랑 포트20 : 172.16.102.0 /24 (2번 4번)
💡 tag가 다르면 같은 대역이더라도 통신이 안된다.
💡 tag가 없고 대역이 같거나 / tag가 같고 대역이 같으면 통신
💡 tag는 지우지 않고 덮어쓸 수 있다.
VM srv1에서
ovs-vsctl set port port1 tag=10
ovs-vsctl set port port2 tag=20
ovs-vsctl show #확인