성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] 그냥 RSS Reader 기능과 약간의 UI 편의성 때문에 사용...
[이종효] 오래된 소프트웨어는 보안 위협이 되기도 합니다. 혹시 어떤 기능...
[정성태] @Keystroke IEEE의 문서를 소개해 주시다니... +_...
[손민수 (Keystroke)] 괜히 듀얼채널 구성할 때 한번에 같은 제품 사라고 하는 것이 아...
[정성태] 전각(Full-width)/반각(Half-width) 기능을 토...
[정성태] Vector에 대한 내용은 없습니다. Vector가 닷넷 BCL...
[orion] 글 읽고 찾아보니 디자인 타임에는 InitializeCompon...
[orion] 연휴 전에 재현 프로젝트 올리자 생각해 놓고 여의치 않아서 못 ...
[정성태] 아래의 글에 정리했으니 참고하세요. C# - Typed D...
[정성태] 간단한 재현 프로젝트라도 있을까요? 저런 식으로 설명만 해...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <div style='font-family: 맑은 고딕, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Hyper-V의 네트워크 유형 (3) </div> <br /> 이번에 살펴볼 내용은, 다음과 같은 시나리오를 위한 것입니다.<br /> <br /> <ul> <li>호스트 측의 네트워크를 어지럽히지 않고, (즉, 별도의 네트워크로 분리하기 위해 Internal 유형 사용)</li> <li>VM <-> VM</li> <li>VM <-> HOST</li> <li>VM <-> 인터넷</li> <li>VM <-> HOST가 참여하고 있는 네트워크의 다른 PC</li> </ul> <br /> 정리해 보면, <a target='_tab' href='/2/0/915'>Hyper-V의 네트워크 유형 (2)</a> 글에서 살펴 본 "Internal + ICS" 상태의 네트워크에 다음 기능을 추가한 것입니다.<br /> <br /> <ul> <li>VM <- HOST가 참여하고 있는 네트워크(또는 인터넷)의 다른 PC </li> </ul> <br /> 그렇군요. 기존 네트워크와 동등한 레벨로 하나의 완전한 독립 네트워크를 생성하기 위한 작업입니다.<br /> <br /> 참고로, 이에 관한 것은 다음의 글들을 기반으로 작성된 것입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > How to use Hyper-V with a wireless network connection ; http://blogs.msdn.com/b/nicold/archive/2008/04/15/how-to-use-hyper-v-with-a-wireless-network-connection.aspx Access Hyper-V VM Internal Networks from outside the host computer ; http://blogs.msdn.com/b/mihail_popescu/archive/2009/10/22/access-hyper-v-vm-internal-networks-from-outside-the-host-computer.aspx </pre> <br /> <hr style='width: 50%' /><br /> <br /> "Internal" 유형의 네트워크로부터 천천히 한 단계씩 해결해 볼까요? ^^ (만약 기존 실습 과정에서 ICS를 걸어두었다면 해제합니다.)<br /> <br /> 우선, "Internal" 네트워크는 기본적으로 다음과 같은 통신만 제공합니다.<br /> <br /> <ul> <li>VM <-> VM </li> <li>VM <-> HOST</li> </ul> <br /> 예제에 사용될 VM 하나와 호스트의 기본 IP 구성은 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > A-VM IP: <b style='COLOR: blue'>169.254</b>.222.37 / 16 Host (Internal 가상 NIC) IP: <b style='COLOR: blue'>169.254</b>.139.48 / 16 (물리 NIC) IP: <b style='COLOR: blue'>192.168.1</b>.2 / 24 </pre> <br /> Internal 네트워크에 대한 관리 편의를 위해 기본 제공되는 IP 대역을 쓰지 않고 임의의 "C 클래스"를 정하겠습니다. (물론, B 클래스도 상관 없는데, 어차피 한 대의 Hyper-V에서 제공되는 VM 수를 생각하면 "C 클래스"로도 충분합니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > A-VM IP: <b style='COLOR: blue'>192.168.50</b>.2 / 24 Gateway: <b style='COLOR: blue'>192.168.50</b>.1 Host (Internal 가상 NIC) IP: <b style='COLOR: blue'>192.168.50</b>.1 / 24 (물리 NIC) IP: <b style='COLOR: blue'>192.168.1</b>.2 Gateway: <b style='COLOR: blue'>192.168.1</b>.0 Host 네트워크의 다른 PC (물리 NIC) IP: <b style='COLOR: blue'>192.168.1</b>.3 Gateway: <b style='COLOR: blue'>192.168.1</b>.0 </pre> <br /> 당연히, 지금 단계에서 "A-VM <-> Host" 사이에서는 서로 같은 네트워크(192.168.50.0)에 주어진 IP를 가지고 Ping을 하게 되면 응답이 옵니다.<br /> <br /> 첫 번째 문제는 "A-VM -> 호스트가 참여하고 있는 다른 PC"로의 통신이 가능해야 하는 것인데요. 즉, A-VM에서 "ping 192.168.1.3"이 가능하게 만들어야 합니다.<br /> <br /> 일단, 길 찾기를 한번 해볼까요?<br /> <br /> A-VM에서 "ping 192.168.1.3"을 치면, 게이트웨이가 "192.168.50.1"로 되어 있으니 호스트 PC에 패킷이 전달됩니다. 그런데, 호스트 PC는 "Internal 가상 NIC"에 전달된 그 패킷을 어떻게 처리해야 할지를 모르기 때문에 더 이상 패킷 전달이 안됩니다.<br /> <br /> 만약, 호스트로 하여금 "192.168.1.3"으로의 패킷 전달을 하도록 만들고 싶다면 호스트 PC를 "라우터"로 만들어야 합니다. 따라서, 앞으로의 실습 진행을 위해서 아래의 글에 따라 ^^ 호스트 PC에 라우터 기능을 설치합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > "Routing and Remote Access"의 "Routing" 기능 활성화 방법 ; <a target='_tab' href='/2/0/917'>http://www.sysnet.pe.kr/2/0/917</a> </pre> <br /> 이렇게 설치해 주면, "이론상, VM -> Host 네트워크의 다른 PC"로의 통신은 가능합니다. "ping 192.168.1.3"을 치면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > VM (192.168.50.2) ==> 디폴트 게이트웨이(192.168.50.1)을 거쳐서 ==> 호스트 PC가 라우터 기능이 있기 때문에 (물리 NIC) 192.168.1.2로 전달 ==> (물리 NIC) 192.168.1.2에서 네트워크의 다른 PC(192.168.1.3)에 도착 </pre> <br /> 그런데, 문제는 ICMP 응답입니다. 192.168.1.3으로부터의 응답 IP 헤더에는 주소가 "192.168.50.2"로 되어 있을 텐데, 경로 풀이가 다음과 같이 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > 네트워크의 다른 PC (192.168.1.3) ==> 디폴트 게이트웨이(192.168.1.0)을 거쳐서 ==> (192.168.50.1에 대한 라우팅 정보가 없으므로) 디폴트 게이트웨이의 다른 외부망으로 패킷 전달 </pre> <br /> 이 때문에 Ping은 정상 동작하지 않게 됩니다. 따라서, 이런 경우에 네트워크의 대상 PC에 "192.168.50.0" 네트워크 주소에 대한 올바른 라우팅 경로를 VM을 호스팅하고 있는 PC로 다음과 같이 설정해 주어야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > C:\>route add <b style='COLOR: blue'>192.168.50.0</b> mask 255.255.255.0 <b style='COLOR: blue'>192.168.1.2</b> OK! </pre> <br /> 이렇게 되면 ICMP 응답은 다음과 같이 바뀝니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > 네트워크의 다른 PC (192.168.1.3) ==> PC에 설정된 라우팅 정보에 따라 (192.168.1.2)로 응답이 전송되고 ==> 192.168.1.2의 라우팅 서비스에 따라 가상 NIC(192.168.50.1)으로 전달되고 ==> A-VM의 192.168.50.2에 도착 </pre> <br /> 결국, Internal 네트워크는 다음과 같이 확장됩니다.<br /> <br /> <ul> <li>VM <-> VM </li> <li>VM <-> HOST </li> <li>VM <-> HOST가 참여하고 있는 네트워크의 다른 PC</li> </ul> <br /> <hr style='width: 50%' /><br /> <br /> 그런데, 문제가 2가지 있습니다. <br /> <br /> <ol> <li>"네트워크의 다른 PC"들에 모두 돌아다니면서 일일이 "route add ..." 정보를 써주는 것은 매우 불편하다는 점과,</li> <li>VM에서 인터넷이 안된다는 것!</li> </ol> <br /> 재미있게도 위의 문제는 동시에 풀려질 수 있습니다.<br /> <br /> 우선, 1번 문제는 위에서 자세히 알아봤으니 생략하고, 그렇다면 2번의 인터넷이 왜 안되는지를 살펴보겠습니다.<br /> <br /> 사실, 이번에도 "이론상, VM -> 인터넷" 접근은 가능합니다. 예를 들어, "<a target='_tab' href='http://203.252.3.60'>http://203.252.3.60</a>"로 접근하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > VM (192.168.50.2) ==> 디폴트 게이트웨이(192.168.50.1)를 거쳐서 ==> 호스트 PC가 라우터 기능이 있기 때문에 (물리 NIC) 192.168.1.2로 전달 ==> (물리 NIC) 192.168.1.2에 설정된 디폴트 게이트웨이(192.168.1.0)을 거쳐서 ==> 디폴트 게이트웨이(192.168.1.0)는, 보통 NAT(Network Address Translation) 기능을 이용해서 다음과 같은 맵을 내부적으로 구성하고, 192.168.50.2 : 포트 12000 <==> 게이트웨이의 공용 IP(121.139.108.3): 포트 12000 인터넷으로 나가야 될 패킷의 Source IP에 디폴트 게이트웨이에 설정된 공용 IP를 설정합니다. Source IP: 121.139.108.3 / Port 12000, Dest IP: 203.252.3.60 / Port 80 ==> ... 인터넷의 라우터들을 거쳐서 ... ==> 203.252.3.60 웹 서버에 도착 </pre> <br /> 이번에도 문제는 응답인데요, 과정은 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; width: 800px; background-color: #fbedbb; overflow-x: scroll; font-family: Consolas, Verdana;' > 웹 서버 203.252.3.60 ==> ... 인터넷의 라우터들을 거쳐서 ... ==> 공용 IP 121.139.108.3을 가진 게이트웨이에 12000 포트로 전달 (즉, 192.168.1.0 게이트웨이) ==> NAT 정보에 의해 내부에 전달해야 할 패킷의 대상이 192.168.50.2 / 포트 12000임을 알고, ==> 192.168.50.2로 전달하려고 하지만 라우팅 정보가 없으므로 다시 인터넷 밖으로 튕김. </pre> <br /> 자... 이 때문에 인터넷 통신이 안되는 것입니다.<br /> <br /> 그럼, 해결방법은? 당연히 ^^ 인터넷으로 나가는 게이트웨이(192.168.1.0)로 사용되는 라우터에 "192.168.50.0" 네트워크에 대한 라우팅 정보를 192.168.1.2라고 알려주어야 합니다.<br /> <br /> 이게 문제라면 문제겠지요?<br /> <br /> 만약, 여러분이 게이트웨이를 만질 수 있는 권한을 가진 사람이라면 지금 당장 접속해서 설정해 주면 되겠고... 그렇지 않다면 네트워크 관리자에게 부탁을 해야 합니다.<br /> <br /> 여기서는, ^^ 당연히 제가 만질 수 있는 권한이 있긴 하지만 아쉽게도 시스코 라우터같은 대단한 네트워크 장비는 아니고 그저 우리집에서 사용하고 있는 "ipTime N3004" 무선 액세스 포인트가 실험 대상입니다.<br /> <br /> 그래서, 다음과 같이 설정 가능합니다.<br /> <br /> <img alt='router_plus_host_pc_1.png' src='/SysWebRes/bbs/router_plus_host_pc_1.png' /><br /> <br /> 이렇게 호스트 PC의 물리 NIC에서 바라보고 있는 "Default Gateway" 장비 수준에서 라우팅 정보를 지정하게 되면 다른 PC들을 일일이 돌아다니면서 "route add..." 명령어를 내려줄 필요도 없고 인터넷까지 자연스럽게 연결된다는 장점이 있습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 팁 성격으로 한 가지 더 살펴볼까요?<br /> <br /> 그렇다면 A-VM(192.168.50.2)를 웹 서버로 한 경우, 인터넷에 어떻게 노출시켜 줄 수 있을까요? 그렇죠... 게이트웨이 측에서 포트 포워딩 같은 기능을 제공해 주면 됩니다. "ipTime N3004 의 경우에는 다음과 같이 지정해 줄 수 있습니다.<br /> <br /> <img alt='router_plus_host_pc_2.png' src='/SysWebRes/bbs/router_plus_host_pc_2.png' /><br /> <br /> 즉, Internal 네트워크에 묶인 VM으로의 포트 포워딩도 아주 잘 동작합니다. ^^<br /> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; width: 700px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: 맑은 고딕, Consolas, Verdana; COLOR: #005555'> [정리: 가능한 접근 방식]<br /> <br /> <ul> <li>VM <-> VM</li> <li>VM <-> HOST</li> <li>VM <-> 같은 Bridge의 다른 어탭터들이 참여하고 있는 네트워크의 PC</li> <li>VM <-> 인터넷</li> <li>VM <-> HOST가 참여하고 있는 네트워크의 다른 PC</li> </ul> </div><br /> <br /> <br /><br /><hr /><span style='color: Maroon'>[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1354
(왼쪽의 숫자를 입력해야 합니다.)