Stein 오픈스택 클라우드 분석(9) - 외부에서 가상머신에 SSH접속을 위한 유동 IP (Floating IP) 설정하기

blog post 

 

앞서 포스트를 통해 가상 머신을 생성하고 테넌트 네트워크까지 완료하였습니다. (해당 포스트: Stein 오픈스택 클라우드 분석(3) - 외부&내부 네트워크, 서브넷, 라우터 생성) 하지만 생성한 VM에 오픈스택 대시보드 VNC 콘솔을 통해 접속해보면 생각보다 느린 것을 느낄 수 있습니다. 외부에서 SSH로 접속할 수 있다면 이러한 성능 문제를 어느 정도 개선할 수 있을 텐데, 현재 네트워크 구성상, 외부에서 SSH 접속도 어려운 상황입니다. 이러한 문제를 해결하기 위해 Floating IP라 불리는 오픈스택의 네트워크 기능을 활용하여 외부에서 SSH로 접속할 수 있는 환경을 구성해 보도록 하겠습니다.

 

 

현재 네트워크 구성

 

 

[Stein 오픈스택 클라우드 분석(3) - 외부&내부 네트워크, 서브넷, 라우터 생성] 포스트까지 진행한 네트워크 구성을 간단하게 그림으로 표현해보면 아래와 같습니다.

 

 

현재 모든 VM은 10.10.0.0/24 네트워크에 구성되어 있으며, 이 네트워크는 VxLAN 기반으로 생성된 가상의 오버레이 네트워크입니다. 이 VM에서 생성되어 외부로 향하는 모든 트래픽은 외부망인 192.168.0.0/24 네트워크의 ip로 NAT 되어 외부망으로 향하도록 구성되어 있습니다. (현재 저의 오픈스택 기준으로 이들의 게이트웨이는 192.168.0.159로 지정되어있으나, 그림에서 디테일하게 여기까지 표현하지는 않았습니다)

 

이와는 별개로 실제 물리망에는 총 4개의 노드(Compute0, Controller, Storage, Network)가 구축되어 있는 상태입니다.

 

 

 

문제 상황

 

 

문제는 아래와 같이 VM에 ssh로 접근할 수 없다는 점입니다. 관리자(admin)나 클라우드 시스템을 사용하는 사용자(user1)는 모두 현재 오픈스택 시스템에 접근할 수 있고, 여기에서 동작하는 VM에 대시보드 VNC의 6080 포트를 사용하여 접근할 수 있는 상태에 있습니다. 기본적으로 Nova 서비스가 오픈스택 대시보드를 통해 VNC 콘솔 기능을 제공하고 있기 때문입니다.

 

 

하지만 SSH 포트나 MS의 mstsc 3389와 같은 포트에는 접근하기 어려운 상황에 있습니다. user나 admin이 사용하는 네트워크(192.168.0.0/24)와 오버레이 네트워크(10.10.0.0/24)가 분리되어 있다는 점이 문제입니다. 

 

이를 해결하기 위해 몇 가지 방법이 있습니다. 우선, user나 admin이 vm 접근을 위한 별도의 네트워크를 하나 더 만들어서 user, admin에 인터페이스를 부여하고, 이 네트워크를 오픈스택에서도 public 네트워크로 추가하여 VM에 해당 네트워크의 인터페이스를 할당함으로써 해결하는 방법을 사용할 수 있습니다.

 

또 다른 방법으로는 Floating IP를 활용하는 방법입니다. 이번 포스트에서는 이 Floating IP를 활용하는 방법으로 이 문제를 해결해 보도록 하겠습니다.

 

 

 

Floating IP란?

 

 

Floating IP는 오픈스택에서 제공하는 네트워킹 기능 중 하나로, vm이 할당받은 고정 ip에 공용망에서 할당받은 ip를 매핑하는 기술입니다. 예를 들어, 아래와 같이 10.10.0.86이라는 vm의 고정 ip에 외부망과 연결된 공용 ip인 192.168.0.168을 attach 하는 것입니다.

 

 

이렇게 되면 외부에서는 Floating IP인 192.168.0.168을 통해 VM에 접근할 수 있게 됩니다.

 

 

 

Floating IP 생성 및 할당

 

 

분석 포스트(3)를 통해 구축된 네트워크를 바탕으로 Floating IP 환경을 구성해 보도록 하겠습니다.

 

Floating IP는 기본적으로 오픈스택의 Public 네트워크를 통해 할당됩니다. 따라서 Floating IP를 할당받기 위한 오픈스택 Public 네트워크가 필요합니다. 본 환경에서는 사전에 이미 구축된 192.168.0.0/24 External_Net을 사용해 보도록 하겠습니다. 네트워크 구축 관련해서는 관련 포스트를 참고 바랍니다. (해당 포스트: Stein 오픈스택 클라우드 분석(3) - 외부&내부 네트워크, 서브넷, 라우터 생성)

 

 

 

우선 admin 계정으로 대시보드에 로그인 후, 아래와 같이 "관리-> Floating IP-> 프로젝트에 IP 할당"을 클릭합니다.

 

 

기존에 우리가 생성한 "Public Network"를 선택하고 인스턴스에 할당할 ip 하나를 생성합니다.

 

 

 다음으로 "프로젝트-> Compute-> 인스턴스-> (인스턴스의) 작업-> 유동 IP 연결"을 클릭합니다.  (물론 user1으로 로그인하여 진행해도 됩니다.)

아래와 같이 우리가 생성한 ip, 그리고 이 floating ip를 연결할 인스턴스의 private ip를 각각 선택해주고 연결을 클릭합니다.

 

인스턴스에 Floating IP가 함께 표시되는 것을 볼 수 있습니다.

 

 

다음으로 개인 PC에서 ssh 연결을 시도해 봅니다. (저는 192.168.0.30에서 접속 시도 중)

 

[root@localhost]# ssh root@192.168.0.168
...(반응 없음)...

 

연결이 진행되지 않습니다. 오픈스택의 보안 그룹에서 막혔기 때문입니다.

 

 

 

보안 그룹 설정

 

 

오픈스택에는 "보안 그룹"이라는 기능이 있습니다. 이 기능은 오픈스택에서 제공하는 최소한의 보안 기능으로, 우리가 흔히 알고 있는 방화벽과 거의 비슷한 역할을 수행합니다. 이 보안 그룹 역시, 시스템으로 유입되는 트래픽과 시스템에서 나가는 트래픽(in/outbound)에 대해 프로토콜 별로 허용/차단 여부를 설정할 수 있습니다.

 

보안 그룹을 설정하기 위해 "프로젝트-> Compute->네트워크-> 보안 그룹"으로 이동해 봅니다. 아래와 같이 default 방화벽 규칙이 생성되어있는 것을 볼 수 있습니다. 해당 보안 그룹의 규칙 관리를 클릭합니다.

 

규칙 추가 클릭 후 아래와 같이 설정해 줍니다

  • Direction: 트래픽이 들어오는 방향 (VM으로 접속을 위한 설정이므로 여기에서는 들어옴으로 지정)
  • 열린 포트: 포트의 범위 혹은 단일 포트 여부 지정 (여기에서는 22번 포트만 설정할 것이므로 "포트" 선택)
  • 포트: 포트 번호 입력 (SSH: 22번 포트)
  • 원격: CIDR 선택
  • CIDR: 외부에서 접속할 네트워크 혹은 단일 PC의 ip 선택 (예시에서는 192.168.0.30번만 허용하도록 설정)

 

 

이제 아래와 같이 192.168.0.30번 PC에서 ssh 접속을 시도해 봅니다. 정상적으로 VM으로 연결되는 것을 확인할 수 있습니다.

 

 

[root@localhost]# ssh root@192.168.0.168
The authenticity of host '192.168.0.168 (192.168.0.168)' can't be established.
RSA key fingerprint is SHA256:...(생략)....
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.168' (RSA) to the list of known hosts.
root@192.168.0.168's password: 

 

 

반면에 다른 PC에서는 여전히 ssh 연결이 되지 않습니다. (보안 그룹에서 30번 PC만 허용한 상태이므로)

 

이상으로 전체적인 Floating IP 설정부터 SSH 연결까지 다뤄보았습니다. 이 방법을 응용하면 mstsc 연결 등, 다른 애플리케이션을 통해 VM으로의 연결도 가능합니다. 기회가 된다면 오픈스택 보안 기능을 다루는 방법에 대해 별도의 포스트로 다뤄보도록 하겠습니다.

 

 

TAGS.

Comments