Distinguir “rechazado” de “nunca alcanzado”
bound: 0 por sí solo no puede distinguir “nadie conectado ahora mismo” de “nunca se abrió un socket”.
last_error es lo que los separa, y se limpia en cuanto un bind tiene éxito.
Un proveedor no hace bind
host,port,usernameypasswordson correctos.connections.transceivers,connections.transmittersoconnections.receiverses mayor que cero. Un proveedor con los tres a cero no hace bind y no reporta ningún error.- Los ajustes TLS coinciden con lo que requiere el proveedor.
- El firewall permite tráfico saliente hacia el proveedor.
- El proveedor ha incluido tu IP de origen en su lista de permitidas, si lo requiere.
El bind de un cliente es rechazado
- La credencial es
type: SMPP. Una credencial HTTP no puede hacer bind, y el rechazo no lo dice. - El cliente está usando el
systemIdypasswordconfigurados. - No se excede ningún límite de conexión:
srv.maxConnections,srv.maxConnectionsPerIP,conf.maxConnectionsPerUser.default, o el límite por usuario. - Si
allowedIpsestá configurado, la IP de origen del bind está en él.
El listener nunca abrió
Diferente a todos los casos anteriores: no es un bind rechazado, sino un socket que nunca se creó. La pasarela se ejecuta normalmente. Enrutamiento, tarificación, facturación y conexiones a proveedores todo activo, systemd reportandoactive. Mientras ningún cliente puede conectarse.
La pasarela no sale cuando un listener no puede tomar su puerto. Eso es deliberado: un puerto ocupado
no debe sacar de servicio toda una pasarela, y los listeners TLS o proxy a menudo no están configurados en absoluto.
Así que la evidencia está en tres sitios en lugar de en el código de salida.
En /ops/health:
La causa habitual son dos pasarelas
O bien una segunda instancia configurada en el mismo puerto, o la misma instancia ejecutándose dos veces bajo dos nombres de unidad. Que es lo que unupdate con el --service-name equivocado solía producir.
1
Lista cada unidad
systemctl list-units 'fireflo*' --all2
Compara el PID gestionado con el que tiene el puerto
systemctl show <unit> -p MainPID. Una JVM huérfana reteniendo el puerto es una que systemd ya no
gestiona.3
Detén el servicio, mata el huérfano por PID, arráncalo de nuevo
Por PID, nunca por patrón. Puede haber otras JVMs en el host, y un kill por patrón ha eliminado
servicios no relacionados antes.
Relacionado
Servidores
Ajustes de listener y qué hace cada uno.
Proveedores
Conexiones salientes, TPS y retención.