最简单的架构 - 1架构
1架构: 1台FS节点
在一个最简单的VoIP架构里,你只需要部署一台具有公网IP的FreeSWITCH, 就可以开始呼叫业务。
分机直接注册到FS上,然后FS直接对接线路。
但是要不了多久,你就会发现下面的问题:
安全问题:
- FS直接公网暴露,必然面临被攻击的事实。因为对接线路虽然可以设置网络策略,但是分机的IP往往是动态变化的。小型的攻击例如恶意的注册扫描,大型的攻击就是DDOS, 直接打满带宽,导致业务必然中断。
- 一些简单的安全防范,比如默认端口改成非5060的端口,但是使用现代化的端口扫描工具,6W个端口基本上几秒就能扫描完。
高可用问题:
- 单台FS挂掉,业务就中断了
- 停机维护, 业务也会中断
扩展问题:
- 当业务上量,一台FS就无法满足,必然要增加新的FS节点。
- 这时候问题就来了
- 分机信息保存在FS节点中,多FS节点分机注册信息如何同步?
- 在呼入的时候,是否要通知SIP-线路去增加新的FS节点信息? 网络策略是不是又要开一遍?
支持FS动态扩展架构 2+N架构
2+N架构: 2台SIP Proxy,N台FS节点
这种架构特点
- SIP Proxy层具有公网IP,无论分机注册,还是对接线路,SIP信令都需要经过SIP Proxy层
- 分机注册信息也保存在SIP Proxy层,FS不再关心分机的注册地址
- SIP Proxy层可以用keep-alive保活,一主一备部署
- FS可以无感扩容,由Proxy层来做负载均衡。
在这个架构图里,我没有引入rtpproxy或者rtpengine的,这时候媒体流的走向就比较尴尬。
每台FS还必须要要有公网地址, 只有这样分机才能直接对接FS。 而原因也很简单,因为opensips或者kamailio没有媒体处理能力。
这种架构还是无法节约EIP, FS还是可能遭受到公网攻击。
2+N+N架构
2+N+N架构: 2台SIP Proxy,N台MediaPrxyo节点, N台FS节点
为了彻底让FS不再供网暴露,我们引入媒体代理层。
这次基于架构2, 引入媒体代理集群,例如使用多台rtpengine机群,用来转发UAC <> FS <> 线路 之间的媒体流
三明治架构
可以参考 SIPSwse C5架构 https://wdd.js.org/posts/2025/sipwise-c5-arch/
这种架构在媒体层和SIP Proxy层之间又增加一层,我称之为SIP Router层。
为什么要做两层SIP Proxy呢?
因为这样做可以让每一层的功能更集中。
- SIP Proxy层,定位改为SIP接入层
- 统一协议接入:无论客户端是什么协议,例如tls/tcp/udp/wss, 在这一层可以统一来接入, 对内统一都用udp传输SIP信令
- 安全认证: 在这一层要作为整个系统的出入口,对进入的流量做统一的访问控制和安全认证
- NAT穿透处理
- 拓扑隐藏
- SIP防洪/IP拦截
- SIP Router层,定位改为业务强相关
- 负责注册管理
- 中继选择
- 号码改写
- 话单计费
- …
也许有人会说,sip-router层和sip-proxy完全是可以合并的,没必要做成两层。
那我问你一个问题:你没有见过谁家的房子,是打开大门就能进入卧室的?
sip-proxy层就是防盗大门, 而router层就是客厅,media层就是卧室。
另外,在一些受限网络中,sip-proxy也可以作为该网络的接入点来使用。