DEV Community

Composite
Composite

Posted on

Windows 10/Server 2016 이상에서 원격 액세스 및 라우터 없이 NAT 사용하기

2017년 11월 23일 from blog.hazard.kr

보통 윈도우 환경에서 공유기 같은 환경을 구성하기 위해서 NAT 소프트웨어나, 또는 서버의 경우 원격 액세스 및 라우터 기능을 설치한다.
윈도우 10부터, 또는 서버 2016 부터, 이제 원격 엑세스 기능이 없어도 NAT 기능을 제공하는 powershell cmdlet 을 제공한다.
바로 NetNat 모듈이다.

https://docs.microsoft.com/en-us/powershell/module/netnat/?view=win10-ps

모듈 이름 그대로 NAT 환경을 제공한다. 이로 인한 이점은 아래와 같다.

  • 윈도우 10에서 사용 가능. 특히 원격 액세스 및 라우터 없어도 환경설정 가능
  • 위 기능으로 바로 Hyper-V 내부 네트워크 구성에다가 인터넷 연결이 가능
  • 심지어 여러 NAT 구성 가능
  • 기능상 이점으로 주로 Hyper-V 환경을 구축할 때 많이 이용한다.

사용 방법을 알아보자.

인터페이스 구축

실제 랜카드

공유로 사용할 랜카드에 원하는 게이트웨이 IP를 설정하면 된다. 예를 들면 IP는 192.168.0.1 넷마스크 255.255.255.0 끝.
DNS는 원하면 구축하고 싫으면 안하면 된다. 비워도 어자피 ISP에서 제공하는 DNS 물려받게 되어 있다.
그냥 파워쉘로도 당연히 IP 부여가 가능하다. 자세한 설명은 아래 섹션 참고하자.

New-NetIPAddress IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceAlias "공유로 쓸 네트워크 이름"
Enter fullscreen mode Exit fullscreen mode

Hyper-V

주로 Hyper-V 환경을 예시로 들도록 하겠다. 준비물은 Powershell 관리자 권한이 부여된 콘솔 창을 띄우기만 하면 준비 끝.
Hyper-V 관리자에서 가상 스위치 관리자를 통해 내부 네트워크에 원하는 이름으로 생성한 뒤, 네트워크 및 공유 센터 > 어댑터 변경에서 실제 랜카드처럼 생성한 Hyper-V 내부 내트워크의 IP를 원하는 게이트웨이 IP로 설정해도 되고, powershell 로 가상 내부 내트워크를 생성한 뒤 바로 IP 부여가 가능하다.

먼저, Hyper-V 가상 스위치 중 내부 네트워크 드라이버를 하나 생성한다.

New-VMSwitch SwitchName "원하는이름" SwitchType Internal
Enter fullscreen mode Exit fullscreen mode

실행 후 vEthernet (원하는이름) 이런 식으로 명명된 가상 네트워크가 인터페이스가 생성될 것이다.
그다음 생성한 인터페이스의 IP를 부여한다. IP는 예시를 든 것이므로 원하는 IP 대역으로 수정하도록 한다.
PrefixLength 는 CIDR 마스킹 넘버로 24255.255.255.0을 가리킨다. 이것도 상황에 따라 원할 경우 변경할 수 있다.

New-NetIPAddress IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceAlias "vEthernet (원하는이름)"
Enter fullscreen mode Exit fullscreen mode

사실 UI에서 네트워크 및 공유 센터 > 어댑터 변경 을 통해 변경해도 지장 하나도 없다.

NAT 환경 구성

이제 본격적으로 NAT를 구성하도록 하겠다.
라고 하지만 사실 별거 없다. 이제 파워쉘을 준비했으면 한줄 추가하면 끝.
마지막 InternalIPInterfaceAddressPrefix 인자에서 마스킹 IP를 입력하면 되는데,
예를 들어 192.168.0.1 넷마스크 255.255.255.0 설정했으면 192.168.0.0/24 이렇게 입력하면 된다.
원하는공유명칭 에 원하는 공유 식별자를 입력하면 되는데, 삭제 시 적어두었던 식별자를 통해 삭제할 수 있다.

New-NetNat Name 원하는공유명칭 InternalIPInterfaceAddressPrefix 192.168.0.0/24
Enter fullscreen mode Exit fullscreen mode

끝이다. 허무할 정도로 간단하게 NAT 설정은 끝났고 공유기처럼 환경 구성하는 방법은 준비가 완료된 것이다.

참고로 삭제는 아래와 같다.

Remove-NetNat Name 원하는공유명칭
Enter fullscreen mode Exit fullscreen mode

포트 포워딩

만약 가상 컴퓨터의 특정 포트를 외부에서 접속하거나, 지금 윈도우 컴퓨터로 연결된 하위 네트워크에 있는 서비스 포트에 외부로 접속하고 싶다면,
물론 안전하게 VPN 구축해서 서비스하는 것을 추천하지만, 필요할 경우 포트포워딩도 추가 및 관리가 가능하다.
내부 공유 컴퓨터에서 80번 포트를 통해 웹 서비스하고 있는 걸 외부에서 82번 포트를 통해 접속하고자 할 경우를 예를 들어 작성하도록 하겠다.

Add-NetNatStaticMapping -NatName "원하는포트포워드명" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.0.2 -InternalPort 80 -ExternalPort 82
Enter fullscreen mode Exit fullscreen mode

그렇다. InternalPort 인자에 내부 공유 컴퓨터가 서비스하는 포트, ExternalPort 인자에 외부에서 접속할 포트를 입력하면 된다.
그리고, Protocol 이야 TCP, UDP 등 일반적인 인터페이스일 테고,
ExternalIPAddress 인자에 외부에서 허용할 IP 대역을 입력하는데, 0.0.0.0 이면 모든 외부 접속이 허용된다고 보면 된다.
그리고 InternalIPAddress 인자에다가 내부 컴퓨터나 가상컴 IP를 입력하면 된다.

반대로 삭제하고자 할 경우 아래처럼 하면 된다.

Remove-NetNatStaticMapping -NatName "원하는포트포워드명"
Enter fullscreen mode Exit fullscreen mode

DHCP는?

만약 윈도우 10이면, 기능 없다. 외부 프로그램 아니면 포기하는게 편하다.
그리고 윈도우 서버다? 그러면 할 수 없이 DHCP 서버를 깔아야 한다.
윈도우 서버의 DHCP 서버 사용 방법은 직접 검색하거나 도움말 보거나 하면 되고,
윈도우 10이면, 몇가지 도구와 방법이 제공되는데, 링크 가서 알아보면 되겠다.

참고

NetNat – cmdlet – MSDN
SET UP A HYPER-V VIRTUAL SWITCH USING A NAT NETWORK

Top comments (4)

Collapse
 
kakadais profile image
kakadais

mac/linux 환경에서는 ssh tunneling 으로 비슷한 우회들을 하고 있는데요, 옛날에 윈도우에서도 putty로 비슷한 짓들을 했던거 같긴한데, 이 방식으로 윈도우 서버를 경유해서 타 서비스에 접속하는 등의 짓을 할 수 있을까요?
구지 말하자면 External to External 포트 포워딩이랄까.
A_Client->B_ForwardingServer(Window)->C_TargetServer 요런 느낌?

Collapse
 
composite profile image
Composite

포트포워딩 쓰면 됩니다. 윈도우 방화벽 기능에도 터널링이 있긴 있습니다. 써본 적은 없지만... 이거 아니면 VPN 또는 cygwin(윈도우 10이나 서버 2019 이상 WSL 사용 강추) 써야겠죠. 어자피 리눅스도 포트포워딩 지원 하고요.

Collapse
 
kakadais profile image
kakadais

cygwin에 제한이 워낙 많았어서 생각도 안해봣는데.
참 근데 win10 요새 터미널 뭔가 제대로 들어간거 같던데 아닌가요? 파워쉘 말고 뭔가 진짜 터미널 같던데

Thread Thread
 
composite profile image
Composite

cmd는 윈도우 2000 이후로 개선한 거 하나도 없습니다. MS도 개선할 계획도 없다 했고요. 그래서 만든게 파워쉘이고, 그리고 WSL라는 괴물까지 만들어낸 거죠.