我有一台位于防火墙后面的 Linux Asterisk 服务器。防火墙有三个接口:
- eth0 是 Asterisk 所在的 LAN,
- eth2 是互联网的默认网关(通过 ADSL 调制解调器/路由器),
- eth3 是辅助互联网连接
如果我保持现状,Asterisk 可以顺利连接到 SIP 中继。它将通过 eth2 的默认路由进行路由。eth2 是 MASQUERADED。
如果我通过 eth3 ( ) 定义到 SIP 提供商的静态路由ip route add sip.provider.ip via gateway.ip dev eth3
,我可以 ping 通 SIP 提供商。防火墙允许往返于 SIP 提供商的一切操作。但 Asterisk 将拒绝连接(对等方变得无法访问)...
我使用 iptables TRACE 查看了数据包,它们肯定是通过 eth3 发出的。但我没有看到任何数据包返回。eth3 也有一个 MASQUERADE 规则...
通过 eth3 删除静态路由可恢复连接。
我正在寻找有助于解决问题的提示和技巧。
答案1
我怀疑您的星号服务器配置为使用无连接的 UDP,因此传出的 SIP 请求可能包含最终用户应该用来连接回您的返回 IP 地址。
检查externip
你的 sip 配置文件中的设置:
另请查看以下内容,其中有很多好东西http://www.asteriskguru.com/tutorials/sip_nat_oneway_or_no_audio_asterisk.html
使用 wireshark 或 tcpdump 获取 eth2 和 eth3 的网络跟踪也能更好地阐明这个问题