hyper-v의 가상머신에서 리눅스 웹서버(nginx)를 돌리기

앞에서 hyper-v에 리눅스(centos7)를 설치해 보았다. 네트워크 설정까지 마쳤지만 가상머신의 IP주소는 공인 IP가 아닌 사설IP 주소이므로 외부에서 직접 접속이 불가하다. 필자가 네트워크에 해박한 지식이 있는 것은 아니나 가상 머신 상에서 리눅스 웹서버를 돌리는 방법을 정리하려 한다.

잘 알겠지만 공인 IP와 사설 IP의 차이점은 실제로 외부에 노출된 IP 주소가 공인 IP이고 외부에 직접 노출되지 않고 지역적으로 형성된 네트워크에서 부여되는 것이 사설 IP이다.

쉬운 예를 들면 우리가 사용하는 공유기는 외부에서 들어오는 인터넷 망에 연결된 모뎀에 연결되어 있다.

인터넷 - 모뎀 - 공유기 -컴퓨터(들) 

혹은 공유기 없이 

인터넷 - 모뎀 - 컴퓨터

이렇게 단일 컴퓨터 또는 모뎀에 라우터 기능이 있어서 하나의 모뎀이 여러 개의 공인 IP를 부여해 주기도 한다. 

일반적으로 가정에서 사용하는 방식은 위 두가지 방식 중 하나인데 모뎀에 부여된 주소가 공인 IP이며 공인 IP 하나를 여러 대의 컴퓨터가 공유하기 위해 공유기를 사용하는 것이다. 공유기는 여러 컴퓨터들에게 사설 IP를 부여해주며 이 때 공유기는 gateway(게이트웨이)라는 것을 갖는다.

게이트웨이는 뜻 그대로 내부망과 외부망을 연결하는 통로(관문) 역할을 한다.

게이트웨이는 보통 162.198.0.1이라는 주소를 갖는데 공유기가 공유기에 연결된 컴퓨터들에게 부여해주는 주소는 게이트웨이 앞의 3개의 주소 숫자가 똑같고 마지막 숫자만 다르다.(예를들어 162.198.0.12 등) 

그리고 우리는 hyper-v에서 만든 가상 스위치가 공유기라고 생각하면 된다.

사실 네트워크 관리자가 아니라면 이 정도만 알아두어도 큰 도움이 된다.

여기에서는 메인 컴퓨터가 공유기가 아닌 직접 모뎀에 연결된 경우(공인 IP를 직접 할당받은 경우)를 가정한다. 설령 공유기에 맞물려 있더라도 공유기 내에서도 포트 포워딩을 하면 되지만 이렇게 하면 포트포워딩을 2중으로 해야하므로 그리 권장하지는 않다. 

윈도우10 Hyper-v 설치와 가상머신에서 centos7 네트워크 설정

이제 hyper-v에 설치된 리눅스에 웹서버를 설치하도록 하자. apache를 설치해도 되고 nginx를 설치해도 된다.

# yum update

....

# yum install epel-release

...

# yum install nginx

....

#firewall-cmd --add-service=http --permanent

success

#firewall-cmd reload

success

#systemctl enable nginx

#systemctl start nginx

이렇게 설치를 마친 후 nginx의 상태를 살펴보자.  active(running)이 되어있고 별다른 에러 메세지가 없다면 성공한 것이다.

혹시 Failed to read PID from file /run/nginx.pid: Invalid argument 라는 메세지를 보더라도 그냥 넘기자.(일종의 버그)


설치를 다 했다면 포트 포워딩을 해야한다. 윈도우 펑션키 + r로 실행창을 열어 ncpa.cpl을 실행하면 네트워크 연결 창이 뜬다.

vEthernet은 hyper-v에서 만든 가상 스위치며 이더넷은 실제 인터넷에 연결된 모뎀이다. 우리는 이미 스위치를 게이트웨이로 사용하여 가상머신에 연결했고 이더넷을 공유해서 인터넷 사용까지 가능하도록 설정했었다.

이제 포트 포워딩을 하기 위해 이더넷에서 오른쪽 클릭 -> 속성에 들어간다.

그리고 화살표 순서대로 클릭을 해서 편집을 눌러준다.

IP 주소에 가상머신의 사설 IP주소를 입력한 후 외부 포트번호와 내부포트 번호가 80인 것을 확인 한 후 확인을 눌러준다.

이 작업을 하는 이유는 외부의 컴퓨터에서 사설 IP주소를 찾기 위함이다. 공인 IP에 포트정보를 더해서 사설 IP에 매핑시키는 것이다. 예를들어 공인 IP가 1.243.34.22인 컴퓨터에서 hyper-v로 사설 IP 162.198.0.12와  162.198.0.38인 가상 컴퓨터 두개를 만들었다고 하자.

이 때 포트포워딩으로 1.243.34.22와 80번 포트를 사설 IP 162.198.0.12에 매핑시키면 외부에서 사설 IP에 접속할 수 있게 되는 것이다. 80번 포트는 웹서버 포트이므로 이렇게 매핑했을 때 가상머신의 웹서버에 접속이 되는 것이다.

여기까지 서버의 설치, 실행, 포트포워딩 까지 마쳤으므로 외부의 컴퓨터의 브라우저를 띄어 놓고 공인 IP로 접속하면 가상 머신의 웹서버에 접속이 될 것이다.

그런데 이상하게 메인 컴퓨터나 또는 같은 컴퓨터에 설치된 다른 가상머신에서 가상머신의 웹서버에 접속이 되지 않는다.(아직 이건 이유를 잘 모르겠다.^^; 알려주세요~) 따라서 외부의 컴퓨터나 스마트폰으로 테스트해보길...


이 댓글을 비밀 댓글로
    • 2018.10.12 14:20
    비밀댓글입니다
    • nulmin
    • 2019.09.26 11:02
    덕분에 해결했습니다. 감사합니다.