我需要在服务器上的两个networking端口之间build立一个桥,所以到达端口A的所有东西都到达端口B,到达端口B的所有东西都到达端口A.
我有两个设备(dA和dB),位于不同networking中的不同NAT后面,都可以进行任何出站连接,但所有入站连接都被阻止。 所以他们不能直接连接。 在这些NAT上configuration任何端口转发是不可能的。
所以我会把一个服务器S,可以监听所有的networking端口。 它接受端口A和端口B的连接,并在此之间build立桥接,所以stream量从Astream向B,就好像它们直接连接一样。
我想归档的最终结果是:
有没有办法使用Linux服务器? 服务器运行基于Debian wheezy的Linux。
使用命令/命令行工具可以很好地完成任务,所以如果需要,可以在不编辑任何文件(使用脚本)的情况下更改端口。
工具socat以简单的方式做我所需要的。
socat TCP4-LISTEN:5060,reuseaddr TCP4-LISTEN:5061,reuseaddr
它阻止了terminal,但这是我能find的最好的解决scheme。
你可以用xinetd使用它的redirect指令来做到这一点。 我个人更喜欢使用socat,因为xinetd的configuration是显而易见的(使用Puppet或Chef更容易pipe理),并且会在启动时自动启动。
你似乎在谈论反向代理。 有很多有用的守护进程(特别是SOCKS代理),但你寻找一个命令行解决scheme。
这可以通过ssh端口转发来实现。 您可以转发一个端口:
user@dA:~$ ssh -R :1111:localhost:1111 [email protected]
它将在server.com上打开端口1111。 在接受该端口上的连接之后,ssh将把这个请求转发给dA,并在dA上localhost:1111连接到localhost:1111通过现有的ssh通道转发所有stream量。
所以当您的ssh会话启动并运行时,每个连接到server.com:1111的主机都将有效地连接dA:1111
请注意起始分号。 这意味着server.com应该接受外部连接(默认情况下它只会监听来自本地主机的连接)。
您还需要在server.com上的ssh config中启用GatewayPorts选项。 否则sshd将不允许接受外部连接。
你为什么不使用iptables?
iptables -t nat -I PREROUTING --src $SRC_IP_MASK --dst $DST_IP -p tcp --dport $portNumber -j REDIRECT --to-ports $rediectPort