Linux服务器上同一networking接口上的两个端口之间的桥接

我需要在服务器上的两个networking端口之间build立一个桥,所以到达端口A的所有东西都到达端口B,到达端口B的所有东西都到达端口A.

我有两个设备(dA和dB),位于不同networking中的不同NAT后面,都可以进行任何出站连接,但所有入站连接都被阻止。 所以他们不能直接连接。 在这些NAT上configuration任何端口转发是不可能的。

所以我会把一个服务器S,可以监听所有的networking端口。 它接受端口A和端口B的连接,并在此之间build立桥接,所以stream量从Astream向B,就好像它们直接连接一样。

我想归档的最终结果是:

  1. 设备dA通过端口A连接到服务器S. 它连接到server.com:A
  2. 设备dB通过端口B连接到服务器S.例如, 它连接到server.com:B
  3. dA通过S与dB进行会话

有没有办法使用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