1. Cómo funciona la impresión
Cada PC del restaurante corre un servicio local llamado PrinterService (SamRestPrintBridgeWin), que expone dos puertos:
| Puerto | Protocolo | Uso |
|---|---|---|
18181 | HTTP | Siempre disponible. Usado para llamadas locales (misma PC) o entre PCs si el POS se sirve por HTTP. |
18182 | HTTPS | Solo activo si hay un certificado configurado. Necesario cuando el POS se sirve por HTTPS y se llama a otra PC (no localhost). |
El sistema decide automáticamente a qué impresora enviar cada ítem de la comanda según la configuración de Dispositivos y el área/zona del producto — esto es independiente de desde qué PC se tomó la orden. Lo único que hay que configurar bien es la dirección (servicioImpresion) que le indica al sistema dónde vive físicamente cada impresora.
2. Instalación base del PrinterService Base — aplica a toda PC
Estos son los pasos estándar para instalar el PrinterService como servicio de Windows en cualquier PC, independientemente del escenario de red que se use después (secciones 4 a 8). Ejecutar todo en PowerShell/CMD como Administrador.
2.1 Prerrequisito: .NET 10 Hosting Bundle
Antes de instalar el servicio, debe estar instalado el .NET 10 Hosting Bundle en la PC (incluye el runtime de ASP.NET Core necesario para que SamRestPrintBridgeWin.exe pueda ejecutarse). Descargar desde el sitio oficial de .NET e instalar antes de continuar.
Debes descargar el Printer Service en la PC desde esta ruta Printer Service
2.2 Copiar los archivos del servicio
Copiar el ejecutable y sus dependencias a una carpeta fija en la PC, ej. C:\printerservice\.
2.3 Crear el servicio de Windows
sc create SamRestPrintBridgeWin binPath= "C:\printerservice\SamRestPrintBridgeWin.exe" start= auto displayname= "Print Bridge Service"
2.4 Configurar reinicio automático ante fallas
Para que el servicio se reinicie solo si llega a caerse inesperadamente:
sc failure SamRestPrintBridgeWin reset= 0 actions= restart/60000/restart/60000/restart/60000
2.5 Generar certificado autofirmado (punto de partida)
Este certificado autofirmado habilita el puerto 18182 (HTTPS) de forma básica. Es válido como punto de partida rápido, aunque el navegador mostrará advertencia de "certificado no confiable" al llamarlo desde otra PC — si eso es un problema para el cliente, revisar las alternativas de certificado confiado en las secciones 7 y 8.
$cert = New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "Cert:\CurrentUser\My"
$password = ConvertTo-SecureString -String "123456" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "C:\printerservice\certificate.pfx" -Password $password
123456 en instalaciones reales, y guardarla junto con la configuración del cliente en un lugar seguro (no en texto plano compartido).
2.6 Abrir los puertos en el firewall de Windows
New-NetFirewallRule -DisplayName "PrintService Rest" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 18181
New-NetFirewallRule -DisplayName "PrintService Rest" -Direction Outbound -Action Allow -Protocol TCP -LocalPort 18181
New-NetFirewallRule -DisplayName "PrintService Rest 2" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 18182
New-NetFirewallRule -DisplayName "PrintService Rest 2" -Direction Outbound -Action Allow -Protocol TCP -LocalPort 18182
-RemoteAddress <ip-o-rango> a cada regla para reducir superficie de exposición.
2.7 Iniciar el servicio
sc start SamRestPrintBridgeWin
2.8 Detener el servicio
sc stop SamRestPrintBridgeWin
2.9 Reinstalar el servicio (ej. tras actualizar el ejecutable)
sc stop SamRestPrintBridgeWin
sc delete SamRestPrintBridgeWin
Luego repetir desde el paso 2.3 (sc create) para volver a registrarlo.
3. Diagnóstico de problemas comunes
Error: ERR_CONNECTION_REFUSED en 18181 o 18182
Significa que el navegador no pudo conectar a ese puerto en esa IP. Causas típicas:
- El servicio
SamRestPrintBridgeWinno está corriendo en esa PC (revisar consc query SamRestPrintBridgeWin). - Se está intentando usar 18182 (HTTPS) pero esa PC no tiene certificado configurado (por eso ese puerto no escucha).
- La PC de destino no es alcanzable por red (VLAN separada, firewall, IP incorrecta).
Error: "No se pudo abrir la impresora 'NOMBRE'"
Este error no es de red ni del bridge — es de Windows. Significa que el nombre de impresora configurado en el Dispositivo (ej. TICKETS) no coincide exactamente con el nombre real de la impresora instalada en esa PC. Verificar en Configuración → Impresoras y escáneres de Windows el nombre exacto y compararlo con el campo configurado en el sistema.
4. Escenario: 1 sola PC
Es el caso más simple: el POS y el PrinterService corren en la misma máquina. Todas las llamadas van a 127.0.0.1:18181 (o 18182 si el POS es HTTPS). No requiere ninguna configuración de red adicional — 127.0.0.1/localhost tiene una excepción especial en los navegadores que permite llamadas HTTP desde una página HTTPS sin bloqueo de "mixed content".
5. Escenario: varias PCs en la misma red local
Si las PCs están en la misma red/subred y sí se ven entre sí, la configuración es directa:
- Asignar IP fija a cada PC con impresora conectada (evitar DHCP dinámico, para que la IP no cambie).
- En cada Dispositivo del sistema, configurar
servicioImpresioncon la IP LAN de la PC dueña de esa impresora, ej.http://192.168.1.15:18181. - Verificar que el firewall de Windows de cada PC permita conexiones entrantes al puerto 18181 (y 18182 si aplica) desde la red local — ver sección 2.6.
- Probar desde el navegador de otra PC:
http://192.168.1.15:18181/healthdebe responder{"ok": true, ...}.
6. Escenario: PCs en redes o VLANs separadas Avanzado
Este es el caso de restaurantes con varias zonas (ej. sushi, terraza, bar), cada una con su propia PC y su propia VLAN por razones de seguridad, donde las PCs no se ven entre sí a nivel de red.
Sin conectividad de red entre las PCs, cualquier comanda que deba imprimirse en la zona de otra PC queda atrapada reintentando en la cola local (cada 8 segundos) sin éxito, porque no hay ruta de red — no es un problema transitorio.
7. Solución: Tailscale (VPN mesh) Recomendado
Tailscale crea una red privada virtual entre los dispositivos que instales, sin importar en qué VLAN física estén — solo necesitan salida a internet (no requiere abrir puertos entrantes, usa NAT traversal). Además incluye una función integrada para emitir certificados HTTPS reales (Let's Encrypt) por dispositivo, sin necesidad de dominio propio.
7.1 Instalación básica
- Crear una cuenta en Tailscale (el plan gratuito alcanza para pocos dispositivos por cliente).
- Instalar Tailscale en cada PC que necesite participar (con o sin PrinterService) y unirlas a la misma tailnet.
- En el panel de administración, activar MagicDNS y HTTPS Certificates (Settings → DNS / Settings → HTTPS Certificates).
- Configurar Tailscale para arrancar sin sesión de usuario ("Run unattended" en Windows) para que sobreviva a reinicios.
7.2 Generar el certificado
En la PC que tiene el PrinterService, desde una consola:
tailscale cert nombre-pc.tu-tailnet.ts.net
Esto genera un .crt/.key válido y confiado por cualquier navegador, sin advertencias. Se convierte a formato .pfx (con openssl pkcs12 o similar) para usarlo en el bridge:
openssl pkcs12 -export -out bridge.pfx -inkey nombre-pc.tu-tailnet.ts.net.key -in nombre-pc.tu-tailnet.ts.net.crt
7.3 Configurar el bridge
En el appsettings.json de SamRestPrintBridgeWin (mismo archivo de configuración usado en la instalación base, sección 2):
{
"CertificadoConfig": {
"Path": "C:\\printerservice\\certs\\bridge.pfx",
"Password": "tu-contraseña"
}
}
Reiniciar el servicio (sección 2.7/2.8) para que tome el certificado nuevo.
7.4 Configurar los Dispositivos en el sistema
En cada Dispositivo que dependa de una impresora en otra PC, configurar servicioImpresion con el nombre MagicDNS de la PC dueña:
https://nombre-pc.tu-tailnet.ts.net:18182
7.5 Restringir el acceso (ACLs)
En el panel de Tailscale, definir reglas de ACL que permitan tráfico solo al puerto 18182 (y 18181 si se usa) entre las PCs específicas que lo necesiten — mantiene el mismo nivel de aislamiento por seguridad que ya tenían entre VLANs, solo habilita ese flujo puntual y auditado.
7.1 Variante: un solo PrinterService recibiendo desde varias PCs
Si el restaurante tiene una sola PC con impresoras conectadas y varias PCs de POS que solo envían trabajos de impresión (sin impresora propia), la configuración se simplifica:
| ¿Quién necesita qué? | PC con PrinterService (servidor) | PCs que solo imprimen hacia ella (clientes) |
|---|---|---|
| Instalar Tailscale | Sí | Sí — todas deben estar en la misma tailnet para poder alcanzar la IP virtual del servidor |
Certificado (tailscale cert) | Sí, uno solo | No necesitan certificado propio, solo confían en el del servidor automáticamente |
Configurar CertificadoConfig | Sí | No aplica |
Configurar servicioImpresion en Dispositivos | No aplica | Sí, apuntando a https://pc-servidor.tailnet.ts.net:18182 |
8. Alternativa: Let's Encrypt con dominio propio + win-acme Sin dependencia de terceros
Si prefieren no depender de Tailscale solo para el certificado, y ya tienen un dominio propio (ej. midominio.com), pueden emitir un certificado real de Let's Encrypt para un subdominio que apunte a la PC — aunque esa PC nunca sea alcanzable públicamente desde internet.
8.1 Cómo funciona
- Crear un subdominio en el proveedor DNS, ej.
pc-impresora.midominio.com(no necesita resolver a una IP pública real). - Validar el dominio con el reto DNS-01 — solo requiere crear un registro TXT temporal en la zona DNS, no requiere abrir el puerto 80/443 a internet.
- En la PC local, agregar una entrada en
C:\Windows\System32\drivers\etc\hostsque resuelva ese subdominio a la IP local/privada de la PC. - El navegador valida el certificado contra la cadena de Let's Encrypt (ya confiada de fábrica) — no le importa que la IP real sea privada, solo verifica nombre + cadena + vigencia.
8.2 Instalar win-acme
Descargar la versión "pluggable" desde github.com/win-acme/win-acme y descomprimir en una carpeta fija, ej. C:\win-acme\. Es portable, no requiere instalación.
8.3 Conseguir credenciales de tu proveedor DNS
Necesitan un API token con permiso de editar registros DNS de la zona (Cloudflare, Route53, GoDaddy, etc.), según dónde esté alojado el dominio. Win-acme trae plugins para los proveedores más comunes.
8.4 Emitir el certificado (asistente interactivo)
Ejecutar wacs.exe como Administrador:
- Menú principal →
N(Create certificate, full options). - Tipo de target: manual input → escribir el hostname (ej.
pc-impresora.midominio.com). - Validación: elegir
DNS-01→ seleccionar el plugin del proveedor DNS → pegar el API token. - Store: elegir PFX file → indicar carpeta de salida y contraseña del PFX.
- Installation steps: agregar un paso Script (ver 8.6, es el paso crítico).
- Confirmar — win-acme valida el dominio, emite el certificado y genera el
.pfx.
8.5 Apuntar el bridge al certificado
{
"CertificadoConfig": {
"Path": "C:\\printerservice\\certs\\pc-impresora.midominio.com.pfx",
"Password": "la-contraseña-que-elegiste"
}
}
Reiniciar el servicio SamRestPrintBridgeWin (sección 2.7/2.8) una vez para que lo cargue.
8.6 El paso crítico: recargar el certificado tras cada renovación
.pfx en disco. Si no se reinicia el servicio tras cada renovación (cada ~90 días), seguirá sirviendo el certificado viejo hasta que expire.
En el paso "Installation" del asistente, configurar un plugin Script:
- Script a ejecutar:
powershell.exe - Parámetros:
-NoProfile -ExecutionPolicy Bypass -Command "Restart-Service -Name SamRestPrintBridgeWin -Force"
Win-acme ejecuta este script automáticamente cada vez que emite o renueva el certificado.
8.7 Renovación automática
Al terminar el asistente, win-acme crea por sí mismo una tarea programada en el Programador de Tareas de Windows que corre wacs.exe --renew una o dos veces al día. Esa tarea:
- Renueva automáticamente los certificados próximos a expirar (configurable, por defecto alrededor de 30 días antes del vencimiento).
- Usa las credenciales DNS guardadas cifradas — corre sin pedir nada por pantalla.
- Vuelve a ejecutar el paso Script (reinicio del servicio) en cada renovación.
Recomendable elegir, durante el asistente, que la tarea corra como cuenta SYSTEM, para asegurar permisos de reiniciar el servicio sin depender de una sesión de usuario activa.
8.8 Probar el flujo sin esperar 90 días
wacs.exe --renew --forcerenew
Fuerza una renovación inmediata, ejecuta de nuevo el script de reinicio, y permite confirmar que todo el pipeline funciona antes de confiar en el ciclo automático real.
9. Tabla comparativa de opciones de certificado
| Opción | Requiere dominio propio | Confianza del navegador | Resuelve conectividad entre VLANs | Renovación | Complejidad inicial |
|---|---|---|---|---|---|
| Autofirmado (instalación base, sección 2.5) | No | ❌ Advertencia en navegador | ❌ No | Manual | Baja |
mkcert |
No | ⚠️ Solo si se instala la CA local en cada PC | ❌ No | Larga duración, manual | Baja |
Tailscale (tailscale cert) |
No | ✅ Confiado (Let's Encrypt vía Tailscale) | ✅ Sí, incluida | Automática | Media |
| Let's Encrypt propio + win-acme | Sí | ✅ Confiado (Let's Encrypt real) | ❌ No (solo certificado, no conectividad) | Automática (con script de reinicio) | Media-alta |
10. Checklist final para el distribuidor
- Instalar el .NET 10 Hosting Bundle y realizar la instalación base del PrinterService (sección 2) en cada PC.
- ¿Todas las impresoras funcionan bien en localhost desde su propia PC? Si no, resolver primero el nombre de impresora/driver de Windows antes de tocar la red.
- ¿Todas las PCs están en la misma red? → usar configuración LAN directa (sección 5).
- ¿Hay VLANs/redes separadas por seguridad? → evaluar si se puede pedir una regla de firewall puntual (solo puerto 18181/18182 entre las IPs específicas) antes de sumar infraestructura nueva.
- Si no es posible abrir el firewall entre VLANs → instalar Tailscale en las PCs involucradas (sección 7).
- ¿El POS del cliente se sirve por HTTPS? → siempre se necesitará certificado válido en 18182 para llamadas entre PCs distintas (no aplica para localhost).
- Elegir certificado: Tailscale cert (más simple, recomendado) o Let's Encrypt propio + win-acme (si prefieren no depender de un tercero y ya tienen dominio).
- Configurar
servicioImpresionen cada Dispositivo con la dirección correcta (IP LAN, o nombre MagicDNS/dominio según la opción elegida). - Probar
/healthdesde el navegador de cada PC hacia cada destino antes de dar por cerrada la instalación. - Configurar el arranque automático de todos los servicios (PrinterService con
start= autoy reinicio ante fallas, Tailscale) para que sobrevivan a reinicios sin intervención manual.