Linux 使用端口转发收听对话

Linux 使用端口转发收听对话,linux,iptables,portforwarding,pjsip,netcat,Linux,Iptables,Portforwarding,Pjsip,Netcat,我已经能够使用SIP客户端从一台linux计算机呼叫另一台。如果您没有听说过这个用户代理,那么解释它的功能就很容易了。它使用每个linux的IP和端口号创建一个唯一的ID,然后可以调用这个特定的ID。 现在我还没有彻底研究端口转发,但我想它所做的是将其中的任何数据转发到另一个“端口”或“IP和端口”。 所以我想,如果我的呼叫应用程序使用端口和IP发送和接收语音,我应该能够将这些特定端口转发到第二个或第三个端口(或IP和端口),并在第三台计算机上收听对话 以下是我所做的: 假设linux一台机器具

我已经能够使用SIP客户端从一台linux计算机呼叫另一台。如果您没有听说过这个用户代理,那么解释它的功能就很容易了。它使用每个linux的IP和端口号创建一个唯一的ID,然后可以调用这个特定的ID。 现在我还没有彻底研究端口转发,但我想它所做的是将其中的任何数据转发到另一个“端口”或“IP和端口”。 所以我想,如果我的呼叫应用程序使用端口和IP发送和接收语音,我应该能够将这些特定端口转发到第二个或第三个端口(或IP和端口),并在第三台计算机上收听对话

以下是我所做的:

假设linux一台机器具有以下标识信息:
IP:192.168.1.11
UDP端口#:1111

第二台Linux机器,LinuxB具有以下标识:
IP:192.168.1.22
UDP端口#:2222

如果我使用IPtables执行以下操作,我应该能够听到在linux Blinux C上接收到的对话的那一方(具有以下标识信息:
IP:192.168.1.33
UDP端口#:3333)

在Linux B上运行此命令:

iptables -t nat -A PREROUTING -p udp --dport 2222 -j DNAT
--to-destination 192.168.1.33:3333    //forward port 2222 to Linux C on port 3333
aplay | nc -l -u 3333     //listen on the specified UDP port 
在linux C上运行此命令:

iptables -t nat -A PREROUTING -p udp --dport 2222 -j DNAT
--to-destination 192.168.1.33:3333    //forward port 2222 to Linux C on port 3333
aplay | nc -l -u 3333     //listen on the specified UDP port 
但是我在LinuxC上什么也看不到。
有人能告诉我为什么这不起作用吗?也欢迎使用其他策略来实现这一点。

首先,我们可以看到两个可能的小问题:

  • 在LinuxB中:在Forward链中还应该有一个ACCEPT策略
  • 在Linux C中:您应该在侦听命令行上反转
    aplay
    nc
    顺序:
    nc-l-u3333 | aplay

希望这有助于

在linux B(/proc/sys/net/ipv4/ip_forward“1”)上激活路由,因为iptable链的策略接受。More over SIP是一个复杂的协议,控制连接与数据流不同,NAT穿越有很多机制。。。没那么容易。开发和利用现有流量的总体目标是什么?转发将只是转发它(因此,如果你听soembody,他将不会得到它的语音数据…)。。。