FreeSWITCH NAT略论

FreeSWITCH NAT太复杂了,能力有限,尽量讲我知道的

  • RTP NAT

一般要修改sip_profile的ext-rtp-ip

但有时还根据实际需求修改localnet.auto这个acl

顾名思义,localnet.auto是FreeSWITCH 自动创建的,但如果跟您的实际网络不相符合(特别是VPN),那么可以自己配置

fs_cli -x 'reloadacl'  # 观察日志

fs_cli -x 'acl 192.168.1.100 localnet.auto' # 测试某个ip地址是不是本地网,返回true还是false

内网可能比阿里云更难调试,后者的网络结构是已知的

此外,下面这段C代码可能有帮助:

// sofia_glue.c

int sofia_glue_check_nat(sofia_profile_t *profile, const char *network_ip)
{
	switch_assert(network_ip);

	return (profile->extsipip &&
			!switch_check_network_list_ip(network_ip, "loopback.auto") &&
			!switch_check_network_list_ip(network_ip, profile->local_network));
}
  • SIP呼叫

这个问题可以简单粗暴一点,直接说出我的结论,那就是设置全局变量sip_sticky_contact为true

常见的问题是act timeout等

  • SIP注册

SIP注册通常有三个问题

  1. FreeSWITCH收到注册请求之后回复的401到达不了终端。这种情况我暂时没有经验,case by case,靠瞎蒙来解决
  2. realm问题,现象是明明已经成功注册,但是回叫终端的时候告知用户未注册。解决办法是把challenge-realm配置成一个固定的值(或许有更好的办法)。这个其实不算NAT问题
  3. FreeSWITCH记录的终端url不正确,导致回叫终端的时候失败。解决的办法可能有很多,但我习惯在directory里面增加一个变量,。此外。fs_cli -x 'show registrations as xml', 或者打开数据库,执行下面这条sql语句, select * from sip_registrations
     

欢迎继续讨论FreeSWITCH NAT问题,我知道的目前只有这么多

你可能感兴趣的:(FreeSWITCH,nat)