当前位置: 首页 > news >正文

FreeSWITCH跨NAT部署配置详解

本文仅讨论FreeSWITCH部署在NAT之后(里面)这种场景,假设私网地址与公网地址有一个确定的映射关系。

这里只涉及mod_sofia(SIP信令及媒体)相关配置,其他模块不在本文讨论之列。

配置

mod_sofia默认提供两个profile,可以理解成是两套配置,最主要的区别是监听端口不一样,其他的区别包括是否启用TLS加密,使用哪个拨号计划等等。这里以internal profile为例。

1、配置预处理变量

FreeSWITCH的惯例是把预处理变量定义在vars.xml文件中,然后再由其他配置文件去引用。这里我们主要关注公网地址以及SIP监听端口。

etc/freeswitch/vars.xml
<include><!-- 注意,X-PRE-PROCESS开头的配置都是预处理配置,有点像是定义全局变量,但是变量的值可以在程序启动时动态获取到 --><!-- 这两个变量必须要设置成公网IP,有3种方法配置公网IP: --><!-- 1、配一个固定的公网IP --><X-PRE-PROCESS cmd="set" data="external_rtp_ip=172.21.221.137"/><X-PRE-PROCESS cmd="set" data="external_sip_ip=172.21.221.137"/><!-- 2、通过公网上的stun服务动态获取 --><X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=stun:stun.freeswitch.org"/><X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=stun:stun.freeswitch.org"/><!-- 3、通过域名解析动态获取 --><X-PRE-PROCESS cmd="set" data="external_rtp_ip=host:host.server.com"/><X-PRE-PROCESS cmd="set" data="external_sip_ip=host:host.server.com"/><!-- 配置两个profile所监听的SIP端口: --><!-- Internal SIP Profile --><X-PRE-PROCESS cmd="set" data="internal_auth_calls=true"/><X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/><X-PRE-PROCESS cmd="set" data="internal_tls_port=5061"/><X-PRE-PROCESS cmd="set" data="internal_ssl_enable=false"/><!-- External SIP Profile --><X-PRE-PROCESS cmd="set" data="external_auth_calls=false"/><X-PRE-PROCESS cmd="set" data="external_sip_port=5080"/><X-PRE-PROCESS cmd="set" data="external_tls_port=5081"/><X-PRE-PROCESS cmd="set" data="external_ssl_enable=false"/>
</include>

2、配置sip profiles

这里才是mod_sofia真正会读取的配置。这里以internal profile为例,external同理。

etc/freeswitch/sip_profiles/internal.xml
<profile name="internal"><settings><!--这里引用vars.xml里面配置的全局变量。注意,要以$${var}的形式引用!注意,local_ip_v4这个全局变量是fs_core自动设置的,每分钟更新一次。如果机器有多个IP,需要手动指定一个,详见官方文档:https://developer.signalwire.com/freeswitch/Channel-Variables-Catalog/local_ip_v4_16353556/--><!-- 当前这个profile所要监听的SIP端口。 --><param name="sip-port" value="$${internal_sip_port}"/><!-- 接收RTP流的端口要绑定在哪个地址上。只能是IP地址,不能是域名! --><param name="rtp-ip" value="$${local_ip_v4}"/><!-- 接收SIP请求的端口要绑定在哪个地址上。同上,只能是IP地址。 --><param name="sip-ip" value="$${local_ip_v4}"/><!-- 对外通告RTP消息时所用的地址。 --><param name="ext-rtp-ip" value="$${external_rtp_ip}"/><!-- SIP报文中Contact header的地址。 --><param name="ext-sip-ip" value="$${external_sip_ip}"/></settings>
</profile>

3、配置媒体端口范围

有些NAT或防火墙只能映射或允许一个范围内的端口,这就需要调整FreeSWITCH接收RTP媒体流所用的端口范围。

注意:FreeSWITCH使用偶数端口接受RTP流,使用奇数端口收发RTCP消息。假如需要承载50路通话,则至少要映射100个端口!

etc/freeswitch/autoload_configs/switch.conf.xml
<configuration name="switch.conf" description="Core Configuration"><settings><!-- RTP port range --><param name="rtp-start-port" value="40000"/><param name="rtp-end-port" value="40009"/></settings>
</configuration>

验证

人为改一下ext-rtp-ipext-sip-ip,观察它们的作用:

此时有一个到达internal profile的呼叫,从FreeSWITCH回复的200 OK中可以看到,Contact header中填的是ext-sip-ip,而SDP部分填的是ext-rtp-ip

问题

  • 私网端口号与公网端口号不一样怎么办?比如:私网:5060 <==> 公网:8060

  • 恐怕只能修改代码了。mod_sofia可以支持监听IP与通告IP不一致,但端口不能不一致。即它就只能在SIP报文中通告它自己本地监听的端口。

以上就是FreeSWITCH跨NAT部署配置详解的详细内容,更多关于FreeSWITCH跨NAT部署的资料请关注其它相关文章!

相关文章:

FreeSWITCH跨NAT部署配置详解

本文仅讨论FreeSWITCH部署在NAT之后&#xff08;里面&#xff09;这种场景&#xff0c;假设私网地址与公网地址有一个确定的映射关系。这里只涉及mod_sofia&#xff08;SIP信令及媒体&#xff09;相关配置&#xff0c;其他模块不在本文讨论之列。配置mod_sofia默认提供两个prof…...

【精选论文 | Capon算法与MUSIC算法性能的比较与分析】

本文编辑&#xff1a;调皮哥的小助理 【正文】 首先说结论&#xff1a; 当信噪比&#xff08;SNR&#xff09;足够大时&#xff0c;Capon算法和MUSIC算法的空间谱非常相似&#xff0c;因此在SNR比较大时它们的性能几乎一样&#xff0c;当不同信号源的入射角度比较接近时&…...

卫星、无人机平台的多光谱数据在地质、土壤调查和农业等需要用什么?

近年来&#xff0c;Python编程语言受到越来越多科研人员的喜爱&#xff0c;在多个编程语言排行榜中持续夺冠。同时&#xff0c;伴随着深度学习的快速发展&#xff0c;人工智能技术在各个领域中的应用越来越广泛。机器学习是人工智能的基础&#xff0c;因此&#xff0c;掌握常用…...

30个题型+代码(冲刺2023蓝桥杯)

愿意的可以跟我一起刷&#xff0c;每个类型做1~5题 &#xff0c;4月前还可以回来系统复习 2月13日 ~ 3月28日&#xff0c;一共32天 一个月时间&#xff0c;0基础省三 --> 省二&#xff1b;基础好点的&#xff0c;省二 --> 省一 目录 &#x1f33c;前言 &#x1f33c…...

快速且有效减小代码包的方法

前言当我们在发布一些APP或者小程序等比较小的程序时候&#xff0c;常常会对其主包大小进行一定的规定&#xff0c;若超过推荐的主包大小则性能会被大大影响&#xff0c;或者再严重一点就不给你过审。如微信小程序中也对主包有一定的大小要求。对此一些比较复杂的小程序就需要考…...

基于matlab评估星载合成孔径雷达性能

一、前言本示例展示了如何评估星载合成孔径雷达 &#xff08;SAR&#xff09; 的性能&#xff0c;并将理论极限与 SAR 系统的可实现要求进行比较。SAR利用雷达天线在目标区域上的运动来提供更精细的方位角分辨率。给定雷达的主要参数&#xff08;例如工作频率、天线尺寸和带宽&…...

Linux_基本指令

新的专栏Linux入门来啦&#xff01;欢迎各位大佬补充指正&#xff01;&#xff01; Linux_基本指令导入文件绝对路径与相对路径隐藏的文件指令ls查看stat查看文件属性cd进入路径mkdir创建目录touch创建文件rm删除man查询手册cp复制mv移动cat查看文件morelessheadtail时间相关的…...

Keras深度学习实战——使用深度Q学习进行SpaceInvaders游戏

Keras深度学习实战——使用深度Q学习进行SpaceInvaders游戏 0. 前言1. 问题与模型分析2. 使用深度 Q 学习进行 SpaceInvaders 游戏相关链接0. 前言 在《深度Q学习算法详解》一节中,我们使用了深度 Q 学习来进行 Cart-Pole 游戏。在本节中,我们将利用深度Q学习来玩“太空侵略…...

从事架构师岗位快2年了,聊一聊我对架构的一些感受和看法

从事架构师岗位快2年了&#xff0c;聊一聊我和ChatGPT对架构的一些感受和看法 职位不分高低&#xff0c;但求每天都能有新的进步&#xff0c;永远向着更高的目标前进。 文章目录踏上新的征程架构是什么&#xff1f;架构师到底是干什么的&#xff1f;你的终极目标又是什么&#…...

零基础机器学习做游戏辅助第十二课--原神自动钓鱼(二)

一、模拟训练环境 上节课我们已经能够判断人物的钓鱼状态,接下来我们就需要对鱼儿上钩后的那个受力框进行DQN训练。 方案有两个: 使用卷积神经网络直接输入图像对网络进行训练。使用普通网络,自己写代码模拟出图像中三个点的动态并把值给神经网络进行训练。这里我们选用第二…...

MapReduce paper(2004)-阅读笔记

文章目录前言摘要&#xff08;Abstract)一、引言( Introduction)二、编程模型&#xff08;Programming Model&#xff09;三、实现&#xff08;Implementation&#xff09;3.1、执行概述&#xff08;Execution Overview&#xff09;3.2、主节点数据结构&#xff08;Master Data…...

【蒸滴C】C语言指针入门很难?看这一篇就够了

目录 一、前言 二、指针是什么 小结&#xff1a; 三、指针变量是什么 小结&#xff1a; 四、指针在32位机器和64位机器中的差别 32位机器&#xff1a; 64位机器: 小结&#xff1a; 五、指针和指针类型 &#xff08;1&#xff09;指针的意义 &#xff08;2&#xff…...

C++11新的类功能

文章首发公众号&#xff1a;iDoitnow 1. 特殊的成员函数 C11在原有的4个特殊成员函数&#xff08;默认构造函数、复制构造函数、复制赋值运算符和析构函数&#xff09;的基础上新增了移动构造函数和移动赋值运算符。这些特殊成员函数在各种情况下是会通过编译器自动提供的。 …...

Laravel创建定时任务

创建一个任务&#xff0c;创建成功后会在App/Console/Commands中生成一个以Test命名的文件&#xff0c;我们可以在这里面写我们的任务指令。 php artisan make:command Test 运行这个定时任务 run 是运行一次&#xff0c;我们可以用来测试是否成功&#xff0c;work是一直运行&a…...

SaveInstanceState

1. 保存与读取当前状态&#xff0c;MainActivity.java public class MainActivity extends AppCompatActivity {private String TAG "MyLog";TextView textView;Button button;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedI…...

Fluent Python 笔记 第 16 章 协程

从句法上看&#xff0c;协程与生成器类似&#xff0c;都是定义体中包含 yield 关键字的函数。可是&#xff0c;在协程中&#xff0c;yield通常出现在表达式的右边(例如&#xff0c;datum yield)&#xff0c;可以产出值&#xff0c;也可以不产出——如果 yield 关键字后面没有表…...

山东科技大学校历 代码分析 获得以前学期学年的老版校历

校历-山东科技大学网络安全与信息化办公室http://tech.sdust.edu.cn/wlfw/xl.htm JavaScript var studyStart new Date(2021, 8-1, 30);//8-1 -1没有意义&#xff0c;30代表30号&#xff0c;2021年8月30号开始这个学期 var commonWeeks 19;//这个学期有多少周 var s…...

第五章.与学习相关技巧—权重初始值(随机初始值,Xavier初始值,He初始值)

第五章.与学习相关技巧 5.2 权重初始值 本节将介绍权重初始值的推荐值&#xff0c;并通过实验确认神经网络的学习是否会快速进行。 1.权值衰减 权值衰减就是一种以减少权重参数的值为目的进行学习的方法&#xff0c;通过减少权重参数值来抑制过拟合的情况发生。 2.权重初始值不…...

Linux进程间通信(管道)

进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件&#xff08;如…...

写一个基于node.js的api后台管理系统(三)

创建登录页面 在项目目录下创建一个名为public的文件夹&#xff0c;并在其中创建一个HTML文件login.html。添加以下代码&#xff1a; <!DOCTYPE html> <html> <head><title>Login - Task Management</title> </head> <body><h1…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...