![如何在 OpenWrt 上使用 SRA(无缝速率自适应)配置 QoS/SQM](https://linux22.com/image/1503629/%E5%A6%82%E4%BD%95%E5%9C%A8%20OpenWrt%20%E4%B8%8A%E4%BD%BF%E7%94%A8%20SRA%EF%BC%88%E6%97%A0%E7%BC%9D%E9%80%9F%E7%8E%87%E8%87%AA%E9%80%82%E5%BA%94%EF%BC%89%E9%85%8D%E7%BD%AE%20QoS%2FSQM.png)
最近,我的 ISP 将我的 DSL 线路从固定费率改为沙特阿美。这允许调制解调器根据线路质量调整互联网速度,而不是完全崩溃(我的 ISP 不想修复线路,所以他引入了这种模式,因为之前我们的正常运行时间只有 90%)。速度会下降到最高速度的一半以下。当多人同时使用互联网时,1MBit/s 而不是 2MBit/s 会很麻烦,但总比没有互联网要好。
配置 QoS 时(服务质量)或 SQM(智能队列管理我需要将下载速度设置为互联网连接的 90% 左右。如果我将其设置为高于实际速度,它将无法工作。如果我将其设置得太低,它将非常慢,而实际上它可以更快。
由于有多个人使用该连接(也观看低分辨率的 youtube 并且他们的机器进行自动更新,尤其是 Windows 10 PC),如果没有 QoS,使用互联网进行任何受高延迟(又名 ping)影响的事情真的很烦人/不可能。
ISP 的调制解调器本身没有任何 QoS。
我该怎么做才能最大程度提高互联网速度并保持较低的延迟/缓冲膨胀?
(OpenWrt 版本是 Chaos Calmer 15.05)
答案1
我希望你现在已经以某种方式解决了它。但如果你还没有,或者其他人需要帮助,我想到以下解决方案:对你的延迟敏感的设备使用启用了 SQM 的 openwrt 路由器(最好是 cake 而不是 openwrt 而是 LEDE)。然后将一个廉价的 TP-LINK(库存固件)从其 wan 端口连接到你的 openwrt/LEDE 路由器的 lan 端口并启用该功能:限制 tplink 上的带宽。将其设置为总速度的一半,并在你的 tplink 路由器网络上启动 YouTube Netflix torrent 等的多个实例然后在你的主网络(openwrt/LEDE)上打开你的延迟敏感程序并测量延迟。如果太高,降低 TPLINK 上的限制(主要是上传),如果太低,将其调高直到它影响你的 ping 等等,你需要找到合适的平衡点。附注:您将无法从 openwrt 访问您的 tplinks 路由器页面,因此您可能需要进入远程配置并将其设置为 255.255 255 255,并将 wan 地址设置为静态,以便可以从您的 openwrt/LEDE 盒访问它。
当您想让访客 wifi 获得全部带宽时,您可以禁用带宽上限。当您无法忍受延迟时,您可以将其打开 :D
这不是最好的解决方案,也许您可以尝试 Pf-sense /IPFIRE qos /sqm 来分割带宽和其他内容,但您需要一台额外的 PC 来实现这一点。
祝你好运!!
答案2
我最终做的是:
我编写了一个脚本,每分钟在 openwrt-router 上运行一次,以获取调制解调器的当前带宽,减去一些余量并将该值应用于 SQM-config
如果其他人也遇到这个问题,这是我写的脚本。我是 lua 新手,在 OpenWrt 上编程,所以可能会出现错误,但也许这对其他人有帮助。
http=require'socket.http'
body,c,l,h = http.request('http://modem/page_showing_current_speed')
bandwidth = "%[kbps/kbps%]:</td><td colspan='3'>[%d.]+ / [%d.]+</td></tr>"
bw_s = string.sub(body, string.find(body, bandwidth))
bandwidth = "[%d.]+ / [%d.]+"
bw_s = string.sub(bw_s, string.find(bw_s, bandwidth))
upload_r = "[%d.]+ "
upload = string.sub(bw_s, string.find(bw_s, upload_r))
upload_r = "[%d.]+"
upload = string.sub(upload, string.find(upload, upload_r))
upload = upload:gsub("%.", "")
download_r = " [%d.]+"
download = string.sub(bw_s, string.find(bw_s, download_r))
download_r = "[%d.]+"
download = string.sub(download, string.find(download, download_r))
download = download:gsub("%.", "")
print(upload)
print(download)
f = io.open("/etc/config/sqm", "rw")
content = f:read("*all")
f:close(f)
oldcontent = content
content = content:gsub("option download '%d+", "option download '" .. download)
content = content:gsub("option upload '%d+", "option upload '" .. upload)
if content == oldcontent
then
else
print(content)
f2 = io.open("/etc/config/sqm", "w")
f2:write(content)
f2:flush(f2)
f2:close(f2)
os.execute("/etc/init.d/sqm restart")
end
然后运行:
opkg update
opkg install luasocket
crontab -e
* * * * * lua /adjustsqm.lua
/etc/init.d/cron restart
它每分钟从调制解调器获取当前速度并将其写入 sqm 配置
答案3
尝试在您的路由器上安装 Gargoyle 固件,它应该配置了自适应 QOS,因此您只需启用它并使用它。
我不能保证它有效,所以请您自己进行测试并报告。