You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Asterisk Server实现SIP呼叫时虚拟机无SIP数据包捕获问题

这种情况我之前排查过好几次,大概率是几个常见的配置或环境问题导致的,咱们一步步来定位解决:

1. 先排查Wireshark的抓包配置是否正确
  • 确认抓包接口:如果你的SIP客户端是虚拟机(比如VirtualBox/VMware里的系统),别选错了网卡!如果用的是NAT模式,宿主机上抓物理网卡看不到虚拟机的流量,得抓虚拟机对应的虚拟网卡(比如VirtualBox的vboxnet0),或者直接在虚拟机内部安装Wireshark抓包更准确。
  • 检查过滤规则:别不小心加了错误的过滤条件!比如只写了udp port 5060但客户端用的是TCP,或者过滤语法写错了。先清空过滤栏,直接输入sip(Wireshark自带的SIP过滤规则)或者udp port 5060 or tcp port 5060试试。
  • 抓包时机:一定要在发起呼叫前就启动抓包,不然很可能漏掉初始的INVITE请求。
2. 验证Asterisk与SIP客户端的基础配置
  • 确认客户端注册状态:登录Asterisk控制台,执行sippeers命令,看看两个虚拟客户端的状态是不是OK。如果显示UNREACHABLE或者未列出,说明客户端根本没注册成功,自然不会有呼叫请求发出。
  • 检查客户端配置:确认SIP客户端的「服务器地址」是Asterisk的正确IP,端口是Asterisk配置的SIP端口(默认5060),并且开启了对应的协议(Asterisk默认用UDP,有些客户端可能默认只开TCP)。
  • 核对Asterisk的SIP配置:打开sip.conf,检查bindaddr是不是设成了0.0.0.0(允许所有接口监听)或者服务器的实际IP;有没有通过allow字段限制了客户端的IP网段?如果有,确保客户端IP在允许范围内。
3. 排查虚拟环境的网络隔离/转发问题
  • 虚拟机网络模式:如果客户端是虚拟机,试试把网络模式改成「桥接」,让虚拟机和Asterisk处于同一个网段。NAT模式下,虚拟机的流量会经过地址转换,可能导致宿主机Wireshark抓不到原始SIP包,甚至虚拟机之间的流量被虚拟交换机隔离。
  • 防火墙拦截:临时关闭虚拟机内部、Asterisk服务器以及宿主机的防火墙(比如Linux的iptables -F,Windows的防火墙临时禁用),再发起呼叫试试。很多时候5060端口的SIP流量会被防火墙拦截。
4. 确认Asterisk是否真的收到了呼叫请求
  • 开启Asterisk详细日志:在控制台执行core set verbose 5和core set debug 5,然后发起呼叫。如果控制台能输出SIP相关的日志(比如收到INVITE请求),说明客户端已经把请求发给Asterisk了,问题肯定在Wireshark的抓包配置;如果没有任何SIP日志,说明客户端根本没发请求,或者网络不通。
  • 用tcpdump辅助验证:在Asterisk服务器上执行tcpdump -i any port 5060,看看能不能抓到SIP包。如果tcpdump能抓到但Wireshark抓不到,那就是Wireshark的问题;如果tcpdump也抓不到,那就是网络或客户端配置的问题。

内容的提问来源于stack exchange,提问作者Parvathi Chandrasekhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:26:43