C cenaly.com
免费开始

适用于电话系统的网络、路由器与互联网

端口、SIP ALG 以及在常见品牌路由器上的禁用方法、NAT、Wi-Fi 与 VLAN,每通通话所需的网络流量

7 min read 在演示中打开此界面
On this page 18

电话通信的网络、路由器和互联网

IP 电话是门店网络中的一台设备,和收银或电脑一样:它通过您的路由器连接到我们的 PBX 来访问互联网。几乎总是“直接就能用”,而当它不能用时——问题出在三四个路由器设置上,这些设置在所有品牌上都一样。本页介绍:网络需要什么、在热门品牌路由器上哪里关闭碍事的“助手”SIP ALG,以及一次通话需要多少互联网。

电话本身要填什么(服务器、登录名、密码)——见“SIP 电话设置”概览。网络发生任何更改后检查声音——回声测试 *43(见“如何检查网络”)。


简而言之:五条规则#

  1. 不需要端口转发。 电话自己从您的网络内部连接 PBX——不存在来自外部的入站连接。
  2. 在路由器上关闭 SIP ALG(也叫“SIP Helper”、“SIP Passthrough”)。这是“通话 30 秒后中断”和“听不到我说话”最常见的原因——您的品牌在哪里关闭。
  3. 电话——接入办公网络,最好用网线。 不要接入访客 Wi-Fi:那里设备之间相互隔离,而且通常有登录页面,电话无法通过。
  4. 互联网需要的不多,但要稳定: 每次通话约 100 kbit/s 上下行各一。比速度更重要的是通道不要被“顶满”——尤其是上行。
  5. 网络任何操作之后请拨打 *43。 管理后台里的绿点只表示注册成功,不代表声音正常。

通话如何通过网络#

 IP 电话 ──► 门店路由器 ──► 互联网 ──► Cenaly PBX
 (192.168.x.x)  (NAT:将地址     运营商    sip.<您的域名>
                替换为外部地址)              或专用机器

所有流量都由电话发起:

  1. 电话向 PBX 发送注册(端口 5060)。路由器记住:“来自这个外部端口的包——是给电话 192.168.x.x 的”——这叫做地址转换(NAT)。
  2. PBX 回应,之后把来电发到注册来源的同一处——通过路由器上的同一个“洞”。因此不需要端口转发:门是电话自己打开的。
  3. 语音(RTP)也由电话自己开始发送,PBX 则把语音回复到它来源的地址和端口。

由此得出两个条件,缺一则通信中断:路由器不得改写 SIP 包的内容(这是 SIP ALG 干的),并且不得忘记那个“洞”,在电话通话间隙沉默期间(这是 keep-alive)。两者下面都会讲到。

给网络管理员:PBX 自己对 NAT 做了什么

PBX 侧的所有分机都启用了(shared/sip/advanced-options.json,组 nat):

  • force_rport —— 回复发往请求来源的地址和端口(RFC 3581),而不是 Via 头里写的地址;
  • rewrite_contact —— PBX 按注册来源的真实外部地址记住电话,而不是 Contact 头里的私有地址 192.168.x.x;
  • rtp_symmetric —— 语音发往它从电话来的地方(symmetric RTP),而不是 SDP 里的地址;
  • direct_media=no —— 语音始终经过 PBX,即使在同一门店的两部电话之间;电话从不尝试彼此直接连接。

因此电话不需要 STUN、TURN 和 ICE,门店也不需要静态外部 IP。电话可以请求 60–3600 秒的注册(少于 60——拒绝 423 Interval Too Brief,默认 120 秒);PBX 每 60 秒用 OPTIONS 请求检查每台已注册的设备。


给网络管理员的端口#

规则只有一条:允许到 PBX 地址的出站及其响应(普通的“stateful”防火墙自己就会这么做)。不需要入站规则和端口转发。

项目 PBX 侧的协议和端口 从门店的方向
注册和呼叫(SIP) UDP 5060;TCP 5060——如果电话切换到 TCP 出站到 PBX 地址
语音(RTP) UDP 10000–20000(共享回路使用 10000–10200,专用机器——整个范围 10000–20000) 出站到 PBX 地址
名称(DNS) UDP/TCP 53 到运营商 DNS 服务器或您的
时间(NTP) UDP 123 到时间服务器——否则通话记录里的时间会不对

PBX 地址是名称,不是 IP:它显示在“分机凭据”窗口中(共享回路为 sip.<您的域名>,或您的专用机器名称)。不要“凭记忆”把 IP 填进规则,也不要从本页获取它——这里特意没有。

防火墙详情
  • 电话的本地端口(它从哪个端口发送 SIP 和 RTP)每个品牌都不同——不需要按源端口过滤出站,请按目标地址和端口过滤。
  • PBX 侧一次通话两个端口: RTP 占用偶数端口,RTCP(质量报告)——相邻的奇数端口。这是 PBX 的内部事务,但解释了为什么范围这么宽。
  • 如果防火墙要求 IP 地址, 请按名称获取(nslookup <SIP 服务器>)。专用机器的 IP 是静态的;共享回路更可靠的做法是按名称放行,或放行到它的所有出站 UDP。
  • TCP 5061(SIP over TLS) 在专用机器上为加密信令开放。只有当凭据窗口中的传输是 TLS 时电话才需要它;默认是 UDP。
  • 没有语音加密(SRTP)——如果防火墙的“VoIP 检查”要求 SRTP,请对 PBX 地址关闭它。

在路由器上关闭 SIP ALG#

这是什么。 SIP ALG(Application Layer Gateway;不同品牌中称为“SIP Helper”“SIP Passthrough”“ALG for SIP”)是路由器的一项功能,它“帮助”电话通信:深入 SIP 数据包内部并改写其中的地址。它最初是为那些无法在 NAT 后正常工作的老式电话设计的。我们的 PBX 自己能处理这些(见上文),路由器的“帮助”只会添乱。

它如何造成故障。 它经常改写错误,或只改写一半的数据包。典型症状:

  • 通话在接听后恰好约 30 秒断开——接听确认(ACK)发错了地方,其中一方按计时器挂断;
  • 只能听到一方或完全没有声音——语音流描述中的地址被替换;
  • 电话时而注册成功时而不成功,来电时有时无。

这些故障的机制在“通话中断”和“没有声音,只能听到一方”页面中有详细分析。这里讲的是在哪里关闭。

品牌 关闭位置 出厂状态
Keenetic(及 Netcraze) 系统常规设置 → 更改组件集 → 取消勾选“SIP 应用层网关(ALG)” → 更新。在 Keenetic 上 SIP ALG 不是复选框,而是系统的一个独立组件:需要将其删除。路由器需要联网,它会将系统更新到最新版本并自动重启——请在空闲时间操作 文档中未说明
MikroTik(RouterOS) NAT 辅助菜单 /ip firewall service-port → sip 记录 → 关闭:/ip firewall service-port disable sip 文档中未说明
TP-Link Archer(Wi-Fi 6) Advanced → Security → ALG → 关闭 SIP ALG 文档中未说明
TP-Link xDSL 和 LTE 调制解调器(Archer VR/VX/MR、TD-W) Advanced → NAT Forwarding → ALG → 关闭 SIP ALG 文档中未说明
TP-Link Deco Deco 应用 → More → Advanced → NAT Forwarding → SIP ALG → 关闭 文档中未说明
D-Link DIR(俄语固件) 高级 → ALG/Passthrough → 将 SIP 开关拨到左侧 → 应用 文档中未说明
D-Link DIR(英语固件) Advanced → Firewall → Advanced Settings… → SIP → 关闭 文档中未说明
Zyxel VMG/XMG(运营商调制解调器) Network Setting → NAT → ALG → 关闭 SIP ALG 文档中未说明
ASUS WAN → NAT Passthrough → SIP Passthrough → Disable → Apply(ASUS 将 SIP ALG 称为 SIP Passthrough ⚠️ verify) 已开启
NETGEAR(Nighthawk、Orbi RBR50/40/20) ADVANCED → Setup → WAN Setup → 勾选 Disable SIP ALG → Apply 已开启
DrayTek Vigor NAT → ALG → 取消勾选 Enable SIP/RTSP ALG(3.8.5 及以后固件);在控制台中——sys sip_alg 0 已关闭
AVM FRITZ!Box AVM 文档中没有单独的 SIP ALG 开关。但对于外部 PBX 需要解除保护:Telefonie → Eigene Rufnummern → Anschlusseinstellungen → 取消勾选“Nutzung von Internettelefonie aus dem Heimnetz unterbinden”(禁止从家庭网络使用互联网电话)——否则 FRITZ!Box 不会放行电话连接我们的 PBX —
Ubiquiti UniFi(Cloud Gateway) 无需任何操作:根据 Ubiquiti 文档,UniFi 网关不应用 SIP ALG。请检查其前面的运营商路由器 无 ALG
Tenda Tenda 家用 Wi-Fi 路由器手册中没有 SIP ALG 选项。Tenda DSL 调制解调器:Advance → Services → ALG → 取消勾选 SIP —
Huawei、ZTE(运营商光终端:HG8245H、HG8145V、F660、F670L…) 厂商公开文档中没有路径,菜单通常被运营商精简——请咨询运营商 —
Sagemcom、Technicolor、AirTies(运营商设备) 厂商文档中没有该选项——请咨询运营商 —
Xiaomi / Redmi 厂商文档中没有该选项——请通过 *43 和超过一分钟的通话进行测试 —

“出厂状态:文档中未说明”意味着厂商没有写明 ALG 初始是否开启——请自行登录查看。路径取自厂商官方手册(列表见“来源”);在其他固件中选项名称可能略有不同。

网络管理员:企业网关
  • TP-Link Omada(带独立 Web 界面的网关):Transmission → NAT → ALG——取消勾选 SIP。
  • Zyxel ATP/USG(ZLD):Configuration → Network → ALG——取消勾选 Enable SIP ALG(以及 Enable SIP Transformations)。
  • Fortinet FortiGate:出厂时 SIP 由 ALG 处理(default-voip-alg-mode proxy-based),且 session-helper sip 处于开启状态(通常为第 13 号)。只能在控制台中关闭:config system session-helper → delete 13 → end;然后 config system settings → set default-voip-alg-mode kernel-helper-based → end;策略中不应有 VoIP 配置文件。检查——diagnose sys session list | grep sip。
  • MikroTik:service-port 中的 SIP 记录有参数 sip-direct-media(默认 yes)和 sip-timeout(1 小时)——辅助功能关闭时它们不生效。
  • OpenWrt:SIP 辅助功能位于 kmod-nf-nathelper-extra 包中;没有该包就没有 ALG。按区域启用辅助功能由防火墙的 auto_helper 选项控制。

如果路由器是运营商提供的(光终端、互联网运营商的“盒子”)且看不到该选项——菜单通常被精简了。请致电运营商并要求:“在我的路由器上关闭 SIP ALG”或“将终端切换到桥接(bridge)模式”(如果其后连接的是您自己的路由器)。

关闭后请重启路由器和电话(旧的 NAT 记录会保留到重启或计时器到期),然后拨打 *43。


NAT、双重 NAT 与 keep-alive#

Keep-alive。 只要还有数据经过,路由器就会记住为电话保留的“通道”。如果电话静默时间超过路由器上 UDP 的超时时间,该记录就会被删除——来电无法到达电话,尽管后台还会亮几分钟绿点(“外呼能打通,来电打不进”)。在 Linux 路由器上(许多家用和运营商型号都基于它运行),单向 UDP 流的默认超时是 30 秒,有应答的流是 120 秒;MikroTik 则是 30 秒和 3 分钟。

因此:

  • 在电话里开启 NAT keep-alive(也叫“NAT Keep-alive”“Keep Alive Interval”“UDP keep-alive”),间隔设为 15–30 秒,如果有这一项的话;
  • 或者把电话切换到 TCP——路由器对 TCP 连接的保持时间长得多(我们的 PBX 在同一端口 5060 上接受 TCP);
  • PBX 这边每 60 秒轮询一次每部电话——这有帮助,但在超时为 30 秒的路由器上,仅靠这一点还不够。

双重 NAT——当运营商路由器或光猫后面还有你自己的路由器,两者都做 NAT 时。我们的 PBX 只能看到最外层的地址,这样也能用,但:SIP ALG 必须在两台设备上都关闭,而 keep-alive 必须短于两个超时中较短的那个。最好的做法是把运营商设备设为桥接(bridge)模式,只保留一层 NAT。

移动网络和运营商的“灰色”IP(CGNAT)——这是同样的双重 NAT,只是外层在运营商那边,无法配置。能用,但 keep-alive 尤其重要:运营商的超时时间有时很短。

网络管理员:超时与检查
  • Linux 路由器(OpenWrt 以及许多家用和运营商型号的固件):nf_conntrack_udp_timeout = 30 秒,nf_conntrack_udp_timeout_stream = 120 秒——见 Linux 内核文档。MikroTik:/ip firewall connection tracking → udp-timeout = 30 秒,udp-stream-timeout = 3 分钟。如果电话没有 keep-alive,把 UDP 超时提高到 180 秒。
  • NAT 记录失效的迹象:外呼始终正常,来电在闲置几分钟后就不再进来,而在一次外呼之后立刻“复活”。
  • 反过来,可以从后台检查到电话的通路:设备卡片 →“检查”标签页 →“呼叫设备”(见概览,“通话质量检查”)。

网线、Wi-Fi、PoE、VLAN 与 QoS#

  • 网线优于 Wi-Fi。 桌面电话请用网线连接。Wi-Fi 会增加延迟和丢包,尤其是在客人共用网络的大厅里;在接入点之间切换时通话可能中断。
  • 访客网络不适合电话。 它通常开启了客户端隔离(设备之间互相看不到——电脑打不开电话的网页界面),而且可能有电话无法通过的登录页(“captive portal”)。
  • 在大厅里来回走动,用 DECT,而不是 Wi-Fi 电话。 DECT 子机使用自己的无线电,不依赖 Wi-Fi,续航也更久。
  • PoE 供电。 大多数办公电话通过交换机按 PoE 802.3af 标准供电——不需要单独的电源适配器。如果交换机不支持 PoE,电源适配器通常单独出售。视频电话和带扩展模块的设备可能需要 PoE+(802.3at)。
  • 智能手机上的软电话在切换到移动网络时会丢失注册——见“软电话”。
网络管理员:语音 VLAN 与 QoS

VLAN。 在使用可管理交换机的场所,把电话划到单独的语音 VLAN 很方便:访客和办公流量不会干扰语音,电话对访客不可见。电话可以通过手动设置(在其网络设置里)、交换机的 LLDP-MED 或 DHCP 选项获取 VLAN 号——请查看你所用品牌的页面。接在电话 PC 端口上的电脑仍留在普通网络里。对 PBX 来说 VLAN 不改变任何东西:电话对外仍然通过路由器的 NAT 出去。

QoS。 语音需要的不是大带宽,而是发送队列中的优先级:当有人上传摄像头视频或云端备份时,语音包和文件排在同一个队列里——于是出现“机器人音”和延迟。可以做的:

  • 在路由器里开启优先级(QoS / SQM / Smart Queue /“带宽管理”),把最高优先级给电话的 IP 地址或语音 VLAN;
  • 把“重负载”设备(摄像头、NAS)的带宽限制在略低于实际链路速率——这样队列就不会被塞满;
  • 电话通常自己会用 DSCP 码 **46(EF)**标记语音,用 24–26(CS3/AF31)标记信令;路由器可以按这个标记做优先级。在你的路由器之外的互联网上,DSCP 标记通常不被遵守——所以要管的正是自己的发送方向。

需要多少互联网带宽#

通过我们 PBX 的一通通话约占 87 kbit/s 每个方向——G.711(A-law/µ-law)和 G.722 编解码器相同。请按每通通话 100 kbit/s 预留余量——接收和发送都是如此。

同时通话数 发送和接收各需
1 部电话 0.1 Mbit/s
2 0.2 Mbit/s
4 0.4 Mbit/s
8 0.8 Mbit/s
10 1 Mbit/s
20 2 Mbit/s

两个容易踩坑的说明:

  • 场所内两部电话之间的通话是两个经过互联网的流, 而不是零:语音始终经过 PBX(每部电话到 PBX 再返回)。请按同时通话的电话数量计算,而不是按通话数。
  • 瓶颈是发送。 ADSL、移动互联网和许多计划的发送速度远低于接收速度。如果发送通道被摄像头、云备份或视频下载占用,语音就会开始断续,即使“测速结果良好”。

质量比速度更重要。 正常通话需要:

指标 良好 听不清
丢包率 不超过 1 % 超过 3 %——有“咕噜”声,音节丢失
抖动(延迟波动) 不超过 30 ms 超过 50 ms——声音断续
往返延迟 不超过 150 ms 超过 300 ms——双方互相打断

PBX 在通话记录中每次 *43 检查都会显示这些数值。

移动互联网。 一通通话每个方向约消耗 0.6 MB 每分钟,即总计约 1.2 MB 每分钟,或通话 每小时约 72 MB。

如何计算

我们 PBX 的编解码器——G.711(PCMA/PCMU)和 G.722——都传输 64 kbit/s 的音频。电话每 20 ms 发送一个包(ptime 20 ms——这些编解码器的标准),即每秒 50 个包。

  • 包的有效载荷:64 000 bit/s × 0.02 s = 1280 bit = 160 字节。
  • 包头:RTP 12 + UDP 8 + IPv4 20 = 40 字节 → IP 层的包为 200 字节。
  • IP 层:200 字节 × 8 × 50 包/秒 = 80 kbit/s。
  • 在以太网线缆中还会加上 18 字节的帧头:218 字节 × 8 × 50 = 87.2 kbit/s——这就是“约 87”。
  • RTCP(质量报告,每隔几秒一次)增加几 kbit/s——可忽略不计。运营商的 PPPoE 每个包增加 8 字节(+3.2 kbit/s)。

公式:带宽 = (载荷 + 包头) × 8 × (1000 / ptime);对于 G.711 和 G.722 在 20 ms 时:(160 + 40 + 18) × 8 × 50 = 87 200 bit/s。

流量:80 kbit/s(IP 层,移动运营商按此计算)= 10 000 字节/秒 × 60 = 600 000 字节 ≈ 0.6 MB 每分钟 单向;×2 方向 = 1.2 MB/分钟;×60 分钟 = 72 MB/小时。


如何检查网络#

  1. 回声测试 *43,用那部有问题的电话:提示音 → 你自己的声音。如何解读四种结果(有提示音无声音、静音、断续)——见概览:“通话质量检查”。请说话不少于 10 秒——这样通话记录中才会出现丢包、抖动和延迟。
  2. 从 PBX 呼叫话机(话机卡片 → “检查” → “呼叫话机”)检查回程——即路由器上接收来电的那个“洞”。
  3. 从另一个网络进行同样的检查(电话或软电话通过移动互联网)可以快速判断是否是场所网络的问题。

如果有问题——按症状排查:


安全#

  • 不要将电话、ATA 或网关直接暴露在互联网上: 不要向其转发 5060,不要将其放入 DMZ,也不要给它“公网”IP。互联网上的机器人全天候扫描——开放的设备会在夜间从“100”或“1000”之类的号码拨出电话,最坏的情况下会被用于付费通话。我们的方案完全不需要端口转发。
  • 更改电话 Web 界面的出厂密码(admin/admin 之类)——否则场所网络中的任何人,包括没有隔离的访客 Wi-Fi,都可以打开设置并读取账户信息。
  • 如果电话有 “仅接受来自服务器/代理的 SIP” 选项(Allow SIP from proxy only, Accept SIP from registrar only)——请启用它。
  • 从制造商官方来源更新电话和路由器的固件。

常见问题#

商户需要静态(“公网”)IP 地址吗?#

不需要。电话会自行连接 PBX,PBX 会按实际的外部地址记住它,无论该地址是什么。使用运营商的“内网”IP 和通过移动网络上网都可以正常工作。

需要在路由器上转发 5060 和 10000–20000 端口吗?#

不需要,也不必尝试:把 5060 转发到电话会让它被互联网上的扫描仪发现。只要路由器放行出站流量即可(出厂设置就是这样)。

我在自己的路由器里没找到 SIP ALG。该怎么办?#

请查看 NAT、“防火墙”、“安全”、“WAN”、“组件”等部分。没有这一项——可能该型号根本没有 ALG;请用 *43 和时长超过一分钟的通话进行测试。如果通话在 30 秒后中断,而路由器是运营商提供的——请让运营商关闭 SIP ALG,或把设备切换到网桥模式。

电话开机后只有最初几分钟能收到来电#

这是路由器上 NAT 记录过期的典型征兆:电话静默超过 UDP 超时时间,路由器就忘记了把来电发往哪里。请在电话中开启 15–30 秒的 NAT keep-alive,或把传输方式切换为 TCP。详见“通话中断”和“NAT、双重 NAT 和 keep-alive”一节。

带 SIM 卡的移动路由器够我们用吗?#

对于 1–3 路同时通话——通常够用:每个方向每路通话约需 0.1 Mbit/s。薄弱之处是不稳定:当丢包超过 3 % 且延迟超过 300 ms 时,通话会变得不舒适。请在高峰时段用 *43 测试,并查看通话日志中的数值。

可以把电话接到访客 Wi-Fi 上吗?#

最好不要。访客网络通常启用了客户端隔离和登录页面,而且访客会用自己的视频占用信道——语音会在最繁忙的时段开始断续。请为电话划分专用网络或 VLAN。


相关章节#

来源#

Was this article helpful?