FreeBSD防火墙后面的IP电话 - IPFilter

时间:2011-11-18 15:12:55

标签: firewall sip freebsd squid nat

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

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

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

这是我目前的系统配置,有些不对劲,但我不知道是什么

接口: rl0 =局域网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.rules:

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.rules:

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服务器。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您的第一个选项应该是SIP Express路由器或SER。 The website将是一个很好的起点。如果失败了(你出于某些原因无法安装它),你可能不得不去上学。

您可能遇到的问题是电话的传入连接来自网络外部,因此没有为传入流量“保存”的端口。您可以通过定期注册来克服其中的一些问题,或者您可以设置防火墙和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地址重定向。