rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-ml
- QoS 는 서비스의 품질을 보장하는 기술이다
- Netflow , sFlow , CLI , 여러 물리 서버를 가로지르는 분배 Switch 기능
일반적인 L3 스위치 구조는 아래와 같다
- DATA Plane 은 데이터 처리부이며 인터페이스가 존재한다. 패킷이 들어오면, DATA Plane 에서 L2 주소를 처리한다. 즉, MAC Table ( CAM Table ) 을 이용하여 MAC 주소의 BIT 를 매핑하여 처리한다. 만약, 여기서 MAC 주소가 처리된다면, L3 부분으로 넘어갈 필요가 없다. 이는 같은 네트워크일때 해당된다
- DATA Plane 에서 처리 못하는 패킷은 CONTROL Plane 으로 넘어간다. 여기서 TCAM Table ( 라우팅 , QoS , ACL , NAT ) 를 이용해서 처리한다. 이를 통해 다른 네트워크에서 온 패킷을 처리할 수 있다. 처리가 되면 다시 DATA Plane 로 보내서, 외부로 나가게 한다
허나, 위와 같이 구성되면, 다수의 장비가 있을 때, 장비들에 대해 각각 설정을 해줘서 일관성에 대한 위험과 불편함이 있다
따라서, 위와 같이 논리적 혹은 물리적 분리를 하여, 각 장비에는 DATA Plane 만을 놓고, CONTROL Plane 을 한 곳에 모을 수 있다. 이 모은 것을 Controller 에 연결하여 Controller 를 통해 Program 을 이용한 명령으로 연결된 모든 Network Device 를 제어할 수 있다. 아래와 같은 구조이다
기존에는 각 통신 장비를 만드는 업체들은 폐쇄형 이기에 위와 같이 할 수 없었다. 허나, 오픈 소스로 만들어진 통신 장비들이 등장하면서 위와 같이 설정할 수 있게 되었다
SDN Controller 는 이렇게 Program 을 통한 명령을 OpenFlow Protocol 를 통해 Network Device 의 Data Plane 을 제어할 수 있다
SDN 은 L3 Switch 에서 Control Plane 을 제거하고, 전체 Control Plane 을 컨트롤 하기 위한 Controller 로 연결한다. 이 Controller 에서 Openflow 를 이용하여 정책 ( rule ) 을 각각의 Data Plane 으로 전송한다. SDN 은 NFV ( Network Functions Virtualization ) 와 함께 사용해야 성능이 극대화 된다
- SK 에서는 ONOS 를 사용한다
- SDN 에 대한 추가 정보는 다음 블로그를 참조 ( http://blog.skby.net/sdn%EA%B3%BC-%EC%98%A4%ED%94%88%ED%94%8C%EB%A1%9C%EC%9A%B0openflow/ )
Openflow 는 Control Plane 과 Data Plane 을 분리하고, 이를 연결시에 사용하는 인터페이스 이다. 이를 통해 소프트웨어로 이러한 Plane 을 구현할 수 있다
일반적으로 L2 Switch 에 Openflow Protocl 을 펌웨어로 넣어 Openflow Switch 를 구성하고, Openflow Controller 는 소프트웨어로 구현한다
Openflow 는 Flow table 을 사용하는데, 여기에는 Port , 출발지 / 목적지 정보가 저장된 RULE 부분과, 특정 port 로 패킷을 전달 혹은 Drop / 정의된 경로에 따라 패킷을 전달하는 등의 정보가 들어간 Action 부분과, 카운터 정보를 통해 제어 정보가 등록된 시간이 저장된 Stats 부분으로 나뉘어진다
yum -y install epel-release https://www.rdoproject.org/repos/rdo-release.rpm
yum -y install openvswitch bridge-utils
yum update -y
systemctl start openvswitch && systemctl enable openvswitch
위 코드를 통해 kvm 1 과 kvm 2 에 OVS 를 설치하고 , 실행하자
이제 기존에 Bridge 기반 br0 를 OVS 기반 vswitch01 로 변경하자
먼저, br0 의 이름을 vswitch01 로 변경하자
해당 파일을 편집기로 열어서 위와 같이 설정하자
eth 0 도 설정해줘야 한다. 편집기로 열어주자
위와 같이 eth 0 을 설정하자
설정후 kvm 을 재부팅 하자
kvm 2 에도 동일하게 설정해주자
- ovs 기반의 vswitch01 이라는 스위치가 있는 것을 확인 가능 하다
- 이 스위치에는 두 개의 Port 가 있는데, 하나는 인터넷과 연결된 eth 0 이고, internal 타입의 vswitch01 이라는 스위치와 동일한 이름의 Port 가 존재하는데, 이는 관리용 이다. 이 Port 는 자동 생성되며, 이를 통해 내부에 명령을 전달할 수 있다
virt-install --name centos1 --vcpus 1 --ram 1024 --disk /remote/centos01.qcow2 --import --network bridge:vswitch01,model=virtio,virtualport_type=openvswitch \
> --network bridge:vswitch02,model=virtio,virtualport_type=openvswitch,target=centos01_port1 \
> --graphics vnc --noautoconsole
TYPE=Ethernet
NAME=eth1
DEVICE=eth1
IPADDR=172.16.123.101
PREFIX=24
ONBOOT=yes
현재 위와 같은 구조를 구성했다. 이때, 아직 터널링을 구현하지 않았으므로 172.16.123.101 과 .102 가 통신을 할 수 없다
우리는 다음 장에서 터널링을 구현하여 이 사설 구간 끼리 통신이 가능하게 할 것 이다