带有 tc 的 qos - 高延迟 voip

带有 tc 的 qos - 高延迟 voip

我有以下设置:本地 pbx 为远程 vpn 客户端拨打电话。远程办公室的 voip 通话延迟高且质量不佳。远程办公室的链接为 10/10mbps,而本地为 6/6mpbs。

vpn 客户端(远程)<-> 路由器 <-> pbx <-> 提供商

路由器运行的是 Debian 7.3,并带有以下 tc 设置

#!/bin/bash

TC=/sbin/tc
IPTABLES=/sbin/iptables
DEV=eth0
UPLINK=6000
CEIL=$(($UPLINK*95/100))

CLASS_RT="10"
CLASS_VOIP="11"
CLASS_PROV="12"
CLASS_BULK="13" 

$TC qdisc del dev eth0 root
$TC qdisc add dev $DEV root handle 1: htb default $CLASS_BULK
$TC class add dev $DEV parent 1: classid 1:1 htb rate ${CEIL}kbit ceil ${CEIL}kbit
$TC class add dev $DEV parent 1:1 classid 1:$CLASS_RT   htb rate $((1*$CEIL/20))kbit  ceil $(($CEIL/10))kbit prio 0
$TC class add dev $DEV parent 1:1 classid 1:$CLASS_VOIP htb rate $((6*$CEIL/20))kbit ceil ${CEIL}kbit       prio 1
$TC class add dev $DEV parent 1:1 classid 1:$CLASS_PROV  htb rate $((2*$CEIL/20))kbit  ceil   ${CEIL}kbit       prio 1
$TC class add dev $DEV parent 1:1 classid 1:$CLASS_BULK htb rate $((12*$CEIL/20))kbit  ceil 5500kbit       prio 5

$TC qdisc add dev $DEV parent 1:$CLASS_VOIP handle 110: pfifo limit 10
$TC qdisc add dev $DEV parent 1:$CLASS_PROV handle 120: pfifo limit 10
$TC qdisc add dev $DEV parent 1:$CLASS_BULK handle 130: sfq perturb 10

$TC filter add dev $DEV parent 1: protocol ip prio 0 handle $CLASS_RT fw classid 1:$CLASS_RT
$TC filter add dev $DEV parent 1: protocol ip prio 1 handle $CLASS_VOIP fw classid 1:$CLASS_VOIP
$TC filter add dev $DEV parent 1: protocol ip prio 1 handle $CLASS_PROV fw classid 1:$CLASS_PROV
$TC filter add dev $DEV parent 1: protocol ip prio 3 handle $CLASS_BULK fw classid 1:$CLASS_BULK

$IPTABLES -A POSTROUTING -t mangle -p icmp -j MARK --set-mark $CLASS_VOIP
$IPTABLES -A POSTROUTING -t mangle -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark $CLASS_RT
$IPTABLES -A POSTROUTING -t mangle -m tos --tos 0xb8 -j MARK --set-mark $CLASS_VOIP
$IPTABLES -A POSTROUTING -t mangle -d $local_ip_pbx -j MARK --set-mark $CLASS_VOIP
$IPTABLES -A POSTROUTING -t mangle -s $local_ip_pbx -j MARK --set-mark $CLASS_VOIP
$IPTABLES -A POSTROUTING -t mangle -d $public_ip_vpn -j MARK --set-mark $CLASS_VOIP
$IPTABLES -A POSTROUTING -t mangle -s $public_ip_vpn -j MARK --set-mark $CLASS_VOIP
$IPTABLES -A POSTROUTING -t mangle -d $public_ip_voip_provider -j MARK --set-mark $CLASS_PROV
$IPTABLES -A POSTROUTING -t mangle -s $public_ip_voip_provider -j MARK --set-mark $CLASS_PROV
$IPTABLES -A POSTROUTING -t mangle -d $private_vpn_voip_client -j MARK --set-mark $CLASS_VOIP
$IPTABLES -A POSTROUTING -t mangle -s $private_vpn_voip_client --set-mark $CLASS_VOIP

当本地链路负载过重时,即使启用了 qos,ping 延迟也会从 16ms 上升到 40ms,峰值达到 200ms。来自远程办公室链路的流量只有 voip,链路良好。

有什么想法可以改进这些 qos 规则以在负载下保持低延迟?

答案1

你不能。

当本地链路负载过重时,即使有 QoS,ping 延迟也会从 16 毫秒上升到 40 毫秒

除非您像数据中心一样路由所有流量并对发送到办公室的流量执行 QOS,否则您无法控制传入流量的本地链路延迟。实际情况是 - 在您的办公室链路上,所有传入流量都超出了您的 QOS,因为您的 QOS 落后于传入瓶颈。

相关内容