多台 FreeSWITCH 服务器级联

本文介绍如何配置两台FreeSWITCH服务器实现电话互拨功能,包括拨号方案设计、E1板卡设置及安全性考虑等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实,只要你吃透了前些章节的内容,做 FreeSWITCH 级联是没有任何问题的。但这个问题还常常被众网友问到,我就索性再写一篇。

双机级联

假设你有两台 FreeSWITCH 机器, 分别为A和B,同样IP分别为 192.168.1.A 和 192.168.1.B。每台机器均为默认配置,也就是说在每台机器上 1000 ~ 1019 这 20 个号码可以互打电话。位于同一机器上的用户称为“网内用户”,如果需要与其它机器上的用户通信,则其它机器上的用户就称为“网外用户”。

现在你需要在两台机器之间的用户互拨,因此你想了一种拨号方案。如果A1000想拨打B1000,则B1000相对于A1000来说就是“网外用户”。就一般的企业PBX而言,一般拨打外网用户就需要加一个特殊的号码,比方说“0”。这样,“0”就称为“出局字冠。

好了,我们规定,不管是A用户还是B上的用户,拨打外网用户均需要加0. 下面我们仅配置A打B,把B打A的情况留给读者练习。

在A机上,把以下 dialplan 片断加到 default.xml 中:

其中,expression= 后面的正则表示式表示匹配以0开头的号码,“吃”掉0后,把剩下的号码送到B机的5080端口上。

所以,如果用户1000在A上拨 01000,将会发送 INVITE sip:1000@192.168.1.B:5080 到B上。B收到后,由于5080端口默认走public dialplan,所以查找 public.xml,找到1000后将电话最终接续到B机的1000用户。

除了SIP外,我还在两台机器上分别加了两块E1板卡,中间用交叉线直连,这样的话,我希望拨9开头就走E1到对端,设置如下:

汇接模式

                             |  汇接局  X |
                            /      |       \
                           /       |        \
                         A         B         C

其实你搞定了第一种模式以后,这种汇接模式也就很简单了。无非你需要动一动脑子做一下拨号计划,比方说到A拨0,B拨1,到C拨2之类的。然后在汇接局配置相关的 dialplan 就OK了。

遇到 dialplan 的问题还是再看一下第八章,还是那句话,使用 F8 打开详细的 LOG,打一个电话,从绿色的行开始看。

安全性

上面的方法只使用5080端口从 public dialplan 做互通,而发送到5080端口的INVITE是不需要鉴权的,这意味着,你任何人均可以向它发送INVITE从而按你设定的路由规则打电话。这在第一种模式下问题可能不大,因为你的public dialplan 仅将外面的来话路由到本地用户。但在汇接局模式下,你可能将一个来话再转接到其它外部网关中去,那你就需要好好考虑一下安全问题了,因为你肯定不希望全世界的人都用你的网关打免费电话。

一般说来,解决这个问题有两种方式,那就是让所有来话都经过认证鉴权后再进行路由(本地用户发到5060端口上都是需要鉴权的)。

考虑双机级联的情况,你只需要在A上配置一个到B的网关(将下列内容存成XML文件放到 conf/sip_profiles/external/b.xml):

同时把A上的 dialplan 改成:

这样,A上的用户可以呼通所有B上的用户,从B的用户来看,好像所有电话都是从本机的1000这个用户打进来的(这就是网关的概念,因为对于B来说,A机就相当于一个普通的SIP用户1000。当然你从A上理解,B就是给你提供了一条SIP中继,如果在B上解决了“主叫号码透传”以后,B就相法于一条真正的中继了)。如果这么说理解有难度的话,想像一下B是联通或电信的服务器网关,你是不能控制的,而它只给了你一个网关的IP,用户名,和密码,你把它配到你的A上,就可以呼通电信能呼通的任何固定电话或手机了。

<think>根据用户需求,用户希望使用CSS flex布局实现横向滚动。结合引用的内容,实现方法主要涉及以下几个关键CSS属性: 1. 父容器设置 `display: flex;` 启用flex布局。 2. 父容器设置 `overflow-x: scroll;` 或 `overflow-x: auto;` 以实现水平方向的滚动(当内容超出时出现滚动条)。 3. 父容器设置 `white-space: nowrap;` 防止子元素换行(但在flex布局中,这一步有时可以省略,因为flex默认不换行,但为了确保不换行,可以加上)。 4. 子元素设置 `flex-shrink: 0;` 以防止子元素被压缩(保持原始宽度,避免因容器空间不足而缩小)。 另外,根据引用[4]中的示例,还可以给子元素设置一个固定的宽度(如`width`或`flex-basis`)并配合`flex-shrink:0`。 下面是一个具体的实现示例: HTML结构: ```html <div class="flex-container"> <div class="flex-item">Item 1</div> <div class="flex-item">Item 2</div> <div class="flex-item">Item 3</div> <div class="flex-item">Item 4</div> <div class="flex-item">Item 5</div> </div> ``` CSS样式: ```css .flex-container { display: flex; /* 启用flex布局 */ overflow-x: scroll; /* 水平滚动 */ white-space: nowrap; /* 防止子元素换行,但flex布局下默认不换行,可省略,但加上更保险 */ /* 以下样式可根据需要调整 */ width: 100%; /* 容器宽度,可根据实际情况设置 */ padding: 10px; /* 内边距 */ box-sizing: border-box; /* 盒模型,可选 */ } .flex-item { flex-shrink: 0; /* 防止子元素被压缩 */ /* 设置子元素的宽度,可以使用固定宽度,也可以使用flex-basis */ width: 200px; /* 固定宽度 */ /* 或者使用 flex-basis: 200px; */ height: 150px; /* 高度根据需要设置 */ margin-right: 10px; /* 设置子元素之间的间距 */ background: #eee; /* 背景色,仅用于演示 */ } ``` 注意: - 如果子元素的内容可能会换行,可以在子元素上也设置`white-space: nowrap;`。 - 滚动条样式可以根据浏览器支持使用`::-webkit-scrollbar`等伪元素进行自定义。 根据引用[2][3][4],都强调了使用`overflow-x: scroll`和`white-space: nowrap`,同时子元素需要设置不收缩(`flex-shrink:0`)和固定宽度(或基准宽度)来确保布局正确。 因此,按照上述示例即可实现flex布局的横向滚动。 相关问题: 1. 如何自定义横向滚动条的样式? 2. 在移动端实现横向滚动时需要注意哪些问题? 3. 如何实现flex布局下的响应式横向滚动?</think>### CSS Flex 布局实现横向滚动的方法 要实现横向滚动效果,需在**父容器**上设置以下关键 CSS 属性: ```css .flex-scroll-container { display: flex; /* 启用 Flex 布局 */ overflow-x: auto; /* 启用水平滚动条(auto 表示按需显示)*/ white-space: nowrap; /* 防止子元素换行 */ gap: 10px; /* 可选:子元素间距 */ padding: 8px; /* 可选:内边距 */ } ``` **子元素**需添加: ```css .flex-item { flex-shrink: 0; /* 禁止子元素被压缩 */ width: 200px; /* 固定宽度(或使用 flex-basis) */ /* 或 flex: 0 0 auto; */ } ``` #### 完整示例 ```html <div class="flex-scroll-container"> <div class="flex-item">内容1</div> <div class="flex-item">内容2</div> <div class="flex-item">内容3</div> <!-- 更多子元素 --> </div> ``` #### 关键点解析 1. **`overflow-x: auto/scroll`** 控制水平滚动条(`auto` 按需显示,`scroll` 始终显示)[^1][^3] 2. **`flex-shrink: 0`** 禁止子元素宽度被压缩,确保保持固定宽度[^4] 3. **`white-space: nowrap`** 防止 Flex 容器内的子元素换行(即使空间不足)[^2][^3] 4. **响应式处理** 若需自适应宽度,可将子元素设为: ```css .flex-item { flex: 0 0 auto; /* 不伸缩、不扩展、自动基准宽度 */ min-width: 150px; /* 最小宽度限制 */ } ``` > ⚠️ 注意:避免在父容器设置 `flex-wrap: wrap`,否则会破坏横向滚动效果[^3]。 #### 滚动条美化(可选) ```css /* 隐藏滚动条(仍可滚动) */ .flex-scroll-container { scrollbar-width: none; /* Firefox */ &::-webkit-scrollbar { display: none; } /* Chrome/Safari */ } ``` --- ### 相关问题 1. 如何实现 Flex 布局下的响应式横向滚动,使子元素宽度自适应? 2. 横向滚动时如何隐藏滚动条但保留滚动功能? 3. Flex 横向滚动与 Grid 横向滚动实现有何区别? 4. 在移动端实现横向滚动需要注意哪些兼容性问题?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值