Hyper-V에서 내부 ip고정 및 NAT/포트포워딩 방법.
안녕하세요. 달소입니다.
이번글은 윈도우에서 가상머신을 운영할때 사용되는 Hyper-V에서 내부 ip고정 및 NAT/포트포워딩을 하는 방법입니다.
기본적으로 Hyper-V에서 제공되는 Default Switch의 경우 할당되는 ip대역폭도 많을뿐더러 내부네트워크이기때문에 포트포워딩도 되지않습니다.
여기에서는 내부적으로 포워딩을 위한 NAT Network를 만들고 포트포워딩을 사용하는방법을 설명드리겠습니다.
잘이용하신다면 윈도우 PC나 윈도우 서버에서 손쉽게 서버를 구축할 수 있습니다.
NAT Network 생성하기
먼저 파워쉘을 관리자 권한으로 NAT network를 생성해주세요.
그리고 아래 명령어를 통해 NAT 네트워크를 만들어주세요.
New-VMSwitch -SwitchName "NAT-Switch" -SwitchType Internal
그리고 ncpa.cpl이나 아래 주소를 통해서 네트워크 현황을 보개되시면
방금 생성한 네트워크가 보이실겁니다.
그리고 다시 파워쉘로 접속하셔서 아래 명령어를 통해 생성한 스위치에 ip를 부여해줍니다.
보편적으로 사용되는 사설 네트워크인 192.168/172.17/10.0 대역에서 원하는대역을 넣어주시면됩니다.
여기서 할당되는 ip가 이 스위치의 ip가 되고 이 네트워크를 할당받는 VM들의 게이트웨이는 이 ip를 바라본다고보시면되겠습니다.
New-NetIPAddress -IPAddress 10.0.0.1 -PrefixLength 24 -InterfaceAlias "vEthernet (NAT-Switch)"
그다음 아래 명령어를 통해 Nat를 활성화 시켜줍니다.
New-NetNat -Name NAT-Swtich -InternalIPInterfaceAddressPrefix 10.0.0.0/24
고정 IP 및 네트워크 설정하기
이제 가상머신의 설정으로 들어가서
네트워크 어댑터의 가상스위치를 기본 Default Switch 에서 방금 생성한 NAT-Switch로 변경 후 부팅해주세요.
Ubuntu 에서는 아래와 같이 ip 설정이 가능하고
윈도우에서도 네트워크 설정에가서 수동 ip할당을해주시면됩니다.
게이트웨이는
포트포워딩하기
마지막 포트포워딩 과정을 위해서 ubuntu에 nginx을 설치해서 테스트해보겠습니다.
ubuntu 22에 nginx를 설치했습니다. 내부 ip는 10.0.0.2 구요.
당연히 host인 윈도우 PC에서 해당 ip로 하면 nginx 페이지가 뜨겠죠?
이제 포트포워딩을 해보겠습니다.
포트포워딩을 하게되면 호스트의 ip(ex. 192.168.1.249)의 80번포트로 접근했을때도 내부 리눅스의 80번포트로 포워딩 되게끔 작업해주는걸 의미합니다.
아래 명령어는 외부ip 0.0.0.0/0에서 요청이 왔을때 80번 TCP포트를 통해서내부의 10.0.0.2 ip의 80번 포트로 포워딩해준다는뜻입니다.
Add-NetNatStaticMapping -ExternalIPAddress "0.0.0.0/0" -ExternalPort 80 -Protocol TCP -InternalIPAddress "10.0.0.2" -InternalPort 80 -NatName NAT-Swtich
이제 윈도우 PC의 ip로 접근을하면 아래처럼 기존 내부 nginx가 잘열리는걸 확인할 수 있습니다.
참고 : https://docs.microsoft.com/en-us/powershell/module/hyper-v/new-vmswitch?view=win10-ps
뭔지 모르겠지만 정보감사합니다
원래 Hyper-V 가 윈도우 Server 버젼에 있던것이다 보니까,
일반 버젼의 윈도우에서는 위와 같이 반쪽짜리가 들어 있습니다.
윈도우 Server 버젼을 설치하고 Router 기능을 확장으로 설치하면,
위에서 수동으로 하신 부분들을 모두 GUI로 진행하실수 있습니다.
또하나의 대안으로는, Router OS 설치하고 Router OS 네트워크를 만들어 설정하시는 방법도 있습니다.
하나 궁금한점이.. hyper-v 는 esxi마냥 공유기 아이피를 못주나요? 좀 불편할것 같네요 윈서버 라이센스땜에 hyperv밖에 못쓸것 같은데..
브릿지설정으로 해주면 될듯한데.. 제가 노트북환경만사용하다보니 가끔 뻗더군요.. 이유는 정확히모르겠습니다 ㅠ
cmt alert