Switch virtual amb NAT intern

21 juny 2016
Josep Ma Solanes 0

Aquesta entrada tracta de la creació d’un switch virtual per a màquines virtuals Hyper-V o Containers amb la funcionalitat de xarxa amb NAT intern sobre el sistema operatiu Windows Server 2016 Technical Preview 5 i/o Windows 10 build 14295 o superior.

Una de les coses que li faltava, al meu entendre, a l’hipervisor de Microsoft era precisament poder fer un NAT d’una xarxa interna a una externa sense invents de màquines virtuals de Routing (com pot ser VyOS). Dic li faltava, perquè aquest problema s’ha acabat amb la incorporació d’aquesta tecnologia al sistema operatiu.

Si bé en la versió Microsoft Windows Server 2016 Technical Preview 4 ja es va deixar entreveure, amb la TP5 ha canviat força la forma de implementar-lo, facilitant el seu ús. Anem a veure com ho fem.

 

Configuració del switch virtual amb NAT intern

En el servidor amfitrió on crear el switch virtual, iniciar una sessió de PowerShell amb privilegis d’administrador, com no. Crear un nou switch virtual (per exemple, swNAT) del tipus intern:

New-VMSwitch -SwitchName "swNAT" -SwitchType Internal

El següent pas és crear una porta d’enllaç per la xarxa de NAT, ubicada en aquest switch virtual que acabem de crear. Aquesta IP és la que han d’utilitzar les màquines virtuals que s’ubiquin a la xarxa interna per poder comunicar-se amb l’exterior mitjançant la xarxa amb NAT. Per fer-ho, primer cal esbrinar quin adaptador correspon al nou switch:

Get-NetAdapter

Anotar el ifIndex (en l’exemple el número 16) del switch que s’ha creat per utilitzar-lo a la xarxa de NAT intern.

switch-virtual-nat-intern-001

Assignar-li l’adreça IP que es vol utilitzar com a porta d’enllaç (per exemple la 192.168.254.1/24).

New-NetIPAddress -IPAddress 192.168.254.1 -PrefixLength 24 -InterfaceIndex 16

Per configurar la xarxa de NAT s’ha de proporcionar un nom a la xarxa i indicar l’adreçament IP. Seguin l’exemple anterior, el nom de la xarxa de NAT intern seria netNAT i la xarxa correspondria a la 192.168.254.0/24. La comanda per crear la xarxa de NAT intern:

New-NetNat -Name netNAT -InternalIPInterfaceAddressPrefix 192.168.254.0/24

Ja tenim el switch de NAT intern creat, ara només cal connectar-hi les màquines virtuals.

switch-virtual-nat-intern-002

 

Connectar la màquina virtual a la xarxa de NAT intern

Per comprovar l’existència, i assignació, de màquines virtuals al nou switch, iniciar l’administrador de Hyper-V. Seleccionar el node de Hyper-V on s’ha creat el nou switch. Botó dret damunt del node, o bé al tauler d’accions de la dreta, clicar a Configuració del Switch Virtual.

switch-virtual-nat-intern-003

No s’observa cap canvi estrany o diferent al d’un switch intern de tota la vida, que aïlla les màquines virtuals de l’amfitrió i la xarxa externa. Clicar el botó OK per tancar.

switch-virtual-nat-intern-004

Connectar una màquina virtual a aquest nou switch. A la configuració de la màquina virtual, a l’apartat d’adaptadors de xarxa, seleccionar el switch on s’assignarà la xarxa amb NAT intern i clicar el botó OK.

switch-virtual-nat-intern-005

Comprovar la targeta de xarxa de la màquina virtual, botó dret damunt el símbol de la xarxa ubicat a la dreta, a la barra de tasques, i clicar a Obrir les Xarxes

switch-virtual-nat-intern-006

Clicar a la targeta de xarxa per veure les seves propietats.

switch-virtual-nat-intern-007

Si es clica sobre el botó Detalls es pot veure que la màquina ha agafat una adreça APIPA (169.254.x.x). Això és normal degut a que NO hi ha cap servidor DHCP que ofereixi adreces IP en aquesta subxarxa. Clicar el botó Tancar per tornar a la configuració de la targeta de xarxa.

switch-virtual-nat-intern-008

Clicar el botó Propietats per assignar una adreça IP estàtica a la màquina virtual. Seleccionar Protocol d’Internet versió 4 i clicar el botó Propietats.

switch-virtual-nat-intern-009

Indicar una adreça IP de la subxarxa de NAT intern, que no estigui repetida, és clar. Per exemple: 192.168.254.2 amb la màscara de la subxarxa: 255.255.255.0 i la porta d’enllaç? Com a porta d’enllaç li correspon l’adreça IP que s’ha assignat a la xarxa de NAT intern a l’amfitrió, si s’ha seguit l’exemple, aquesta adreça és la 192.168.254.1. Assignar uns DNS externs per resoldre adreces i clicar el botó OK per aplicar els canvis.

switch-virtual-nat-intern-010

Obrir una consola de sistema per comprovar la connectivitat amb el ping a la porta d’enllaç:

ping 192.168.254.1

No us espanteu, no contesta, i sembla ser que és normal al no tenir-hi cap servei associat. Feu la prova amb una adreça externa. Aquesta si que respon correctament, donant per configurada la xarxa de NAT cap a l’exterior.

switch-virtual-nat-intern-011

 

Publicar a l’exterior serveis de màquines virtuals internes de la xarxa amb NAT intern

Val, sí, tenim una màquina virtual connectada a la xarxa amb NAT intern que se li ha desplegat el servei web de IIS (port TCP 80). Des de la pròpia màquina no hi ha cap inconvenient en accedir al lloc web des d’un navegador connectant a l’adreça localhost:

switch-virtual-nat-intern-012

Des de l’amfitrió tampoc hi ha problema accedint a la IP de la xarxa interna del servidor web, perquè coneix aquesta xarxa interna ja que en té una adreça IP (la porta d’enllaç):

switch-virtual-nat-intern-013

Però i des de l’exterior de l’amfitrió? Com comuniquem amb el servei que ofereix una màquina virtual dins la xarxa amb NAT intern? Doncs fent una publicació de ports sobre l’amfitrió, pura i dura.

En l’amfitrió, on s’ha configurat el switch amb NAT intern, obrir una consola de PowerShell amb privilegis d’administrador. Comprovar que disposa i quin nom té la xarxa de NAT intern:

Get-NetNat

També necessitem saber si ja disposa de regles de publicació de ports per no sobreescriure’s:

Get-NetNatStaticMapping

Crear la nova regla per publicar el port 80 contra la IP de la màquina virtual situada a la xarxa de NAT intern (netNAT – correspon al nom de la xarxa de NAT obtinguda a,b Get-NetNat):

Add-NetNatStaticMapping -NatName “netNAT” -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.254.2 -ExternalPort 80 -InternalPort 80

Es crea la regla que es pot validar la seva existència amb la comanda:

Get-NetNatStaticMapping

Ara, si s’accedeix des d’un equip de la xarxa externa a la IP de l’amfitrió (en l’exemple 192.168.1.183) apareix la web del servidor ubicat a la xarxa amb NAT intern.

switch-virtual-nat-intern-014

Recordeu que només podeu publicar cada port un sol cop contra una IP. No puc fer un NAT del port 80 contra una IP interna i alhora contra una altre IP interna (és quan es requereixen els proxies revers). També que no es pot accedir directament a la xarxa interna, sinó que s’ha de fer contra l’amfitrió. La xarxa interna no està encaminada, queda emmascarada (amagada de l’exterior).

Esborrant la xarxa amb NAT intern

Us deixo quatre comandes senzilles per desfer el què hem fet, per si mai les necessiteu.

 

Esborrar la publicació d’un port per NAT

Abans d’esborrar-la, s’ha de saber què s’esborra, és clar. Si en tenim més d’una quina és la correcta? Les regles de NAT es poden filtrar amb el StaticMapping ID, en el meu cas selecciono la regla número 1 de la xarxa de NAT netNAT:

Get-NetNatStaticMapping -NatName netNAT | Where {$_.StaticMappingID -eq 1}

Se li passa la comanda Remove-NetNatStaticMapping per esborrar la regla de NAT concreta:

Get-NetNatStaticMapping -NatName netNAT | Where {$_.StaticMappingID -eq 1} | remove-NetNatStaticMapping

 

Esborrar la xarxa NAT intern

Per no deixar objectes orfes, que després no sabem d’on han sortit, recomano primer esborrar la IP de porta d’enllaç de l’equip amfitrió. Esbrinar el ifIndex de l’adaptador del switch que s’utilitza per la xarxa amb NAT intern:

Get-NetAdapter

Comprovar que l’adaptador té la IP que es vol esborrar indicant el ifIndex obtingut amb la comanda anterior:

Get-NetIpAddress -ifIndex NUMERO

Procedir a esborrar totes les adreces IP de l’adaptador (per exemple amb el ifIndex 16):

Get-NetIpAddress -ifIndex 16 | remove-netIpAddress

Esborrar la xarxa amb NAT intern. Recuperar el nom de les xarxes NAT i esborrar-la:

Get-NetNat -name netNat | remove-NetNat

 

Ja no teniu excusa per configurar els vostres entorns de proves en Windows 10 amb xarxes internes!

 

T’ha agradat l’article? El pots compartir a les xarxes socials. També pots deixar la teva opinió, comentari o suggeriment. Gràcies!

Similar Posts by The Author: