Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 87. Hyper-V의 네트워크 유형 (3) [링크 복사], [링크+제목 복사],
조회: 26954
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)
(시리즈 글이 14개 있습니다.)
개발 환경 구성: 83. Hyper-V의 네트워크 유형 (1)
; https://www.sysnet.pe.kr/2/0/910

개발 환경 구성: 84. Hyper-V의 네트워크 유형 (2)
; https://www.sysnet.pe.kr/2/0/915

개발 환경 구성: 87. Hyper-V의 네트워크 유형 (3)
; https://www.sysnet.pe.kr/2/0/918

Windows: 59. Hyper-V Internal 네트워크 VM의 인터넷 접속
; https://www.sysnet.pe.kr/2/0/1335

개발 환경 구성: 330. Hyper-V VM의 Internal Network를 Private 유형으로 만드는 방법
; https://www.sysnet.pe.kr/2/0/11299

Windows: 174. WSL 2의 네트워크 통신 방법
; https://www.sysnet.pe.kr/2/0/12347

개발 환경 구성: 517. Hyper-V Internal 네트워크에 NAT을 이용한 인터넷 연결 제공
; https://www.sysnet.pe.kr/2/0/12352

개발 환경 구성: 522. WSL 2 인스턴스와 호스트 측의 Hyper-V에 운영 중인 VM과 네트워크 연결을 하는 방법
; https://www.sysnet.pe.kr/2/0/12494

개발 환경 구성: 656. Internal Network 유형의 스위치로 공유한 Hyper-V의 VM과 호스트가 통신이 안 되는 경우
; https://www.sysnet.pe.kr/2/0/13199

개발 환경 구성: 660. WSL 2 내부로부터 호스트 측의 네트워크로 UDP 데이터가 1개의 패킷으로만 제한되는 문제
; https://www.sysnet.pe.kr/2/0/13230

개발 환경 구성: 665. WSL 2의 네트워크 통신 방법 - 두 번째 이야기
; https://www.sysnet.pe.kr/2/0/13256

개발 환경 구성: 670. WSL 2에서 호스팅 중인 TCP 서버를 외부에서 접근하는 방법
; https://www.sysnet.pe.kr/2/0/13280

개발 환경 구성: 712. Windows - WSL 2의 네트워크 통신 방법 - 세 번째 이야기 (같은 IP를 공유하는 WSL 2 인스턴스)
; https://www.sysnet.pe.kr/2/0/13647

개발 환경 구성: 714. WSL 2 인스턴스와 호스트 측의 Hyper-V에 운영 중인 VM과 네트워크 연결을 하는 방법 - 두 번째 이야기
; https://www.sysnet.pe.kr/2/0/13658




Hyper-V의 네트워크 유형 (3)

이번에 살펴볼 내용은, 다음과 같은 시나리오를 위한 것입니다.

  • 호스트 측의 네트워크를 어지럽히지 않고, (즉, 별도의 네트워크로 분리하기 위해 Internal 유형 사용)
  • VM <-> VM
  • VM <-> HOST
  • VM <-> 인터넷
  • VM <-> HOST가 참여하고 있는 네트워크의 다른 PC

정리해 보면, Hyper-V의 네트워크 유형 (2) 글에서 살펴 본 "Internal + ICS" 상태의 네트워크에 다음 기능을 추가한 것입니다.

  • VM <- HOST가 참여하고 있는 네트워크(또는 인터넷)의 다른 PC

그렇군요. 기존 네트워크와 동등한 레벨로 하나의 완전한 독립 네트워크를 생성하기 위한 작업입니다.

참고로, 이에 관한 것은 다음의 글들을 기반으로 작성된 것입니다.

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




"Internal" 유형의 네트워크로부터 천천히 한 단계씩 해결해 볼까요? ^^ (만약 기존 실습 과정에서 ICS를 걸어두었다면 해제합니다.)

우선, "Internal" 네트워크는 기본적으로 다음과 같은 통신만 제공합니다.

  • VM <-> VM
  • VM <-> HOST

예제에 사용될 VM 하나와 호스트의 기본 IP 구성은 다음과 같습니다.

A-VM
   IP: 169.254.222.37 / 16

Host 
   (Internal 가상 NIC) IP: 169.254.139.48 / 16
   (물리 NIC) IP: 192.168.1.2 / 24

Internal 네트워크에 대한 관리 편의를 위해 기본 제공되는 IP 대역을 쓰지 않고 임의의 "C 클래스"를 정하겠습니다. (물론, B 클래스도 상관 없는데, 어차피 한 대의 Hyper-V에서 제공되는 VM 수를 생각하면 "C 클래스"로도 충분합니다.)

A-VM
   IP: 192.168.50.2 / 24
   Gateway: 192.168.50.1

Host 
   (Internal 가상 NIC) IP: 192.168.50.1 / 24

   (물리 NIC) IP: 192.168.1.2
              Gateway: 192.168.1.0

Host 네트워크의 다른 PC
   (물리 NIC) IP: 192.168.1.3
              Gateway: 192.168.1.0

당연히, 지금 단계에서 "A-VM <-> Host" 사이에서는 서로 같은 네트워크(192.168.50.0)에 주어진 IP를 가지고 Ping을 하게 되면 응답이 옵니다.

첫 번째 문제는 "A-VM -> 호스트가 참여하고 있는 다른 PC"로의 통신이 가능해야 하는 것인데요. 즉, A-VM에서 "ping 192.168.1.3"이 가능하게 만들어야 합니다.

일단, 길 찾기를 한번 해볼까요?

A-VM에서 "ping 192.168.1.3"을 치면, 게이트웨이가 "192.168.50.1"로 되어 있으니 호스트 PC에 패킷이 전달됩니다. 그런데, 호스트 PC는 "Internal 가상 NIC"에 전달된 그 패킷을 어떻게 처리해야 할지를 모르기 때문에 더 이상 패킷 전달이 안됩니다.

만약, 호스트로 하여금 "192.168.1.3"으로의 패킷 전달을 하도록 만들고 싶다면 호스트 PC를 "라우터"로 만들어야 합니다. 따라서, 앞으로의 실습 진행을 위해서 아래의 글에 따라 ^^ 호스트 PC에 라우터 기능을 설치합니다.

"Routing and Remote Access"의 "Routing" 기능 활성화 방법
; https://www.sysnet.pe.kr/2/0/917

이렇게 설치해 주면, "이론상, VM -> Host 네트워크의 다른 PC"로의 통신은 가능합니다. "ping 192.168.1.3"을 치면,

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)에 도착

그런데, 문제는 ICMP 응답입니다. 192.168.1.3으로부터의 응답 IP 헤더에는 주소가 "192.168.50.2"로 되어 있을 텐데, 경로 풀이가 다음과 같이 됩니다.

네트워크의 다른 PC (192.168.1.3)
==> 디폴트 게이트웨이(192.168.1.0)을 거쳐서
==> (192.168.50.1에 대한 라우팅 정보가 없으므로) 디폴트 게이트웨이의 다른 외부망으로 패킷 전달

이 때문에 Ping은 정상 동작하지 않게 됩니다. 따라서, 이런 경우에 네트워크의 대상 PC에 "192.168.50.0" 네트워크 주소에 대한 올바른 라우팅 경로를 VM을 호스팅하고 있는 PC로 다음과 같이 설정해 주어야 합니다.

C:\>route add 192.168.50.0 mask 255.255.255.0 192.168.1.2 
OK!

이렇게 되면 ICMP 응답은 다음과 같이 바뀝니다.

네트워크의 다른 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에 도착

결국, Internal 네트워크는 다음과 같이 확장됩니다.

  • VM <-> VM
  • VM <-> HOST
  • VM <-> HOST가 참여하고 있는 네트워크의 다른 PC




그런데, 문제가 2가지 있습니다.

  1. "네트워크의 다른 PC"들에 모두 돌아다니면서 일일이 "route add ..." 정보를 써주는 것은 매우 불편하다는 점과,
  2. VM에서 인터넷이 안된다는 것!

재미있게도 위의 문제는 동시에 풀려질 수 있습니다.

우선, 1번 문제는 위에서 자세히 알아봤으니 생략하고, 그렇다면 2번의 인터넷이 왜 안되는지를 살펴보겠습니다.

사실, 이번에도 "이론상, VM -> 인터넷" 접근은 가능합니다. 예를 들어, "http://203.252.3.60"로 접근하면,

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 웹 서버에 도착

이번에도 문제는 응답인데요, 과정은 다음과 같습니다.

웹 서버 203.252.3.60
==> ... 인터넷의 라우터들을 거쳐서 ...
==> 공용 IP 121.139.108.3을 가진 게이트웨이에 12000 포트로 전달 (즉, 192.168.1.0 게이트웨이)
==> NAT 정보에 의해 내부에 전달해야 할 패킷의 대상이 192.168.50.2 / 포트 12000임을 알고,
==> 192.168.50.2로 전달하려고 하지만 라우팅 정보가 없으므로 다시 인터넷 밖으로 튕김.

자... 이 때문에 인터넷 통신이 안되는 것입니다.

그럼, 해결방법은? 당연히 ^^ 인터넷으로 나가는 게이트웨이(192.168.1.0)로 사용되는 라우터에 "192.168.50.0" 네트워크에 대한 라우팅 정보를 192.168.1.2라고 알려주어야 합니다.

이게 문제라면 문제겠지요?

만약, 여러분이 게이트웨이를 만질 수 있는 권한을 가진 사람이라면 지금 당장 접속해서 설정해 주면 되겠고... 그렇지 않다면 네트워크 관리자에게 부탁을 해야 합니다.

여기서는, ^^ 당연히 제가 만질 수 있는 권한이 있긴 하지만 아쉽게도 시스코 라우터같은 대단한 네트워크 장비는 아니고 그저 우리집에서 사용하고 있는 "ipTime N3004" 무선 액세스 포인트가 실험 대상입니다.

그래서, 다음과 같이 설정 가능합니다.

router_plus_host_pc_1.png

이렇게 호스트 PC의 물리 NIC에서 바라보고 있는 "Default Gateway" 장비 수준에서 라우팅 정보를 지정하게 되면 다른 PC들을 일일이 돌아다니면서 "route add..." 명령어를 내려줄 필요도 없고 인터넷까지 자연스럽게 연결된다는 장점이 있습니다.




팁 성격으로 한 가지 더 살펴볼까요?

그렇다면 A-VM(192.168.50.2)를 웹 서버로 한 경우, 인터넷에 어떻게 노출시켜 줄 수 있을까요? 그렇죠... 게이트웨이 측에서 포트 포워딩 같은 기능을 제공해 주면 됩니다. "ipTime N3004 의 경우에는 다음과 같이 지정해 줄 수 있습니다.

router_plus_host_pc_2.png

즉, Internal 네트워크에 묶인 VM으로의 포트 포워딩도 아주 잘 동작합니다. ^^

[정리: 가능한 접근 방식]

  • VM <-> VM
  • VM <-> HOST
  • VM <-> 같은 Bridge의 다른 어탭터들이 참여하고 있는 네트워크의 PC
  • VM <-> 인터넷
  • VM <-> HOST가 참여하고 있는 네트워크의 다른 PC





[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 7/19/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 91  92  93  94  95  96  [97]  98  99  100  101  102  103  104  105  ...
NoWriterDateCnt.TitleFile(s)
11509정성태4/28/201819941.NET Framework: 741. windbg로 확인하는 객체의 GC 여부
11508정성태4/23/201821543개발 환경 구성: 373. MSBuild를 이용해 프로젝트 배포 후 결과물을 zip 파일로 압축하는 방법파일 다운로드1
11507정성태4/20/201821410개발 환경 구성: 372. MSBuild - 빌드 전/후, 배포 전/후 실행하고 싶은 Task 정의
11506정성태4/20/201825688.NET Framework: 740. C#에서 enum을 boxing 없이 int로 변환하기 - 두 번째 이야기 [7]파일 다운로드1
11505정성태4/19/201818522개발 환경 구성: 371. Azure Web App 확장 예제 - Simple WebSite Extension
11504정성태4/19/201819936오류 유형: 465. Azure Web App 확장 - Extplorer File manager 적용 시 오류
11503정성태4/19/201819809오류 유형: 464. PowerShell - Start-Service 명령 오류 (Service 'xxx' cannot be started)
11502정성태4/17/201821649개발 환경 구성: 370. Azure VM/App Services(Web Apps)에 Let's Encrypt 무료 인증서 적용 방법 [3]
11501정성태4/17/201818567개발 환경 구성: 369. New-AzureRmADServicePrincipal로 생성한 계정의 clientSecret, key 값을 구하는 방법파일 다운로드1
11500정성태4/17/201819510개발 환경 구성: 368. PowerShell로 접근하는 Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11499정성태4/17/201818135개발 환경 구성: 367. Azure - New-AzureRmADServicePrincipal / New-AzureRmRoleAssignment 명령어
11498정성태4/17/201818161개발 환경 구성: 366. Azure Active Directory(Microsoft Enfra ID)의 사용자 유형 구분 - Guest/Member
11497정성태4/17/201816224개발 환경 구성: 365. Azure 리소스의 액세스 제어(Access control) 별로 사용자에게 권한을 할당하는 방법 [2]
11496정성태4/17/201816632개발 환경 구성: 364. Azure Portal에서 구독(Subscriptions) 메뉴가 보이지 않는 경우
11495정성태4/16/201818959개발 환경 구성: 363. Azure의 Access control 보안과 Azure Active Directory의 계정 관리 서비스
11494정성태4/16/201815467개발 환경 구성: 362. Azure Web Apps(App Services)에 사용자 DNS를 지정하는 방법
11493정성태4/16/201817256개발 환경 구성: 361. Azure Web App(App Service)의 HTTP/2 프로토콜 지원
11492정성태4/13/201815257개발 환경 구성: 360. Azure Active Directory의 사용자 도메인 지정 방법
11491정성태4/13/201818408개발 환경 구성: 359. Azure 가상 머신에 Web Application을 배포하는 방법
11490정성태4/12/201817430.NET Framework: 739. .NET Framework 4.7.1의 새 기능 - Configuration builders [1]파일 다운로드1
11489정성태4/12/201815053오류 유형: 463. 윈도우 백업 오류 - a Volume Shadow Copy Service operation failed.
11488정성태4/12/201818145오류 유형: 462. Unhandled Exception in Managed Code Snap-in - FX:{811FD892-5EB4-4E73-A147-F1E079E36C4E}
11487정성태4/12/201817233디버깅 기술: 115. windbg - 닷넷 메모리 덤프에서 정적(static) 필드 값을 조사하는 방법
11486정성태4/11/201816357오류 유형: 461. Error MSB4064 The "ComputeOutputOnly" parameter is not supported by the "VsTsc" task
11485정성태4/11/201823589.NET Framework: 738. C# - Console 프로그램이 Ctrl+C 종료 시점을 감지하는 방법파일 다운로드1
11484정성태4/11/201824687.NET Framework: 737. C# - async를 Task 타입이 아닌 사용자 정의 타입에 적용하는 방법파일 다운로드1
... 91  92  93  94  95  96  [97]  98  99  100  101  102  103  104  105  ...