1. Vswitch 구현 & 외부 Network 생성
구성할 환경
- 위와 같이 OVS 기반의 Vswitch 를 통해 인스턴스가 외부와 통신이 가능한 환경을 구성해보자
- Overlay Network 를 구성하기 위해서 Vswitch 가 필요하다
Vswitch 구현
[root@localhost ~(logged)]
[root@localhost network-scripts(logged)]
- network-scripts 디렉토리로 가서 eth 0 인터페이스 설정 파일을 복사하여 ifcfg-br-ex 를 생성해주자. 이름은 반드시 같아야 한다
TYPE=OVSBridge
BOOTPROTO=none
NAME=br-ex
DEVICE=br-ex
DEVICETYPE=ovs
ONBOOT=yes
IPADDR=211.183.3.111
PREFIX=24
GATEWAY=211.183.3.2
DNS1=8.8.8.8
NM_CONTROLLED=no
- 위와 같이 ifcfg-br-ex 의 내용을 수정해주자. 이름과 Device 가 br-ex 이며, 타입은 OVSBridge 이다. Ip 는 그대로 사용한다. Vswitch 를 생성하였다
TYPE=OVSPort
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
DEVICETYPE=ovs
OVS_BRIDGE=br-ex
ONBOOT=yes
NM_CONTROLLED=no
- eth 0 는 OVS switch 에 있는 Port 가 되야되므로 위와 같이 설정한다. Ip 는 없애야 한다. 이제 eth 0 는 OVS switch 에 포함된 Port 가 되었다. Vswitch 에 eth 0 를 Port 로 넣어주었다
- 물리적으로 외부 요청은 eth 0 를 통해 들어온다. eth 0 는 원래 virtual switch 에 속하며, Ip 를 가지고 있어서 해당 Ip 로의 접근은 eth 0 을 통해 virtual switch 에 들어가게 하였다. 우리는 br-ex 라는 가상 스위치에 외부 요청이 오게 해야 하므로, 이 eth 0 를 가상 스위치의 Port 로 집어 넣었다. 이는 스위치의 Port 가 되므로 Ip 는 제거하였고, Ip 는 가상 스위치 자체에 넣었다
Network 생성
openstack network create --provider-physical-network extnet --provider-network-type flat --external extnet
- external 은 외부 연결을 위한 옵션이다
- provider-physical-network 는 Isp 에서 부터 내부 라우터까지의 Network 를 지정하는 것이다. 즉, 외부 - 가상 스위치 - 라우터 에 해당하는 네트워크 이다
- provider-network-type flat 은 Isp 에서부터 eth 0 이 연결되는 구간에 대한 옵션으로 flat 으로 설정했으므로 연결 구조를 flat 하게 설정하였다
Subnet 생성
openstack subnet create extsubnet --network extnet --subnet-range 211.183.3.0/24 --allocation-pool start=211.183.3.201,end=211.183.3.239 --no-dhcp --dns-nameserver 8.8.8.8 --gateway 211.183.3.2
- 정적 NAT 를 해줘야 하므로 DHCP 는 꺼줘야 한다
- allocation-pool 은 floating Ip 의 pool 이다
- gateway 는 Isp 쪽을 지정해야 하므로 .2 이다
openstack network set --external ext_net
- 안해줘도 되지만, 혹시 모르니 ext_net network 는 외부로 나가는 network 라고 set 해주자
2. Network 연결 & Floating IP 발행
연결하기
- 확인해보면 지구 모양이 붙어있으며, network 가 가장 왼쪽에 위치한다
- 외부 네트워크를 선택해주자. SNAT 는 정적 NAT 를 의미한다
- 내부 네트워크와 외부 네트워크가 연결되었다!!
- 라우터에서 게이트 웨이 설정을 하게 되면, 외부 네트워크이 floating Ip 를 가져와서 라우터에 할당해준다
- 즉, 내부에서 외부로 나갈때, 해당 네트워크의 라우터에 접근하면, 할당된 floating Ip 로 정적 NAT 가 되어 나간다
Floating Ip 발행 - DashBoard
- 연결할 인스턴스 를 선택하고 연결을 눌러주자
- 해제할 때는 연결해제 - 유동 IP 해제 를 통해 인스턴스와 Floating IP 의 연결을 해제하고, IP 를 다시 Pool 에 담는다
- 라우터를 외부 Network 에 연결했을 때, 라우터에 Floating IP 가 할당되었다. 이번에는 배포된 Instance 에 직접 Floating IP 를 할당했으므로, 해당 IP 로 접근시, 우리는 가상 스위치를 사용하기에 외부 - 가상 스위치 - 라우터 까지가 같은 Network 에 속하므로 eth 0 를 거쳐서 가상 스위치를 거쳐서 라우터 까지 요청이 도달한다. 이때, 정적 NAT 를 통해 Instance 에 Floating IP 를 할당했으므로, 라우터에서는 해당 IP 와 연결된 Instance 의 IP 로 도착지 주소를 변환하여 요청을 보내준다
확인하기
- 외부와 통신이 잘된다. Floating IP 는 다시 발급 받았다. IP 주소가 다른것은 신경쓰지 말자. 인스턴스에 Floating IP 를 할당하였고, 인스턴스에 모든 주소에 대해 ICMP 프로토콜로 들어오는 것을 보안 그룹에서 허용하였으며, Vswitch 를 통해 라우터가 외부 네트워크와 같은 네트워크에 있기에 통신이 가능하다
- .217 로 접근 하면, 라우터에서 NAT 되서 인스턴스로 들어간다
혹시 안된다면 network manager 를 restart 해주자
3. 외부에서 접속하기
Private Key 확인
cat ~/.ssh/gildong.pem
- 윈도우에 복사한 내용을 가지고 pem 파일을 만들자
- puttygen 에 들어가서 해당 파일을 이용해 ppk 파일을 만들자
Putty 로 접속
- 인스턴스에 할당된 Floating IP 주소를 입력하고, 접속하자. 계정 이름은 centos 이다