Configuración de VM con SQL Express para ser accedida usando SSMS desde el host

1

Estoy tratando de configurar mi VM con SQL Server 2008 R2 Express para que solo pueda acceder de forma remota a SQL usando SQL Server Management Studio desde la máquina host.

Configuración de VM

  1. ejecutando Windows Web Servidor 2008 R2
  2. Hay dos NIC:
    • Puente para que se conecte a internet.
    • Host solo para que pueda comunicarme más rápido a través de la red virtual
  3. Los servicios del motor SQL y del navegador se están ejecutando
  4. He habilitado el protocolo TCP / IP para SQL Express pero no he configurado ninguna dirección IP (pestaña separada)
  5. He añadido reglas de firewall entrantes para:
    • 1433 puerto TCP
    • 1434 puerto UDP
  6. Si veo conexiones de red, veo que mis dos NIC están conectadas a las redes. Puedo configurar la red puenteada para Lugar de trabajo pero no puedo cambiar el tipo de red de la red de solo host. Así que está listo para Público por defecto. No estoy seguro de si esto tiene algo que ver con eso, pero así es como es.

Configuración de host

Lo único que hice en mi host es que le puse un nombre a mi VM IP. Y lo he hecho con la dirección IP de sólo host. He añadido una entrada en mi archivo HOSTS.

Problema

Luego abro SSMS en mi máquina host y si selecciono Buscar más en el Conectar al servidor ventana de diálogo realmente puedo ver la instancia de SQL de mi máquina virtual. Pero cuando intento conectarme a esto, esto es lo que obtengo cuando intento conectarme de las siguientes tres maneras:

  • nombre de la máquina (mi archivo HOSTS hará la reasignación de IP) enter image description here

  • dirección IP de la red puenteada enter image description here

  • dirección IP solo para el host enter image description here

Pregunta 1: ¿Qué más puedo configurar para poder acceder a la instancia de SQL de mi VM? Si es posible, también me gustaría configurarlo, de modo que solo pueda acceder a él a través de la red de solo Hots y no a través de la red puente. Pero eso solo sería una ventaja adicional si pudiera configurarlo de esa manera.

Pregunta 2: ¿Realmente necesito el navegador SQL para ejecutarse porque, por lo que sé, solo se ocupa de que la instancia de SQL sea detectable? Si sé que la instancia de SQL es ahí y sé que usa el puerto 1433, ¿no puedo simplemente conectarme usando este Nombre del servidor :

DATAVM\SQLEXPRESS,1433

Editar

Este es el resultado de netstat: enter image description here

Yo tambien corri portqry en el host para comprobar mi instancia de SQL en mi máquina virtual. Si intento la dirección IP puenteada, en realidad obtengo la respuesta del navegador SQL:

Starting portqry.exe -n 192.168.1.143 -e 1434 -p UDP ...

Querying target system called:
 192.168.1.143

Attempting to resolve IP address to a name...

IP address resolved to Datavm

querying...

UDP port 1434 (ms-sql-m service): LISTENING or FILTERED

Sending SQL Server query to UDP port 1434...

Server's response:

ServerName DATAVM
InstanceName SQLEXPRESS
IsClustered No
Version 10.50.1600.1
tcp 49159

Como puedo ver en este resultado, mi instancia de SQL realmente está escuchando en el puerto TCP 49159.

Así que fui a la configuración SQL y cambié este puerto a 1433.

Pregunta 3: ¿Es normal que el puerto no esté configurado en 1433 por defecto? ¿Debo cambiarlo de nuevo a 49159 y cambiar la regla de mi firewall entrante para pasar por este puerto o debería dejarlo en 1433?

Cambiando de puerto a 1433 Puedo conectarme a la VM desde mi máquina host SSMS . Pero solo puedo hacer esto usando una dirección IP puenteada.

Como entiendo la configuración de TCP / IP en el protocolo de SQL el Direcciones IP debe enumerar todas las direcciones IP de la máquina. Puedo ver 5 de ellos:

  1. dirección NIC V6 puenteada
  2. dirección NIC V4 puenteada
  3. localhost V6 (:: 1)
  4. localhost V4 (127.0.0.1)
  5. algunos ? Dirección V6 que no está relacionada con la red con puente ni con la del host (fe80 :: 100: 7f: fffe% 12)

Supongo que esta es también la razón por la que no puedo conectarme utilizando una red solo de host ... ¿Pero cómo configuro mi VM para que pueda (y posiblemente deshabilite la red puente)?

Robert Koritnik
fuente
Por favor, compruebe si se está escuchando en el puerto. netstat -a y es posible que también desee configurar las direcciones IP (paso cuatro) para ver si eso mejora algo.
Tom Wijsman
@TomWijsman: revisa mi pregunta editada donde adjunto netstat Resultado y también alguna solución parcial donde pude conectarme. pero no como yo quería ... Por favor, lea más arriba.
Robert Koritnik
Me alegro de que realmente hayas progresado, no soy bueno en la configuración de red de VM, pero solo quería que agregaras detalles que podrían llevarte (u otros) a una solución. ¡Buena suerte! :)
Tom Wijsman

Respuestas:

0

SQL Browser es necesario para las instancias con nombre si estoy recordando correctamente. Su instancia nombrada escucha en un puerto diferente (que usted descubrió) y el Explorador SQL revelará ese puerto. También puede configurar su instancia para escuchar en un puerto específico utilizando la configuración de red SQL.

He encontrado que la comunicación de red de host a vm también es un poco frustrante a veces.

¿Ha intentado apagar su firewall en la máquina virtual solo para probar? Eso suele ser el paso 1 en los problemas de conectividad de pin-point. 90% + de los problemas de conectividad son problemas de firewall.

MikeJansen
fuente
Además, agregue los procesos SQL a las excepciones de firewall y no a puertos específicos. De esa manera no importa qué puertos esté usando la aplicación. Le está diciendo al servidor de seguridad que "esta aplicación es genial, lo confiaría con mis hijos".
MikeJansen
Es posible que desee editar su respuesta con esta información en lugar de dejarla como comentario.
soandos
@MikeJansen: Bueno, parece que especialmente si tu servidor es abierto es mejor no ejecuta el navegador SQL Porque no es necesario después de todo. Siempre puedes conectarte usando la información del puerto como Nombre de instancia de machineName \ sql, Número de puerto . Simplemente funciona. Y dado que una aplicación está accediendo a la base de datos SQL (y usted al desarrollador), el puerto es una variable conocida. La ejecución del navegador SQL hace que esa variable se conozca públicamente. Y en lugar de agregar el EXE al firewall, acabo de agregar el puerto. Es discutible cuál es mejor.
Robert Koritnik
@MikeJansen: y sí ... Intenté apagar el Firewall. Parece que no puedo conectarme a través de la red virtual del host ... Creo que ahora debería ser una pregunta separada porque está parcialmente relacionada con la pregunta original.
Robert Koritnik
@MikeJansen: FYI: Me las arreglé para configurarlo ahora mismo aunque he hecho una pregunta en ServerFault también. Este es el enlace para solucionarlo allí.
Robert Koritnik
0

Solución

A medida que profundizo en esto, parecía más y más que esto es más un problema de red que la configuración de SQL Server. Y fue.

He resuelto el problema de la red y puedes leer acerca de la solución en ServerFault . Esto le ayudará a configurar la red virtual de solo Host para que no esté tan bloqueada como Windows la configura de forma predeterminada.

Pero hay alguna otra cosa. Y esas son ** Direcciones IP que se pueden ver en el Protocolo TCP / IP en la configuración de la instancia de SQL Server.

El problema aquí es que esta lista de IP solo se rellena cuando instala su instancia de SQL Server. Si realiza cambios en sus adaptadores de red, dichos cambios no se reflejarán en la configuración de SQL Server. Esto es un problema conocido Desde 2006 y aún no se ha resuelto.

En mi caso, agregué una NIC adicional que es solo de host y debido a que mi instancia de SQL ya se ha instalado, esas direcciones IP no aparecen en la configuración. Pues resulta que puedes a mano agrega esas configuraciones nuevas o modificadas usando el editor de registro.

Navegar a:

HKEY_LOCAL_MACHINE
  SOFTWARE
    Microsoft
      Microsoft SQL Server
        MSSQL10_50.[InstanceName]
          MSSQLServer
            SuperSocketNetLib
              Tcp

Encontrará todas las direcciones IP que puede configurar allí. Como tuve que agregar dos direcciones más, exporté IP2 y luego edité el archivo * .reg guardado:

  1. Cambió la primera línea y cambió IP2 a IP norte (donde n es la corriente máx + 1)
  2. Dirección IP modificada y dirección IP v6 agregada de la red de solo host
  3. Copiado y pegado todas estas lineas.
  4. IP incrementada norte por 1
  5. Dirección IP modificada y dirección IP v4 agregada de la red de solo host

Guardó el archivo y lo importó en el editor de registro. Entonces puedo ver dos direcciones IP más en el editor de registro.

Abrí la configuración de SQL Server y sí, ahora tengo dos direcciones OP adicionales en la configuración de la instancia de SQL del protocolo TCP / IP que puedo configurar individualmente.

Eso es. Trabajos.

Robert Koritnik
fuente