Windows 10/Server 2016 이상에서 원격 액세스 및 라우터 없이 NAT 사용하기
Tags: powershell, windows, korean, nat
Published: 2021-06-10 08:56:23

> 2017년 11월 23일 from [blog.hazard.kr](https://web.archive.org/web/20180701071438/http://blog.hazard.kr/archives/899)

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

[https://docs.microsoft.com/en-us/powershell/module/netnat/?view=win10-ps](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 부여가 가능하다. 자세한 설명은 아래 섹션 참고하자.

```powershell
New-NetIPAddress –IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceAlias "공유로 쓸 네트워크 이름"
```

### Hyper-V

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

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

```powershell
New-VMSwitch –SwitchName "원하는이름" –SwitchType Internal
```

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

```powershell
New-NetIPAddress –IPAddress 192.168.0.1 -PrefixLength 24 -InterfaceAlias "vEthernet (원하는이름)"
```

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

## NAT 환경 구성

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

```powershell
New-NetNat –Name 원하는공유명칭 –InternalIPInterfaceAddressPrefix 192.168.0.0/24
```

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

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

```powershell
Remove-NetNat –Name 원하는공유명칭
```

## 포트 포워딩

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

```powershell
Add-NetNatStaticMapping -NatName "원하는포트포워드명" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.0.2 -InternalPort 80 -ExternalPort 82
```

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

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

```powershell
Remove-NetNatStaticMapping -NatName "원하는포트포워드명"
```

## DHCP는?

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

- [DHCP Server for Windows](http://www.dhcpserver.de/cms/)
- [TFTP32](http://tftpd32.jounin.net/) – 주로 네트워크 부팅 서버 구축에 많이 사용되는데 DHCP도 제공한다.
- [isc-dhcp-server DHCP 서버 설치](http://cy-baek.tistory.com/6)
윈도우 우분투 서브시스템 이용, 완전한 서버를 유지하도록 사용하기 위해서는 [내 글](https://web.archive.org/web/20180701071438/http://blog.hazard.kr/archives/845) 참고.
이상 끗.

## 참고

[NetNat – cmdlet – MSDN](https://docs.microsoft.com/en-us/powershell/module/netnat/?view=win10-ps)
[SET UP A HYPER-V VIRTUAL SWITCH USING A NAT NETWORK](https://www.thomasmaurer.ch/2016/05/set-up-a-hyper-v-virtual-switch-using-a-nat-network/)