当前位置: 首页 >> 榆树网-杂项,榆树网-网络 >> 文章正文

为何我的LinkSys SPA1001无法注册

环境:Freeiris2 + Linksys SPA1001 + Linux + iptables + ip_nat_sip

现象:服务器启动后(iptables也启动了),后打开Linksys SPA1001无法注册(在此之前SPA1001曾经注册到服务器上),相同的帐号,用X-lite可以注册。

解决办法:

1、SPA1001启动后,停止iptables,等待一段时间后重新启动iptables即可。

2、Linux的iptables启动的时候,不加载“ip_nat_sip”模块,有可能“ip_conntrack_sip”也不要加载。

3、启动Asterisk之前删除“/var/lib/asterisk/astdb”文件。

以上方法任选其一即可。

经过分析发现,其实就是被Asterisk、SPA1001、ip_nat_sip和UDP给愚弄了。

主要问题:

SPA 1001:该死的SPA1001去连接SIP服务器的时候,居然是用5060这个源端口。

Asterisk:会产生/var/lib/asterisk/astdb文件,用于记录所有SIP client的IP地址和端口号,下次重新启动后,会主动对端口为5060的IP地址发送一个OPTIONS…的报文。

UDP:UDP报文是面向无连接的,所以ip_nat_sip去检查连接状态的时候,就会通过源、目的IP地址和端口来确定是否同一个连接。

/var/lib/asterisk/astdb文件的内容:

# strings astdb
/SIP/Registry/8001
192.168.1.1:5060:300:8001:sip:8001@192.168.1.1:5060

Asterisk启动后,SPA1001尚未启动前/proc/net/ip_conntrack里面的相关内容:

udp      17 3590 src=192.168.1.254 dst=192.168.1.1 sport=5060 dport=5060 packets=25 bytes=14500 [UNREPLIED] src=192.168.1.1 dst=192.168.1.254 sport=5060 dport=5060 packets=0 bytes=0 mark=0 secmark=0 use=1

给SPA1001加电后/proc/net/ip_conntrack里面的相关内容:

udp      17 3596 src=192.168.1.254 dst=192.168.1.1 sport=5060 dport=5060 packets=31 bytes=17980 src=192.168.1.1 dst=192.168.1.254 sport=5060 dport=5060 packets=5 bytes=2477 [ASSURED] mark=0 secmark=0 use=1

系统居然把SPA1001注册的报文与之前Asterisk发送的那个OPTIONS报文给关联上了,导致Asterisk一直无法收到注册请求。

相关文章

发表评论