目录

一个youtube app使用quic引起的问题


一个youtube app使用quic引起的问题

问题描述

家里是r2s做旁路由,使用的是sing-boxtun模式, 之前一直用的是cn2 gia的线路,每天晚上用apple tv上的youtube 看看视频睡觉,没有什么问题, 这个月服务器流量用光了, 就在普通线路上用hysteria2, 半天用的都没有什么问题,结果到了晚上, youtube根本不能看,想到可能是晚上udp丢包比较严重,于是就没有管.

有一天实在受不了了, 晚上用笔记本开浏览器上speed.cloudflare.com测试了一下速度,确实正常的,有40M以上的下行速度,我寻思着这个看YouTube没有问题啊,于是用笔记本浏览器打开youtube, 发现速度正常, 2W+Kbps,4k都没问题. 我赶紧又去apple tv上测试,发现还是卡,速度只有2,3百Kbps. 百思不得其解.

解决过程

于是我用各种不通的设备测试, 发现,出来apple tvchromecast tv上的youtube app, 其他,手机app, 浏览器,全部都正常. 这明显有问题, 我又想这个问题是最近出现的,就去google了一下,看看有没有能有同样的问题,我分别按apple tvchromecast tv上的youtube app的版本号去搜索,都没有发现有相关资料.

于是去sing-boxdashboard上看了下, 用正常速度播放的时候, 看连接就是正常的, 用电视上的youtube tv播放, 连接速度就起不来,始终只有不到100KBps. 真是郁闷至极, 我测试了把协议换成vmess, 居然都比现在快, 但是浏览器和app速度都不怎么样了.

就在我又准备放弃的时候, 我发现dashboard上,apple tv的关闭连接数量在不停的增长, 再看pc对应ip的,却是正常的, 这明显有问题, apple tv怎么会发起那么多的连接, 我再仔细一看, 发现apple tvYouTube的连接, 协议是tun(udp), 明明是视频,走443端口,怎么是tcp, 我突然想到了quic, 会不会是因为走的quic, 而quic又是基于udp的,是一个一个包,而tun这边收到包后,转给hysteria的端口跳跃,每一个(或多个)包都会换端口,而且会建立新的连接,这样"关闭"的连接如此多就说的通了.

于是我去google了一下, 找到一个 issue, 使用一下rule:

1
2
3
4
5
6
{
"protocol": [
"quic"
],
"outbound": "block"
},

更新了一下配置, 结果…, 没用. 唉, 搞到快凌晨一点了,算了明天再搞, 由于下午喝了咖啡,再加上心理惦记这个事情,一晚上没有睡好, 周末起个大早, 再试试.

解决

想了一晚上, 我觉得我的思路是对的, 肯定是走的quic, 把这个禁用了, youtube app就会换成tcp了. 看了下dashboard, 发现tun(udp)这条对应的rule并不是我设置的block, 就是没有生效.

于是又继续看sing-box的文档, 换了一段rule配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
  "type": "logical",
  "mode": "and",
  "rules": [
    {
      "network": ["udp"]
    },
    {
      "port": [443]
    }
  ],
  "outbound": "block"
}

这段很明确了, udp并且是443端口, 就block, 这个可能会有误杀, 但是应该不会放过youtubequic了.

更新配置, 应用陪着, 测试: /sing-box-youtube-app-quic-issue/youtube-speed.png 终于正常了. 这不是我用浏览器测试了一下,还一直蒙在鼓里, 现在,终于可以放心看视频睡觉了…