En esta época es cada vez más frecuente que debamos conectarnos remotamente a las bases de datos. Y aunque hay varias formas de hacer eso, lo normal es que lo hagamos a través de Internet.
Entonces, ¿qué necesitamos para poder establecer una conexión exitosa?
Gráfico 1. Si haces clic en la imagen la verás más grande
En el Gráfico 1 podemos ver un caso típico: una computadora remota se conecta a Internet a través de un router, y nuestro Servidor se conecta a Internet a través de otro router. La computadora remota solamente conoce la IP pública o IP estática, pero no conoce (ni debería conocer jamás) la IP que nuestro Servidor tiene en la red local.
Como podemos ver en el Gráfico 1, nuestro router tiene dos IP, una pública, conocida por todo el mundo (que en este ejemplo es 120.130.140.150) y una privada, conocida solamente dentro de la red local (que en este ejemplo es 192.168.1.1)
La computadora donde tenemos instalado el Servidor del Firebird también tiene una IP privada (que en este ejemplo es 192.168.1.31).
¿Qué debemos hacer para que la conexión pueda ser establecida?
Decirle al router que toda la comunicación que se realice a través de Internet mediante un determinado puerto (para el caso de Firebird, generalmente es el 3050) se redirija a la computadora donde tenemos nuestro Servidor de Firebird.
O sea, si alguien envía datos a nuestro router usando la IP estática y el puerto que establecimos, el router enviará esos datos a la computadora donde tenemos el Servidor del Firebird.
Ejemplo de conexión:
A través de las siguientes capturas de pantalla veremos como debemos configurar nuestro router para que podamos conectarnos remotamente a una Base de Datos. Aquí, se usó un router de la marca Motorola, y por supuesto que si el router es de otra marca las capturas serán diferentes, pero en esencia es la misma cosa.
Captura 1. Si haces clic en la imagen la verás más grande
Captura 2. Si haces clic en la imagen la verás más grande
Captura 3. Si haces clic en la imagen la verás más grande
Captura 4. Si haces clic en la imagen la verás más grande
Resumen:
- Abrir el navegador (Internet Explorer, Firefox, Google Chrome, etc.)
- En la barra de direcciones escribir: 192.168.1.1 (esta es la IP privada del router)
- En Username escribir: AdminTHW (todo junto, sin espacios en blanco)
- En Password escribir: motorola
- Hacer clic sobre el botón Advanced
- Hacer clic sobre el botón Forwarding
- Escribir el IP de la computadora donde se encuentra el Servidor del Firebird. En este ejemplo es 192.168.1.31
- En Start Port y en End Port escribir 3050
- Hacer clic sobre el botón Apply
Conexión:
A partir de este momento ya podremos conectarnos a la Base de Datos remota con un comando como el siguiente:
CONNECT 120.130.140.150:D:\BASESDATOS\CONTA.FDB USER SYSDBA PASSWORD masterkey;
Problemas:
Si no puedes conectarte a la Base de Datos, verifica lo siguiente:
- Que la IP pública pueda ser accedida. Eso lo harías con el comando PING. Abre una ventanita «Símbolo del sistema» y escribe: PING 120.130.140.150 (desde luego que aquí escribirías el PING que le corresponde a tu IP pública o estática, 120.130.140.150 es solamente un ejemplo)
Captura 5. Si haces clic en la imagen la verás más grande
Como puedes ver en la Captura 5, el IP 120.130.140.150 no puede ser accedido. Cuando la conexión puede realizarse sin problema todos los paquetes enviados deben ser recibidos y el porcentaje de perdidos debe ser 0%
Importante: Tú no debes escribir 120.130.140.150 sino el IP público (o estático) que tiene tu router.
- Que el firewall no esté bloqueando el puerto que usas para conectarte. En nuestro ejemplo usamos el puerto 3050, ese puerto debe estar abierto o nada podrá enviarse o recibirse a través de él.
- Que la computadora donde se encuentra el Servidor del Firebird sea visible para las otras computadoras de la red local. Eso también puedes averiguarlo con el comando PING y luego poniendo la IP privada, en nuestro ejemplo sería: PING 192.168.1.31
- Que te conectes a la Base de Datos usando el mismo puerto que le dijiste al router que redirigiera al Servidor del Firebird. Por defecto, con Firebird se usa el puerto 3050, si quieres usar otro puerto puedes hacerlo pero en tu string de conexión debes indicarlo, porque el Firebird no puede adivinar que estás usando otro puerto. Así que se lo debes indicar:
CONNECT 120.130.140.150/3152:D:\BASESDATOS\CONTA.FDB USER SYSDBA PASSWORD masterkey;
En este ejemplo usamos el puerto 3152 para la conexión, por lo tanto es ese puerto el que debes redirigir en el router (y para que el Firebird use el puerto 3152 debes indicárselo en el archivo FIREBIRD.CONF, en la entrada RemoteServicePort).
Seguridad:
Internet es una red pública y por lo tanto todo lo que se envíe a través de esa red es pasible de ser interceptado y leído por personas no autorizadas. Para disminuir el riesgo existen programas (como el Zebedee, por ejemplo) que comprimen y encriptan los datos, haciendo por lo tanto la tarea de los hackers mucho más dificultosa. Firebird envía los datos sin encriptarlos entonces si son interceptados podrán ser leídos bastante fácilmente. Al usar Zebedee conseguiremos dos cosas: 1) como los datos se comprimen entonces la velocidad de transmisión será más alta, 2) como los datos se encriptan entonces la posibilidad de ser leídos por personas no autorizadas es nula o casi nula.
Por lo tanto, es altamente recomendable usar Zebedee (o algún programa similar) si la Base de Datos podrá ser accedida a través de Internet.
Conclusión:
Para que podamos conectarnos remotamente a una Base de Datos, los datos enviados a nuestra IP pública usando el puerto 3050 (o el que especifiquemos) deben ser redirigidos a la computadora donde se encuentra el Servidor del Firebird.
Para ello, debemos configurar el router, porque de lo contrario jamás podremos realizar la conexión. Al router se le indica que todos los datos que lleguen a través del puerto 3050 (o el que deseemos) se envíen a la computadora cuya IP privada se especifique.
Como Internet es una red pública, es recomendable que se use algún programa (como el Zebedee) para encriptar los datos que se envían entre computadoras.
Artículos relacionados:
Proteger a las bases de datos visibles en Internet
Usando Zebedee con Firebird. Parte 2
ejgtuc
Abr 08, 2015 @ 13:18:49
Instructivo Walter, gracias.
wrov
Abr 08, 2015 @ 13:25:01
Que bueno.
Saludos.
Walter.
YAcosta
Abr 08, 2015 @ 14:04:43
Congratulations, como siempre bien explicado. Agregaría que en caso de no poder conseguir una IP estática pública por los motivos que fuere se puede usar una IP dinámica pública pero controlado por un servicio tipo NoIP o DynDNS. Tengo implementaciones donde los clientes tienen ip dinámica pública pero con DynDNS se conectan desde cualquier parte del mundo sin problema alguno. Por lo demas, todo es tal cual como se explica en este post. Saludos
ejgtuc
Abr 08, 2015 @ 18:26:59
Excelente acotacion. Gracias
jlgnuno
Abr 08, 2015 @ 14:19:03
¿ Sabes si en el Firebird 3.0 habrá una mejora en la velocidad de respuesta de la base de datos en una red de alta latencia como es internet ?
Actualmente, en la versión 2.5 y para redes con una latencia de 50ms, tarda de media en resolver una consulta sobre una tabla pequeña y con pocos registros sobre medio segundo.
Cuando se paso de la versión 2.1 a la 2.5 la mejora fue importante, creo que se multiplico la velocidad por cuatro. Usando el ejemplo anterior, la misma consulta habría tardado 2 segundos.
wrov
Abr 08, 2015 @ 22:38:16
Sí, tengo entendido que la mejora en la velocidad de conexión a Internet será muy notoria. Se les preguntó a los participantes de la FDD (Firebird Developers Day) de Brasil cual era la característica que deseaban que Firebird mejorara o tuviera, y la mayoría respondió que la velocidad de conexión a Internet. Para incentivarlos a los desarrolladores se hizo una colecta y se les entregó ese dinero.
Así que dentro de poco tendremos un Firebird más veloz cuando se conecte a Internet.
De todas maneras yo he realizado varias pruebas con varias servidores y las velocidades las encuentro aceptables. Ninguno de mis clientes se ha quejado de que las conexiones remotas sean muy lentas.
Saludos.
Walter.
YAcosta
Abr 09, 2015 @ 01:31:57
Si efectivamente, lo mismo me pasa, incluso como ejercicio probé consultas de miles de registros y la demora era por decirlo aceptable. Pero bueno veremos como responde la 3.
Henry Gallardo
Abr 08, 2015 @ 20:56:34
lo máximo, mas claro que el agua, muchas gracias
wrov
Abr 08, 2015 @ 22:31:14
Cierto Yván, esa es siempre una alternativa, escribiré también un artículo al respecto.
Saludos.
Walter.
YAcosta
Abr 08, 2015 @ 22:33:30
Excelente Walter, a la espera del articulo. Saludos
Ledgardo23
Abr 08, 2015 @ 22:54:36
Excelente Haciendo Pruebas saludos 🙂
cerezocableado
Abr 09, 2015 @ 04:14:58
Recordar que las comunicaciones de firebird no están cifradas, si vais a abrir la BD a la red echadle un vistazo a este articulo https://firebird21.wordpress.com/2013/09/12/usando-zebedee-con-firebird/
wrov
Abr 11, 2015 @ 10:37:28
Gracias por la acotación amigo, ya actualicé el artículo.
Saludos.
Walter.
Romeo
Ago 02, 2015 @ 02:08:12
Hola! Un placer consultar a su foro don Walter. Soy algo nuevo en firebird. Una pregunta… aca usted indica como conectarse luego de hacer los ajustes con las IP y todo eso… pero si en lugar de usar:
CONNECT 120.130.140.150:D:\BASESDATOS\CONTA.FDB USER SYSDBA PASSWORD masterkey;
para conectar, se usa:
7.82.252.110:C:\DATOS\MiBaseDatos.FDB
Existe mucha diferencia? Segun lei en su blog… en otra entrada, la 2 opcion es para conexion remota!
Le pregunto porque yo puedo conectar a traves de una red LAN varias maquinas a una que hace de server y me conecto y trabajo bien. Pero ahora me piden que sea via conexion internet para consultar la bd (usando foxpro) desde 2 km de distancia y ya hice todo: configure el DMZ de mi router con la direccion IP de la maquina server para dirigir ahi, abri el puerto 3050 en el router y me asegure que estuviera disponible, use mi IP publica en la linea de conexion que le mostre (la numero 2)… hice todo y aun me da que no se puede conectar. La linea que usted da no la habia visto antes…! Por eso mi duda. Gracias.
wrov
Ago 02, 2015 @ 12:00:29
Hola Romeo
Debes verificar que el firewall no tenga bloqueado el puerto que usas para conectarte. El Firebird normalmente usa el puerto 3050 pero en el archivo FIREBIRD.CONF puedes elegir otro número de puerto si lo deseas.
Para la conexión remota debes escribir:
IP/puerto:Ruta_completa_a_la_base_de_datos
Si el puerto que usas es el 3050, no es necesario escribirlo.
En Visual FoxPro puedes usar la función AERROR() para obtener los datos del último error que ocurrió:
lnCantidadElementos = AERROR(laError)
=MESSAGEBOX(laError[2])
El segundo elemento del array laError es la descripción del error.
Saludos.
Walter.
Romeo
Ago 02, 2015 @ 14:32:09
Hola don Walter. Efectivamente inhabilite todos los firewall (en todas las maquinas) incluso los antivirus jeje! Todo. Hago un ping desde el cliente con el ip publica al server y todo super… envia paquetes y no se pierde nada. De todas formas seguire leyendo porque el error persiste… no hay conexion. Verifique que el puerto 3050 estuviera habilitado y esta bien. Muchas ggracias por su respuesta… vere lo del error. Bendiciones
Romeo
Ago 02, 2015 @ 15:01:43
Ya pude! Me conecte a 1km de aca con otro servicio de internet y las maquinas super bien se conectaron por internet. Era un problema en la IP dado que no es estatica hehe! Tendre que llamar al proveedor de internet y se que me cobrara un ojo de la cara haha! Muchas gracias don walter. Este es un excelente blog y usted un excelente maestro. Bendiciones.
Miguel Ángel
Ago 04, 2015 @ 19:26:51
Por la web puedes encontrar servicios gratuitos, para utilizar un dirección web en lugar de una ip que se actualizan desde el ordenador del que quieres obtener la IP como http://freedns.afraid.org/
Mag
Oct 18, 2017 @ 23:01:09
Hola soy nueva haciendo conexiones remotas con firebird pero he logrado mucho a base de investigar en foros como este, he logrado la conexion remota con firebird, configure el router, deshabilite el firewall, todo bien hasta ahi, me faltaba hacer que la direccion del router no cambiara asi que descargue el cliente de no-ip, y configure el router para que aceptara a no-ip como proveedor del servicio de ddns. el problema que tengo es que desde el navegador si esccribo la direccion ddns que me proporciona noip veo perfectamente mi modem, hace ping sin problema pero no logro conectarme ahora a firebird, la linea de codigo que uso es
CONNECT «milap.ddns.net:8000:C\basedatosejemplo», user «sysdba» password «mmmm» ; (el puerto 8000 lo redirecciono al 3050), alguien sabe cual es mi error?
wrov
Oct 19, 2017 @ 09:25:22
Hola
¿Y cuál es el mensaje de error que te muestra el Firebird?
Saludos.
Walter.
Dario Becerra Begazo
Jul 19, 2019 @ 02:22:52
que error es el que sale. Yo estoy interesado en esa solucion
Dario Becerra
Jul 18, 2019 @ 20:53:41
quisiera saber la respuesta de esta duda. gracias.