You need to enable JavaScript to run this app. Kamailio 5.4 如何让转发、响应的VIA头部携带端口号
优惠活动
大模型
产品
解决方案
定价
更多

Kamailio 5.4 如何让转发、响应的VIA头部携带端口号

问题定位结论
  • 这个问题和Kamailio是否正常监听UDP 5060没有关系,核心原因是Kamailio构造VIA头时,取的对外宣告地址未携带端口字段。虽然SIP规范中5060是UDP/TCP的默认端口,可以省略,但Kamailio自身不会自动补全端口,只会严格按照配置的监听值、宣告值拼接VIA头的源地址,配置时漏写端口就会直接生成无端口的VIA字段。
分步调整方案
    1. 修正全局监听配置格式
      检查配置文件顶部的listen参数,不要用仅写IP的简写形式,要显式标注传输类型、IP和端口:
    # 易触发缺端口问题的错误写法
    listen=udp:10.1.1.3
    # 正确写法
    listen=udp:10.1.1.3:5060
    
    1. 配置带端口的对外宣告地址
      在全局配置区添加advertised_address参数,必须显式带上端口——这个参数的优先级高于自动探测的网卡IP,会直接作为VIA头、Contact头的对外展示值使用,只写IP的话生成VIA时会直接省略端口:
    advertised_address=10.1.1.3:5060
    
    1. 复杂场景兜底:路由内强制覆盖VIA
      如果是多网卡、多端口并发监听的场景,全局advertised_address没法精准匹配不同转发链路的地址,可以通过vhp模块在请求初始化阶段强制覆盖VIA源地址:
    • 先确认加载了依赖模块:
      loadmodule "sl.so"
      loadmodule "tm.so"
      loadmodule "vhp.so"
      
    • 在REQINIT初始化路由块的最开头添加覆盖逻辑,不改动原有路由判断:
      route[REQINIT] {
          # 强制将本节点新增的VIA头地址替换为带端口的格式
          vhp_replace_via_host("10.1.1.3:5060");
          # 以下为原有路由逻辑,保持不变
      }
      
    1. 生效校验
      改完先跑kamailio -c检查配置语法有没有报错,重启服务后抓包查看转发的INVITE消息,确认VIA头格式符合预期:

    修改前的异常样例:Via: SIP/2.0/UDP 10.1.1.3;branch=z9hG4bK4b7b.693512744570a1e2ea323648d7423180.0
    修改后的目标样例:Via: SIP/2.0/UDP 10.1.1.3:5060;branch=z9hG4bK4b7b.693512744570a1e2ea323648d7423180.0


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 02:42:03