我有服务器Linux Ubuntu 12.04。它有两个子网 -192.168.0.1(eth0)和192.168.1.1 (eth1)。
有一个Asterisk 服务器(IP PBX)连接到第一个子网,假设它有 IP 地址192.168.0.28。
我需要 SIP来自 192.168.1.x 的客户端子网能够连接到该 Astersik 服务器。
我的想法是让所有要连接的 SIP 客户端网关服务器(位于两个子网中的服务器,即192.168.1.1其子网)并使其端口转发所有 UDP 5060连接到192.168.0.28(IP BPX)。
这是我的想法:
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -d 192.168.0.28 -p udp --dport 5060 -m state \
--state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p udp --dport 5060 -j DNAT \
--to-destination 192.168.0.28
iptables -t nat -A POSTROUTING -p tcp --dport 5060 -d 192.168.0.28 \
-o eth0 -j MASQUERADE
但是来自 192.168.1.x 的 SIP 客户端(软件电话)无法注册。我尝试过端口转发 http 端口来测试它:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -d 192.168.0.28 -p tcp --dport 80 -m state \
--state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT \
--to-destination 192.168.0.28:80
iptables -t nat -A POSTROUTING -p tcp --dport 80 -d 192.168.0.28 \
-o eth0 -j MASQUERADE
并且它工作正常,但是对于第一个带有 UDP 转发的功能,我无法让客户端在 Asterisk 服务器上注册。
更新:
正如建议的那样评论我需要使用route
而不是iptables
所以我猜命令会是这样的:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.0.28 dev eth0
但那并没有真正起作用。另外,我不想将整个 IP PBX 主机暴露给 192.168.1.x 网络,只为 SIP 客户端(软件电话)开放 5060 端口。
答案1
为什么要使用 NAT?在这种情况下,您可以直接在两个 LAN 之间进行路由,而无需进行任何端口转发。
无论如何,如果你真的想要使用 NAT,端口 5060 就足够了如果您的客户端是标准 SIP 客户端。如果它们是混合/自定义协议客户端(例如:Cisco H323 和/或 SCTP/SCCP 实现),您将需要打开其他端口范围。
编辑:您添加的路由是错误的。让我说明一下您的网络设置:
局域网 192.168.0.x/24 局域网 192.168.1.x/24 ---------------- ---------------- | | | | | | | | | | | | | | | | | | | | PBX | UBUNTU 服务器 | SIP 客户端 192.168.0.28 192.168.0.1 192.168.1.1 例如:192.168.1.10 | | |________________|
根据您的描述,Ubuntu 服务器是多宿主主机 - 它在 LAN 192.168.0.x 上有一个接口,在 LAN 192.168.1.x 上有一个接口。为了在网络之间路由,您需要宣布对客户Ubuntu 机器作为网关对于另一个 LAN。假设所有涉及的机器都是 Linux 客户端,您需要:
- 在每台 192.168.0.x 机器上执行
route add -net 192.168.1.0/24 gw 192.168.0.1
- 在每台 192.168.1.x 机器上执行
route add -net 192.168.0.x/24 gw 192.168.1.1
- 在 Ubuntu 服务器上,你可以设置防火墙规则,只转发/路由 192.168.0.28 发出的数据包
iptables -A FORWARD -d 192.168.0.28 -j ACCEPT
,并iptables -A FORWARD -s 192.168.0.28 -j ACCEPT
请注意,上述步骤仅用于说明目的,不是最佳实践:例如,您可以(并且应该)在 LAN 各自的网关上插入正确的路由,而不是在每个客户端内部发出特定的路由命令。
然而,这只是最基本的社交层面——如果你问的是这个,你真的需要记录路由/NAT 是什么以及如何有效地使用它们。