Artículo:

Autor:

Descripción:

 



Posibles problemas en conexiones remotas contra SQL Server vía internet.

Raúl García

En este artículo se explican las configuraciones necesarias para conectar a SQL Server de forma remota vía internet, así como los problemas más habituales que nos suelen surgir y cómo resolverlos. Este artículo evitará al lector horas en la resolución de dudas que le pueden surgir ante este tipo de conexiones.

 


Tu revista sobre .NET


· SQL Server

Administracion

Instalación

Arquitectura

DTS / SSIS

XML / Servicios Web

Full Text Search

Backup / Restore

Seguridad

Tareas administrativas

Rendimiento

Implementación
Otros


Posibles problemas en conexiones remotas contra SQL Server vía internet.


En este documento solo pretendo aclarar alguno de los aspectos básicos que cualquiera que se conecte contra una instancia remota de SQLSERVER debe tener en cuenta.

- Configuración de red.

En primer lugar debemos conocer la configuración de red que afecta a nuestro equipo SERVIDOR (el que tiene SqlServer). Si nuestro servidor sale a Internet por medio de un Router, deberemos hacer NAT para redireccionar las conexiones entrantes por el puerto 1433 (puerto por defecto de SqlServer) a nuestro equipo SERVIDOR.

También hay que asegurarse que cualquier firewall habilitado permite las conexiones contra SqlServer. No hace falta decir que deberemos conocer la IP Pública por la que sale el Router, para luego conectarnos a ella.

- Configuración en SqlServer

Antes de intentar conectarnos debemos comprobar los siguientes aspectos de configuración:

1. Tener arrancado el servicio de SqlServer (mediante el administrador de servicios de SQL Server).

2. Conocer la IP contra la que nos conectamos: Para conectarnos contra una instancia predeterminada de SQL Server bastaría con poner la IP publica de la máquina donde se ejecuta, pero si se trata de instancias con nombre es necesario especificar IP\NombreInstancia. En este caso no nos vale con poner NombreMaquina\Instancia dado que no se va a conseguir resolver el nombre de la maquina por Internet.

3. Protocolos habilitados en el Servidor: Comprobar con la herramienta de red del servidor que se encuentran habilitados los protocolos TCP/IP.

Si no hemos tenido en cuenta alguno de los puntos anteriores, podríamos obtener el siguiente mensaje de Error:

"No existe el Servidor SQL Server o se ha denegado el acceso al mismo"

Pero como siempre, existen situaciones epeciales que pueden hacer que nos surjan errores pese a tener bien configurado lo anterior.

Lo primero que hay que tener en cuenta es que si en una misma maquina existen varias instancias de SqlServer, solo la predeterminada corre por el puerto 1433, y todas las demás escuchan en un puerto que les asigna el Servicio de Resolución de Sql, por lo que sería necesario reconfigurar el NAT de nuestro Router para permitir las conexiones a SqlServer por el puerto correspondiente. Pero además habrá que tener en cuenta algo MUY IMPORTANTE, y es que el Servicio de Resolución de Sql corre en el Puerto UDP 1434, por lo que también deberemos hacer NAT a este puerto en concreto. Sino NO conseguiremos conectarnos.

La asignación de este puerto (la de la instancia) se puede configurar para que se haga de forma estática o de forma dinámica. Como ya hemos dicho, la instancia predeterminada de SQL Server escucha solicitudes de clientes de SQL Server en el puerto 1433 (estático). Sin embargo, si una instancia de SQL Server se configura para escuchar en un puerto estático y si ya utiliza el puerto estático especificado otro programa que se ejecuta en el equipo cuando se inicia SQL Server, SQL Server no escuchará en el puerto estático especificado. Si utilizamos conexiones a nivel de red local, en principio toda esta asignación de puertos nos daría igual, salvo por algún firewall que nos este capando la conectividad, pero es cuando utilizamos conexión via Internet, cuando debemos controlar estos aspectos si queremos mantener un cierto grado de seguridad en nuestro Servidor. Para "solucionar" esto, podríamos hacer que una instancia determinada escuche en varios puertos estáticos.

Pero antes de ver como configurar una instancia de SqlServer para que escuche por varios puertos estaticos, es más que conveniente saber como podemos conocer en que puerto corre una instancia determinada.

Conocer en que puerto corre una instancia determinada

Tenemos varias opciones, y todas ellas son interesantes porque puede darse el caso de que en alguna ocasión no dispongamos de determinadas herramientas y necesitemos conocer estos datos de algún otro modo.


1. Desde la Herramienta de red del servidor de SqlServer.

Iniciamos la Herramienta de red del servidor desde Inicio, Programas, Microsoft SQL Server, Herramienta de red del servidor o tambien desde Inicio, Ejecutar y en el cuadro Abrir escribimos svrnetcn.exe y hacemos clic en Aceptar.

Hacemos clic en la ficha General, seleccionamos de la lista nuestra instancia de SQL Server.

En el cuadro de lista Protocolos habilitados, hacemos clic en TCP/IP y a continuación clic en Propiedades.


2. Mediante Transact-Sql

Lanzando desde el analizador de consultas de Sql la siguiente instrucción de Transact-Sql sobre nuestra instancia:

Use master
Go
Xp_readerrorlog

En el panel Resultados, buscaremos una entrada semejante a está:

Servidor SQL escuchando en X.X.X.X: S

Donde X.X.X.X es la dirección IP de la instancia de SQL Server y donde S es el puerto TCP/IP donde escucha SQL Server.


3. Mediante una instrucción de red en Windows XP.

Si abrimos ms-dos y ejecutamos la instrucción netstat -abn en el servidor, tambien podremos comprobar en que puerto está corriendo una instancia determinada de SqlServer.

La opción -b que es la que muestra el ejecutable y el puerto de escucha, solo está disponible en Windows XP.

Adicionalmente si no nos encontramos en el servidor, podemos lanzar contra él desde nuestra maquina, la instrucción osql -S nombre_instancia -U sa. Esta instrucción nos abre una conexión contra la instancia indicada a modo de analizador de consultas. No es necesario que efectuemos ninguna consulta, porque lo único que nos interesa es que hemos abierto una conexión desde nuestra maquina hacia el Servidor, por lo que si ahora hacemos un netstat -abn en nuestra maquina, y consutamos el resultado del comando, buscando la entrada que hace referencia al ejecutable [osql.exe] podremos ver las ip de origen y destino asi como los puertos por los que se establece la conexión.


Configurar el puerto de escucha de una instancia de SqlServer

Ahora si, para configurar el puerto de forma estática, accedemos mediante la Herramienta de red del servidor a las propiedades de TCP/IP de nuestra instancia y pulsamos propiedades, el puerto que aparece como predeterminado es el puerto estático que se está utilizando, si queremos asignar varios, solo debemos ir añadiendolos uno detrás de otro, seguidos por comas, por ejemplo: 1433,5000

Nota 1: Si el protocolo TCP/IP está deshabilitado, lo habilitamos ahora. Para ello, clic en TCP/IP en el cuadro de lista Protocolos deshabilitados y a continuación, clic en Habilitar.

Nota 2: El puerto estático que especifiquemos no debe ser igual que el puerto dinámico en el que actualmente este escuchando otra instancia de SQL Server. Por ejemplo, si una instancia de SQL Server escucha en el puerto TCP/IP dinámico 1400, escribiremos por ejemplo 1500 para el nuevo puerto estático.

Si lo que queremos es que la asignación de puerto se haga de forma dinamica, deberemos poner el cero como puerto predeterminado.

Siempre que modifiquemos alguno de estos puertos, a continuación deberemos reiniciar la instancia de SQL Server.


 

 

 

Para cualquier tipo de sugerencia, colaboración o comunicación, diríjanse a

webmaster@helpdna.net