Conectar Aski a un ERP que no sale a internet
Si el ERP vive dentro de la red de la empresa y no tiene una dirección pública, Aski llega a él por un túnel cifrado. Para eso se instala un programa pequeño —Tailscale— en una máquina de esa red.
Antes de empezar
- La clave de instalación. Si todavía no la tienes, solicítala antes de empezar. Sirve una sola vez y caduca: ese plazo es para instalarla, no para la duración del acceso.
- Una máquina de la red del ERP que esté siempre encendida. Puede ser el propio servidor del ERP o cualquier otra de la misma red.
- Permisos de administrador en esa máquina, solo para instalar.
- Salida a internet desde esa máquina, por el puerto 443. No hay que abrir nada de entrada, pero si ese segmento no sale a internet —o solo sale por un proxy con usuario y contraseña— avísanos antes: es lo único que puede impedir que el nodo levante.
Lo que esto NO hace
- No abre ningún puerto de entrada. La conexión la abre el nodo hacia afuera.
- No expone el ERP a internet. Sigue sin ser accesible desde fuera.
- No modifica el ERP. No se instala nada dentro de él.
- No entrega tus credenciales a nadie. El usuario y la clave del ERP los escribes tú en la aplicación.
Paso 0 · Decide dónde va el nodo
Esto define todo lo demás, así que decídelo antes de instalar nada. Hay dos opciones y ninguna es mejor: depende de si puedes instalar software en el servidor del ERP.
Opción A · En el propio servidor del ERP (recomendada)
- Es la más simple. No hay rutas que aprobar ni nada que coordinar.
- No puede chocar con otro cliente. La dirección que recibe es única en el mundo, así que no hay ambigüedad posible.
- Requiere poder instalar software en ese servidor.
- La dirección que se usará en Aski es la que asigne Tailscale, y empieza por 100. Se obtiene en el paso 3.
Opción B · En otra máquina de la misma red
- Para cuando no se quiere tocar el servidor del ERP. Vale cualquier equipo de esa red que esté siempre encendido.
- Esa máquina hace de puente: hay que decirle qué red debe alcanzar. Eso es la subred, y va en el comando.
- Cuando termines hay que avisar: ese puente se habilita del lado de Aski.
- La dirección que se usará en Aski es la IP interna del ERP
(
192.168.x.xo similar), no la que empieza por 100.
Importante · con la opción B, un puente Linux necesita un comando más. Recién instalado no reenvía tráfico: hay que activar el reenvío. Es un solo comando, está en la sección de Linux, y sin él la conexión falla por tiempo de espera sin dar ninguna pista. Está medido: no es una precaución teórica.
El puente puede ser Windows o Linux, indistintamente, también con un ERP en HTTPS —el caso típico es el Service Layer de SAP Business One—. El ajuste de tamaño de paquete que antes hacía falta en el puente ahora lo aplica Aski en su propio extremo. En Windows el reenvío lo activa el propio Tailscale al instalarse, así que ahí no hay nada que hacer.
Con todo eso, la A sigue siendo preferible cuando se pueda: no tiene ninguno de estos pasos,
y además evita otra molestia. Si dos empresas distintas usan la misma red interna —y
192.168.1.0/24 es la más común del mundo— hay que desambiguar, y con la A eso no
pasa nunca. Si vas a por la B, indica qué red usas para comprobarlo antes.
Qué es la subred, y cómo se saca
Solo hace falta en la opción B. Es la red donde vive el ERP, escrita como «dirección base + barra + número»:
192.168.1.0/24 (la más habitual en oficinas) 10.0.0.0/24 172.16.5.0/24
Para deducirla, mira la IP del servidor del ERP y cambia el último número por 0, añadiendo
/24:
El ERP está en 192.168.1.20 -> la subred es 192.168.1.0/24 El ERP está en 10.0.5.44 -> la subred es 10.0.5.0/24
El /24 significa «las 254 direcciones de esa red», que es como está montada casi
cualquier oficina. Si tu red es más grande y no estás seguro, dínoslo con la IP del ERP y la
máscara, para que te lo confirmen.
Dato imprescindible en la opción B: la IP interna del ERP y su puerto.
Instalación en Windows Server / Windows 10 u 11
Es lo habitual cuando el ERP es SAP Business One. Hace falta la consola una sola vez: la ventana de Tailscale no admite claves de instalación —solo iniciar sesión con una cuenta— y aquí no queremos crear ninguna cuenta.
- Descarga el instalador desde
tailscale.com/download/windowsy ejecútalo. Siguiente, Siguiente, Instalar. - Al terminar no abras la ventana de Tailscale ni inicies sesión. Si se abrió algo, ciérralo. La conexión se hace con la clave, no con una cuenta.
- Abre PowerShell como administrador: clic derecho sobre el botón de Inicio → «Terminal (Administrador)» o «Windows PowerShell (Administrador)». Acepta el aviso de permisos.
- Pega el comando que te dieron y pulsa Enter. Tiene esta forma:
tailscale up --authkey=LA_CLAVE --hostname=aski-tuempresa --unattended
Y así si el nodo va en otra máquina (opción B), con la subred al final:
tailscale up --authkey=LA_CLAVE --hostname=aski-tuempresa \
--advertise-routes=192.168.1.0/24 --unattended
Importante. --unattended es imprescindible en Windows. Sin él, Tailscale se
detiene al cerrar sesión, y en un servidor eso pasa siempre: la conexión se caería sola a las
pocas horas, sin causa aparente.
Si salió bien no imprime nada. Para comprobarlo:
tailscale ip -4
Devuelve una única línea con una dirección que empieza por 100. Esa es la señal de que funcionó.
Instalación en Ubuntu, Debian, RHEL, Rocky u otro Linux
1. Instala Tailscale (el script detecta la distribución):
curl -fsSL https://tailscale.com/install.sh | sh
2. Conéctalo con tu clave de instalación:
sudo tailscale up --authkey=LA_CLAVE --hostname=aski-tuempresa
Y si el nodo va en otra máquina (opción B):
sudo tailscale up --authkey=LA_CLAVE --hostname=aski-tuempresa \
--advertise-routes=192.168.1.0/24
3. Comprueba que entró:
tailscale ip -4
4. Y que el servicio arranca con el sistema, para que sobreviva a un reinicio:
sudo systemctl is-enabled tailscaled
Debe responder enabled. Si responde disabled, actívalo con
sudo systemctl enable tailscaled. En Linux no hace falta
--unattended: eso es cosa de Windows.
Solo en la opción B · el paso que falta
Si el nodo va en el propio servidor del ERP (opción A), sáltate esto: ya terminaste. Lo que viene es para la máquina que hace de puente. Sin este paso el túnel se ve conectado y la conexión falla por tiempo de espera. Es el fallo que más tiempo cuesta encontrar, precisamente porque no da ningún error.
Permitir que la máquina reenvíe tráfico. Un puente, por definición, pasa paquetes que no van dirigidos a él, y Linux de fábrica no lo hace:
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-tailscale.conf sudo sysctl --system
Se escribe en /etc/sysctl.d/ a propósito, y no con
sysctl -w: así sigue puesto después de un reinicio. Compruébalo con
sysctl net.ipv4.ip_forward, que debe responder = 1.
Después hay que repetir el tailscale up del paso 2 mencionando también el
nombre, o dará un error; está en «Si algo no funciona».
Si el túnel se cae después de que alguien toque el cortafuegos, lo primero que hay que
probar es sudo systemctl restart tailscaled. Recargar firewalld —o cualquier
firewall-cmd --reload— borra las reglas que Tailscale había puesto en el sistema, y
a partir de ahí el nodo sigue apareciendo conectado pero ya no pasa tráfico. Reiniciar
Tailscale las repone. Es el mismo síntoma de arriba y la causa más frecuente de que un túnel que
llevaba semanas funcionando deje de hacerlo de golpe.
Antes de avisar de que terminaste, comprueba desde esta misma máquina que el ERP responde, con el punto 7 de las comprobaciones. Si desde el puente no responde, por el túnel tampoco, y el problema está en la red interna —no en Aski—.
Ya no hace falta tocar el tamaño de paquete. Si seguiste una versión anterior de esta
guía que pedía una regla de iptables con TCPMSS, puedes dejarla o
quitarla: da igual. Ese ajuste ahora lo aplica Aski en su propio extremo, así que no hay nada que
configurar en tu servidor ni nada que se pierda al reiniciar.
Si el ERP corre en Docker
Se levanta un contenedor al lado, compartiendo la red del ERP. Dos datos importan: el volumen, porque sin él el nodo pierde su identidad al reiniciar y hay que reinstalarlo; y el nombre, porque sin él el nodo aparece con el del contenedor del ERP y no se distingue de los demás.
docker run -d --name tailscale \ --network container:NOMBRE_DEL_CONTENEDOR_DEL_ERP \ --cap-add NET_ADMIN --device /dev/net/tun \ -v tailscale-state:/var/lib/tailscale \ -e TS_AUTHKEY=LA_CLAVE \ -e TS_HOSTNAME=aski-tuempresa \ -e TS_STATE_DIR=/var/lib/tailscale \ tailscale/tailscale:latest
Paso final · qué nos tienes que decir
Si elegiste la opción A (nodo en el servidor del ERP): nada más, el nodo nos aparece solo. Basta con avisar de que terminaste para que te confirmen la dirección que debes usar.
Si elegiste la opción B (nodo en otra máquina):
- Hay que avisar, porque el puente se habilita del lado de Aski.
- Indica la IP interna del ERP y su puerto. Por ejemplo
192.168.1.20y8069.
Importante. Hasta que habilitemos el puente, la conexión no funcionará aunque todo lo demás esté bien. Es un solo clic del lado de Aski.
Crear la conexión en Aski · campo por campo
En la app: Conexiones → Nueva conexión. Estos son los campos tal como aparecen en pantalla:
Tipo de ERP
Odoo · SAP S/4HANA · SAP B1. El que corresponda.
Apodo
El nombre con el que verás esta conexión en tu lista. Es solo para ti: pon lo que te sirva para reconocerla, como «Odoo producción» o «SAP oficina».
Casilla «Mi ERP no es alcanzable desde internet»
Esta casilla hay que marcarla. Está justo debajo del campo URL. Es lo que hace que la app acepte una dirección interna: sin marcarla, la rechaza a propósito y no te dejará guardar.
Si no ves la casilla, avisa: significa que el túnel todavía no está activo, y se habilita del lado de Aski.
URL
Aquí va la dirección que quedó de la instalación, con el puerto del ERP:
Opción A (nodo en el servidor del ERP)
http://100.71.252.92:8069
^^^ lo que devolvió `tailscale ip -4`, más el puerto
Opción B (nodo en otra máquina de la red)
http://192.168.1.20:8069
^^^ la IP interna del ERP, más el puerto
El puerto es el del ERP, el mismo que se usa dentro de la oficina: 8069 en Odoo por defecto, 50000 en el Service Layer de Business One.
Importante. Tiene que ser una dirección IP, no un nombre. Un nombre lo resolvería el DNS del lado de Aski, no el de tu red, y apuntaría a otro sitio o a nada.
Los tres campos que siguen —Base de datos, Usuario / login y API Key— cambian según el ERP y son los que más dudas generan. Están explicados paso a paso, con dónde encontrar cada uno en Odoo, Business One y S/4HANA, en la guía aski.dev/guia-credenciales. Aquí va el resumen.
Base de datos
El nombre de la base en Odoo —se ve en la URL al entrar, como ?db=miempresa—. En
Business One es la Company DB, algo como SBO_MiEmpresa. En S/4HANA este campo no
aparece.
Usuario / login
El usuario del ERP con el que se van a hacer las consultas. Cada persona pone el suyo, no uno compartido.
API Key
En Odoo: se genera desde tu perfil → Seguridad de la cuenta → Nueva clave de API, y solo se muestra una vez. En Business One: la contraseña de ese usuario de SAP. En S/4HANA: la API Key de tu instancia.
Probar y guardar
Pulsa Probar conexión para verificar antes de guardar, y luego Conectar y guardar. Si la prueba falla, mira la última sección de esta guía.
Varias personas en la misma empresa
El túnel se instala una sola vez para toda la empresa. Cada persona que vaya a usar Aski crea su conexión en su cuenta:
- La misma URL y la misma base de datos para todos.
- Su propio usuario y su propia API Key del ERP.
- Todos marcan la casilla.
No hay que reinstalar ni reconfigurar nada por cada persona. Y usar credenciales propias no es burocracia: hace que cada una vea exactamente lo que su usuario ve en el ERP, ni más ni menos. Con un usuario compartido, todos verían lo mismo.
Cortar el acceso, cuando quieras
Sin pedir permiso a nadie y con efecto inmediato, cualquiera de estas dos:
- Apagar el nodo:
tailscale downen esa máquina, o desinstalar Tailscale. - Deshabilitar en el ERP el usuario que usa Aski.
También puedes pedir que revoquen la clave y el acceso desaparece.
Comprobaciones · los comandos que ahorran una tarde
En la máquina donde vas a instalar el nodo. En Windows, PowerShell como
administrador; en Linux, una terminal con sudo. Cada comprobación responde una
pregunta que, sin respuesta, se descubre a mitad de la instalación.
1 · ¿Esta máquina sale a internet?
Test-NetConnection controlplane.tailscale.com -Port 443 # Windows curl -sI https://controlplane.tailscale.com | head -1 # Linux
Busca TcpTestSucceeded : True o una respuesta HTTP/2 200. Si no sale,
el nodo no va a levantar y es lo primero que hay que pedirle a infraestructura. No hace falta
abrir nada de entrada, solo que pueda salir.
2 · ¿Es esta la máquina del ERP, o solo un equipo de la red?
Get-NetTCPConnection -State Listen | Select-Object LocalPort | Sort-Object LocalPort Get-Service | Where-Object DisplayName -match "SAP|Odoo" # Windows sudo ss -lntp | grep -E ':(8069|8071|50000|443)' # Linux systemctl status odoo 2>/dev/null | head -3
Si entre los puertos aparece 8069 u 8071 (Odoo), 50000 (Service Layer de Business One) o 443 (cualquiera de los dos detrás de un proxy), el ERP está aquí y te toca la opción A.
Si en los servicios solo sale «SAP Business One Client Agent», esta es una máquina de
usuario y el ERP vive en otro equipo. En Odoo el equivalente es que no haya servicio
odoo ni nada escuchando en 8069.
3 · ¿Y en qué máquina está el ERP?
Odoo: es la dirección con la que entran desde la oficina. Si es un nombre y no una IP, resuélvelo:
Resolve-DnsName erp.miempresa.local # Windows getent hosts erp.miempresa.local # Linux
Business One: desde un equipo con el cliente abierto, las conexiones establecidas lo delatan:
Get-NetTCPConnection -State Established |
Where-Object RemotePort -in 30000,40000,50000 |
Select-Object RemoteAddress, RemotePort
El RemoteAddress que salga es el servidor (30000 es el servidor de licencias,
40000 el SLD). También aparece en la ventana de login del cliente, en «Servidor de licencias».
4 · ¿Alcanzo el ERP desde aquí, y en qué puerto?
Test-NetConnection LA_IP_DEL_ERP -Port 8069 # Odoo (o 443, o 50000 en B1) nc -vz LA_IP_DEL_ERP 8069 # Linux
LA_IP_DEL_ERP es la dirección del punto 3. Un True —o un
succeeded— resuelve el punto. Si tu ERP está en otro puerto, dínoslo: hay que
autorizarlo de nuestro lado, y si no lo sabemos la conexión falla sin dar detalle.
5 · Tu dirección y tu subred (solo para la opción B)
Get-NetIPAddress -AddressFamily IPv4 |
Select-Object IPAddress, PrefixLength, InterfaceAlias # Windows
ip -4 -br addr # Linux
Una IP 192.168.10.30 con PrefixLength 24 significa subred
192.168.10.0/24: la misma dirección con el último número en 0, y la barra con ese
número. Ignora 127.0.0.1 y los adaptadores de Docker o Hyper-V; te interesa la
tarjeta de red real.
6 · ¿Su red usa el mismo rango que el túnel?
Get-NetRoute -AddressFamily IPv4 | Select-Object DestinationPrefix # Windows ip -4 route # Linux
Si aparece algo entre 100.64.x.x y 100.127.x.x —lo usan algunas VPN
corporativas— avísanos antes de instalar: choca con el rango del túnel y se ajusta de
nuestro lado, sin tocar tu servidor. No es frecuente, pero descubrirlo después cuesta una
tarde.
7 · Probar el acceso al ERP antes de tocar la app
Esto valida de una sola vez la dirección, el puerto, la base, el usuario y su clave. Si responde bien aquí, la conexión en Aski va a entrar.
Odoo — devuelve un número (el id del usuario) si todo está bien, o false
si la base, el usuario o la clave no cuadran:
Invoke-RestMethod -Method Post -Uri "http://LA_IP_DEL_ERP:8069/jsonrpc" -ContentType "application/json" -Body '{"jsonrpc":"2.0","method":"call","params":{"service":"common","method":"authenticate","args":["LA_BASE","USUARIO","CLAVE_O_API_KEY",{}]},"id":1}'
Business One — devuelve un SessionId si todo está bien. Valida además que
el usuario tenga licencia asignada:
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Invoke-RestMethod -Method Post -Uri "https://LA_IP_DEL_ERP:50000/b1s/v1/Login" -ContentType "application/json" -Body '{"CompanyDB":"SBO_MiEmpresa","UserName":"USUARIO","Password":"CLAVE"}'
El Service Layer de Business One siempre es HTTPS. Con http:// responde un
400 cuyo texto dice que se está hablando HTTP plano a un puerto SSL. La primera línea es para que
PowerShell acepte su certificado autofirmado, que es lo normal en una instalación on-premise; sin
ella falla con «no se puede establecer una relación de confianza SSL/TLS», que no es un problema
ni del ERP ni de Aski. En Odoo, en cambio, lo habitual dentro de la red es HTTP plano en el 8069.
Y al pegar cualquiera de los dos comandos, comprueba que la línea empieza por Invoke:
se pierde la primera letra más veces de lo que parece.
8 · El nombre de la base de datos
Odoo: aparece en la URL al entrar (?db=miempresa) y en el selector de bases
si el servidor tiene varias. Si solo hay una, suele poder dejarse vacío.
Business One: en el cliente, Seleccionar empresa, columna «Nombre de base de
datos». Se parece a SBO_MiEmpresa. No es el nombre comercial de la empresa: si
nos pasas ese, el login falla con un mensaje que habla de credenciales y se busca el problema
donde no está.
9 · Lo que suele faltar del lado del ERP
Odoo: la API Key del usuario, que se genera en su perfil → Seguridad de la cuenta → Nueva clave API, y se muestra una sola vez. Y que ese usuario tenga permiso de lectura en lo que se va a consultar: Aski ve exactamente lo que ve él.
Business One: una licencia asignada —la de tipo Indirect Access es la pensada para aplicaciones externas y la más económica, y se ve en Administración → Licencias → Gestión autorización, columna «Disponible»— y autorización de lectura en Interlocutores comerciales como mínimo: sin ese módulo la conexión no llega a guardarse.
Si algo no funciona
«La clave no es válida» al ejecutar el comando
Las claves sirven una sola vez y caducan. Si ya la usaste o pasó el plazo, pide otra: se genera al momento.
Instalé todo y Aski dice que no alcanza el ERP
- Comprueba que el ERP responde desde la máquina donde instalaste Tailscale, en esa misma dirección y puerto. Si desde ahí no responde, por el túnel tampoco.
- Si el nodo está en otra máquina (opción B): avisa, falta habilitar el puente.
- En Windows: comprueba que el comando llevaba
--unattended. - Revisa que la URL lleve el puerto y que sea una IP, no un nombre.
No me deja guardar: dice que la dirección no es válida
Falta marcar la casilla «Mi ERP no es alcanzable desde internet».
Funcionaba y dejó de funcionar
Casi siempre es que la máquina del nodo se apagó. Enciéndela y se reconecta sola; no hay que reinstalar nada ni pedir otra clave.
«tailscale» no se reconoce como comando
O no está instalado, o la ventana de PowerShell estaba abierta desde antes de instalarlo y no ve el programa nuevo. Ciérrala y abre otra como administrador, o llámalo por su ruta completa:
& "C:\Program Files\Tailscale\tailscale.exe" up --authkey=LA_CLAVE --hostname=aski-tuempresa --unattended
Guardo la conexión y se queda cargando hasta que falla
Es el síntoma más común de la opción B, y tiene cuatro causas. Míralas en este orden, de la más frecuente a la menos:
- Falta habilitar el puente de nuestro lado. Avísanos: es un clic.
- Falta activar el reenvío en la máquina puente («el paso que falta»).
sysctl net.ipv4.ip_forwardtiene que decir= 1. Si dice= 0después de haberlo puesto, es que se escribió consysctl -wy se perdió en el último reinicio. - Alguien tocó el cortafuegos y borró las reglas de Tailscale. Es la causa típica de
que un túnel que llevaba semanas bien deje de funcionar de golpe, y la más desconcertante,
porque el nodo sigue apareciendo conectado. Se arregla con
sudo systemctl restart tailscaled. - El servidor del ERP está apagado o su servicio no está escuchando. La pista que lo
distingue de todo lo anterior: desde el propio puente,
curlal ERP tampoco responde.
«changing settings via 'tailscale up' requires mentioning all non-default flags»
Sale al añadir la subred a un nodo que ya estaba conectado, y no es un fallo: Tailscale avisa de que le estás omitiendo un ajuste que ya tenía —el nombre— y se detiene antes de borrártelo. El propio mensaje imprime el comando corregido al final:
sudo tailscale up --advertise-routes=192.168.1.0/24 --hostname=aski-tuempresa
Si sale bien no imprime nada, salvo un aviso sobre IPv6 que puedes ignorar.
Funcionaba, alguien tocó el cortafuegos y se cayó
Recargar o reconfigurar el cortafuegos borra las reglas internas de Tailscale. Se repone con un comando, sin reinstalar nada ni pedir otra clave:
sudo systemctl restart tailscaled
Si el puente llevaba la regla de tamaño de paquete y no estaba guardada como permanente, vuelve a ponerla también.
Business One: «rechazó el login» o «revisa la URL y las credenciales»
- La URL lleva
https://y el puerto:https://IP:50000/b1s/v1. - La Company DB es el nombre de la base, no el de la empresa.
- El usuario necesita licencia asignada y lectura en Interlocutores comerciales — sin ese módulo la conexión no se guarda, y el mensaje habla de credenciales.
- El comando del punto 7 de las comprobaciones distingue los tres casos en 15 segundos.