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 "공유로 쓸 네트워크 이름"
Hyper-V
주로 Hyper-V 환경을 예시로 들도록 하겠다. 준비물은 Powershell 관리자 권한이 부여된 콘솔 창을 띄우기만 하면 준비 끝.
Hyper-V 관리자에서 가상 스위치 관리자를 통해 내부 네트워크에 원하는 이름으로 생성한 뒤, 네트워크 및 공유 센터 > 어댑터 변경에서 실제 랜카드처럼 생성한 Hyper-V 내부 내트워크의 IP를 원하는 게이트웨이 IP로 설정해도 되고, powershell 로 가상 내부 내트워크를 생성한 뒤 바로 IP 부여가 가능하다.
먼저, Hyper-V 가상 스위치 중 내부 네트워크 드라이버를 하나 생성한다.
New-VMSwitch –SwitchName "원하는이름" –SwitchType Internal
실행 후 vEthernet (원하는이름)
이런 식으로 명명된 가상 네트워크가 인터페이스가 생성될 것이다.
그다음 생성한 인터페이스의 IP를 부여한다. IP는 예시를 든 것이므로 원하는 IP 대역으로 수정하도록 한다.
PrefixLength
는 CIDR 마스킹 넘버로 24
는 255.255.255.0
을 가리킨다. 이것도 상황에 따라 원할 경우 변경할 수 있다.
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
이렇게 입력하면 된다.
원하는공유명칭 에 원하는 공유 식별자를 입력하면 되는데, 삭제 시 적어두었던 식별자를 통해 삭제할 수 있다.
New-NetNat –Name 원하는공유명칭 –InternalIPInterfaceAddressPrefix 192.168.0.0/24
끝이다. 허무할 정도로 간단하게 NAT 설정은 끝났고 공유기처럼 환경 구성하는 방법은 준비가 완료된 것이다.
참고로 삭제는 아래와 같다.
Remove-NetNat –Name 원하는공유명칭
포트 포워딩
만약 가상 컴퓨터의 특정 포트를 외부에서 접속하거나, 지금 윈도우 컴퓨터로 연결된 하위 네트워크에 있는 서비스 포트에 외부로 접속하고 싶다면,
물론 안전하게 VPN 구축해서 서비스하는 것을 추천하지만, 필요할 경우 포트포워딩도 추가 및 관리가 가능하다.
내부 공유 컴퓨터에서 80
번 포트를 통해 웹 서비스하고 있는 걸 외부에서 82
번 포트를 통해 접속하고자 할 경우를 예를 들어 작성하도록 하겠다.
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를 입력하면 된다.
반대로 삭제하고자 할 경우 아래처럼 하면 된다.
Remove-NetNatStaticMapping -NatName "원하는포트포워드명"
DHCP는?
만약 윈도우 10이면, 기능 없다. 외부 프로그램 아니면 포기하는게 편하다.
그리고 윈도우 서버다? 그러면 할 수 없이 DHCP 서버를 깔아야 한다.
윈도우 서버의 DHCP 서버 사용 방법은 직접 검색하거나 도움말 보거나 하면 되고,
윈도우 10이면, 몇가지 도구와 방법이 제공되는데, 링크 가서 알아보면 되겠다.
- DHCP Server for Windows
- TFTP32 – 주로 네트워크 부팅 서버 구축에 많이 사용되는데 DHCP도 제공한다.
- isc-dhcp-server DHCP 서버 설치 윈도우 우분투 서브시스템 이용, 완전한 서버를 유지하도록 사용하기 위해서는 내 글 참고. 이상 끗.
참고
NetNat – cmdlet – MSDN
SET UP A HYPER-V VIRTUAL SWITCH USING A NAT NETWORK
Top comments (4)
mac/linux 환경에서는 ssh tunneling 으로 비슷한 우회들을 하고 있는데요, 옛날에 윈도우에서도 putty로 비슷한 짓들을 했던거 같긴한데, 이 방식으로 윈도우 서버를 경유해서 타 서비스에 접속하는 등의 짓을 할 수 있을까요?
구지 말하자면 External to External 포트 포워딩이랄까.
A_Client->B_ForwardingServer(Window)->C_TargetServer 요런 느낌?
포트포워딩 쓰면 됩니다. 윈도우 방화벽 기능에도 터널링이 있긴 있습니다. 써본 적은 없지만... 이거 아니면 VPN 또는 cygwin(윈도우 10이나 서버 2019 이상 WSL 사용 강추) 써야겠죠. 어자피 리눅스도 포트포워딩 지원 하고요.
cygwin에 제한이 워낙 많았어서 생각도 안해봣는데.
참 근데 win10 요새 터미널 뭔가 제대로 들어간거 같던데 아닌가요? 파워쉘 말고 뭔가 진짜 터미널 같던데
cmd는 윈도우 2000 이후로 개선한 거 하나도 없습니다. MS도 개선할 계획도 없다 했고요. 그래서 만든게 파워쉘이고, 그리고 WSL라는 괴물까지 만들어낸 거죠.