mit*_*man 3 networking tcp socat unix-sockets
我有两个进程(客户端和服务器)使用 Unix socket 相互通信/tmp/tm.ipc
。两个进程(客户端和服务器)都不支持 TCP。
客户端 -> /tmp/tm.ipc
-> 服务器
现在,我想将两个进程分开,以便在同一子网中运行的两台不同机器上运行。因此,我想在两者之间构建某种 TCP 桥。
客户端 -> /tmp/tm-machine1.ipc
-> TCP 端口 15432 -> /tmp/tm-tm-machine2.ipc
-> 服务器
我正在考虑使用 Socat,但这看起来只涵盖了服务器侦听部分。
socat -d -d TCP4-LISTEN:15432,fork UNIX-CONNECT:/tmp/tm.ipc
Run Code Online (Sandbox Code Playgroud)
现在我想将客户端的 Unix 套接字连接到该端口。我怎样才能做到这一点?
OpenSSH的足够高版本(OpenSSH的6.7 / 6.7p1(2014年10月6日)或更高版本)可以做到这一点,如果SSH是由客户端发起的服务器系统中的一个能写出像
ssh -L /path/to/client.sock:/path/to/server.sock serverhost
Run Code Online (Sandbox Code Playgroud)
然后客户端将连接到/path/to/client.sock
,服务器将在/path/to/server.sock
. 您可能还需要设置-o StreamLocalBindUnlink=yes
,请参阅ssh_config(5)
。
(并且请不要使用/tmp
;使用不当/tmp
会导致本地安全漏洞或拒绝服务或……)