【发布时间】:2014-01-03 18:07:17
【问题描述】:
我已经能够使用 SIP 客户端 Pjsua 从一台 Linux 计算机向另一台计算机拨打电话。如果你没有听说过这个用户代理,解释它的功能很容易。它使用每个 linux 的 IP 和端口号来创建一个唯一的 ID,然后调用这个特定的 ID 是可能的。 现在我还没有那么彻底地研究端口转发,但我想它所做的是将其中的任何数据转发到另一个“端口”或“IP 和端口”。 所以我想如果我的调用应用程序使用端口和 IP 来发送和接收语音,我应该能够将这些特定端口转发到第二个或第三个端口(或 IP 和端口)并在第三台计算机上收听对话。
这就是我所做的:
假设 linux A 机器 具有以下标识信息:IP:192.168.1.11UDP port# : 1111
第二台Linux机器,Linux B有如下标识:IP:192.168.1.22UDP port# : 2222
如果我使用 IPtables 执行以下操作,我应该能够在 Linux C 上听到在 linux B 上接收到的对话内容strong>(带有以下标识信息:IP:192.168.1.33UDP port# : 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
在 linux C 上运行:
aplay | nc -l -u 3333 //listen on the specified UDP port
但我在 linux C 上什么都没有。 谁能告诉我为什么这不起作用?也欢迎使用其他策略。
【问题讨论】:
-
路由是否在 linux B ( /proc/sys/net/ipv4/ip_forward '1' ) 上激活,作为 iptable 链 FORDWARD 策略接受。更多的 SIP 是一个复杂的协议,控制连接与数据流不同,并且有许多 NAT 穿越机制......不是那么容易。总体目标是什么,挖掘和现有流量? forwarding 只会转发它(因此如果你听某人他不会得到它的语音数据......)......
标签: linux iptables portforwarding pjsip netcat