美文网首页
【Freeswitch】【媒体NAT穿越案例三】内网环境强制使用

【Freeswitch】【媒体NAT穿越案例三】内网环境强制使用

作者: 安安爸Chris | 来源:发表于2020-12-17 11:43 被阅读0次

    本案例具有一定的特殊性

    问题描述

    FS部署在一个网络中,用户终端在另外一个内网中,两边的媒体SDP都带着私有IP,导致媒体不通

    网络拓扑图

    案例三拓扑

    问题分析

    FS是分配有公网IP的,在external.xml中有配置公网IP,配置如下

    external.xml
    FS在媒体协商时,一般会使用ext-rtp-ip作为SDP中的IP地址来协商。

    但是在这个案例中,无论怎么设置,都不起作用。

    通过源码分析

    invite初始化的代码在 sofia_glue_do_invite(sofia_glue.c)

    switch_core_media_choose_port

    switch_core_media_choose_port函数,

    IP设置逻辑
    在每个分支出口增加日志打印,分析发现,如果remote_ipNAT地址,那么除非通过rtp_adv_%s_ip指定c参数传过来的ip,否则都使用rtpip,这个地址为内网地址。

    ok,接下来看一下switch_core_media_check_nat(switch_core_media.c)逻辑

    switch_core_media_check_nat
    • extsipip就是我们设置的公网地址,这个肯定是有的。

    • "loopback.auto"定义在switch_core.c,注意他是hardcode的,除了loopback.auto,还是nat.auto,any_v4.auto,any_v6.auto,wan_v4.auto,wan_v6.auto,wan.auto,rfc1918.auto,rfc6598.auto等。
      这个肯定也是不会匹配到的

      "loopback.auto"
    • 最后一项 profile->local_network
      它是哪里来的呢??

    在sofia.c中,有默认值定义


    sofia.c

    "localnet.auto"是本地网络,同样定义在switch_core.c

    localnet.auto

    配置文件中的读取

    配置文件中的读取
    从这段代码来看,如果想让NAT检查通过,那么就配置为“none”

    解决方案

    配置修改

    local-network-acl值配置为none

    local-network-acl

    freeswitch内部定义可用常量

    出了none,这里有一些内部定义常量可以使用 (定义在switch_core.c)

    • localnet.auto (默认值)
    • loopback.auto
    • nat.auto
    • any_v4.auto
    • any_v6.auto
    • wan_v4.auto
    • wan_v6.auto
    • wan.auto
    • rfc1918.auto
    • rfc6598.auto

    相关文章

      网友评论

          本文标题:【Freeswitch】【媒体NAT穿越案例三】内网环境强制使用

          本文链接:https://www.haomeiwen.com/subject/oroagktx.html