0

我已经使用 ipf+ipnat 在 FreeBSD 8.2 上安装了防火墙,还使用 ​​SQUID 2.7 作为 Web 代理

所有用户都可以正常访问互联网,但我的大问题是 IP 电话,他们尝试访问互联网上的 sip 服务器(外部提供商服务),他们无法建立连接。

用于 sip 服务的端口是: SIP:端口 5060-5070 UDP/TCP RTP(语音)流量:端口 10000-20000 UDP

这是我目前的系统配置,有问题,但我不知道是什么

接口: rl0 = LAN 办公室 192.168.10.x bge0 = WAN 互联网连接

rc.conf:

squid_enable="YES"
ipfilter_enable="YES"
ipfilter_rules="/etc/ipf.rules"
ipmon_enable="YES"
ipmon_flags="-Ds"
gateway_enable="YES"
ipnat_enable="YES"
ipnat_rules="/etc/ipnat.rules"

ipf 规则:

pass out quick on rl0 all
pass in quick on rl0 all

pass out quick on bge0 all
pass in quick on bge0 all

pass in quick on lo0 all
pass out quick on lo0 all

我打开了两个接口的所有流量(暂时),但我没有得到一个好的结果,所有的 ip 电话都不能工作

ipnat 规则:

rdr rl0 0.0.0.0/0 port 80 -> 127.0.0.1 port 8080 tcp # transparent proxy
rdr bge0 0.0.0.0/0 port 22 -> 127.0.0.1 port 22 tcp # ssh server
map bge0 192.168.10.0/16 -> 0.0.0.0/32 proxy port ftp ftp/tcp
map bge0 192.168.10.0/16 -> 0.0.0.0/32 portmap tcp/udp auto
map bge0 192.168.10.0/16 -> 0.0.0.0/32

所有 ip 电话和计算机都有静态 ip、freebsd 服务器作为网关和一个有效的 DNS 服务器。

4

2 回答 2

2

NAT 后面的 SIP 电话需要 STUN 服务器才能工作。

(要么使用您的 sip 提供商提供的,要么尝试从端口集合中获取 net/stund)

如果您只有一部手机,您也可以尝试端口转发:

#SIP
#rdr pass on $ext_if proto tcp from any to $ext_addr port = 5060 -> \
    $IP_PHONE port 5060
#RTP
#rdr pass on $ext_if proto tcp from any to $ext_addr port = 5004 -> \
#        $IP_PHONE port 5004
#stun
#rdr pass on $ext_if proto tcp from any to $ext_addr port = 10000 -> \
 #        $IP_PHONE port 10000
于 2011-11-21T16:19:43.463 回答
1

您的第一个选项应该是 SIP Express 路由器或 SER。 该网站将是一个很好的起点。如果做不到这一点(由于某种原因你不能安装它),你可能不得不去老派。

您可能遇到的问题是电话的传入连接来自网络外部,因此没有为传入流量“保存”端口。您可以通过定期注册来克服其中的一些问题,或者您可以设置防火墙和 NAT 配置以将流量从您的提供商传递到特定电话,但这只会让您只有一部电话进行连接。您需要配置您的上游提供商以通过不同的端口发送每部电话的连接,并将该端口绑定到特定的 IP 和端口。例如:

rdr rtk0 123.123.123.123/32 port 5061 -> 192.168.100.11 port 5061 udp
rdr rtk0 123.123.123.123/32 port 5062 -> 192.168.100.12 port 5062 udp
etc. 

其中 123.123.123.123 是您的提供商的 SIP 主机地址。配置您的电话,以便它们在端口 5060 + 一些偏移量上进行通信。

即使这对您的连接有所帮助,您仍然可能会遇到 RTP 问题。STUN 会有所帮助,但您可能需要限制您的 SIP 电话,以便它们的 RTP 端口是唯一的(这样来自一部电话的流量不会突然开始出现在另一部电话上)。SIP 和 RTP 的端口范围非常大——您可以将手机限制为,例如,每部手机 10 个,并且可以轻松覆盖很多领域。看起来像这样:

rdr rtk0 123.123.123.123/32 port 10000-10009 -> 192.168.100.11 port 10000 udp
rdr rtk0 123.123.123.123/32 port 10010-10019 -> 192.168.100.12 port 10010 udp

将您的手机 RTP 范围设置为其独特的范围,您应该会比较顺利。

请注意,在 RDR 中使用 SIP 服务器的地址比使用 0.0.0.0/0 地址重定向的风险要小得多。

于 2012-03-07T22:54:29.680 回答