Cómo exponer un socket de dominio UNIX directamente sobre TCP

13

Me gustaría tener un socket de dominio UNIX, digamos /var/program/program.cmd por ejemplo, expuesto a través de TCP, digamos en el puerto 12345. También me gustaría que esto se ejecute a tiempo completo en segundo plano.

¿Cuál es la mejor manera de hacer esto? Si es relevante, el sistema ejecuta Ubuntu 12.04.2.

Además, con la solución propuesta, ¿sobrevivirá al socket de dominio que se elimina y se recrea?

EDITAR

Aquí está el resultado de la respuesta aceptada en forma de script de inicio: https://github.com/Wirehive/haproxy-remote

SimonJGreen
fuente

Respuestas:

18

Puede usar socatpara exportar su socket Unix como socket TCP. Aquí está el comando para hacerlo:

socat TCP-LISTEN:12345 UNIX-CONNECT:/var/program/program.cmd

Esto creará un socket TCP escuchando en el puerto 12345 que se conectará al socket unix mencionado de su programa.

Para el problema de eliminación, no lo probé yo mismo. Puedes verificarlo y contarnos al respecto :)

Nota: es posible que no encuentre instalado socat, solo necesita escribir: apt-get install socatpara instalarlo.

Khaled
fuente
1
Gracias que prácticamente funcionó, aunque salió después de cada comunicación. Después de jugar que estoy teniendo éxito con buena: socat TCP-LISTEN:12345,reuseaddr,fork,su=haproxy UNIX-CLIENT:/var/program/program.cmd. La única pregunta es cómo lo ejecuto en segundo plano.
SimonJGreen
@SimonJGreen: Dado que este no es un comando interactivo que requiere entrada, puede intentar agregarlo &al final del comando.
Khaled
OK, corrí con la sugerencia y escribí un script de inicio para manejarlo. ¡Aquí está el resultado para cualquier persona interesada! github.com/Wirehive/haproxy-remote
SimonJGreen
@alexandermensa cuidado de elaborar?
Eduardo Bezerra