bilibili.com广州电信区域发现无法访问, 这边上网是根据APNIC的CN列表来的
结果发现8.134.32.222 这段的IP无法访问, 从搜狗查看是阿里云广东的节点,跟APNIC的数据集有冲突,APNIC显示是新加坡
于是用CNNIC校验了下,发现了矛盾的地方,CNNIC显示是CN Aliyun,但是mnt-by数据是SG新加坡, 不知道是不是跟新加坡买了这一段IP

AV1编码由来
Apple、亚马逊、思科、 Google、英特尔、 微软、Mozilla 以及 Netflix 等厂商又共同组建了 Alliance for Open Media(开放媒体联盟)并在 2018 年推出了对抗 H.265 的新视频编码 AV1(AOMedia Video 1)
AV1编码优缺点
1. 优点
可以在同等质量下, 相对于H265/VP9 节省 30%+的码率, 相当于H264节省50%+的码率
libaom-av1 can save about 30% bitrate compared to VP9 and H.265 / HEVC, and about 50% over H.264, while retaining the same visual quality.
H264: 112m H265: 55M av1: 32M
2. 缺点
解码/编码非常耗费CPU, 目前未见到有编码级别的硬件加速
1) 解码, 从youtube的介绍看AV1 需要一台功能强大的计算机, 暗示了CPU耗费巨大, 测试了macOS和win10, 都能正常播放, 但是耗费的CPU比VP9多20~50%
从文档看, 解码级别的硬件加速已经有了, 包括intel 12代cpu和 nvidia的CUDA都可以
2) 编码: 目前没看到有硬件加速方式, 评价最好的为svt-av1编码
a) Libaom-av1
默认av1编码 参数 速率 基本处于不可用状态, 只有0.00x 倍, 需要通过调整-cpu-used参数和使用2pass 方式实现性能码率的均衡, 不过也挺慢的
可以看到在cpuused 5 附近, 码率和质量达到了比较好的平衡
ffmpeg -y -i Black.Widow.mp4 -ss 00:39:06 -to 00:42:00 -c:v libaom-av1 -strict -2 -b:v 3000K -maxrate 6000K -cpu-used 8 -pass 1 -f matroska NUL & d:/ffmpeg/bin/ffmpeg -i Black.Widow.mp4 -ss 00:39:06 -to 00:42:00 -c:v libaom-av1 -strict -2 -b:v 1500K -maxrate 3000K -cpu-used 5 -pass 2 black.libaom-av1.sample.2pass.mkv
b) Svt-av1 : intel 和 Netflix的方案
libsvtav1
is the Intel x86-64 codec for AV1. Compile with --enable-libsvtav1
. See FFmpeg doc and upstream doc.
The range of options are similar to that of libaom (aomenc). It is supposed to be faster than libaom while having comparable quality.
40 核 Intel(R) Xeon(R) CPU Silver4210 @2.2G , windows server 2019 平台, 默认参数下可以实现2X 的编码, 代价是质量稍微有点模糊
ffmpeg -y -i Black.Widow.mp4 -ss 00:39:06 -to 00:42:00 -c:v libsvtav1 -preset 4
c) Rav1e
Rav1e claims to be the fastest software AV1 encoder, but that really depends on the setting. 速度不行, 目前看暂不可用
d) 爱奇艺自研方案
为了进一步提高编码效率,爱奇艺基于AV1标准独立自主研发出QAV1编码器,极大缓解了AV1计算复杂度高、编码时间长的问题,进而加速AV1应用效率。测试显示,与目前最流行的编码器X265相比,QAV1编码器可以节省40%以上码率,进而可以减小将近一半的带宽;在同等的压缩率下,QAV1编码器比由Netflix与英特尔联合推出的开源编码器SVT-AV1快5倍左右。借助QAV1编码器,AV1视频播放会更加流畅,同时帮助用户节省大量流量。
e) 商业化方案 微帧科技
参考文档
https://trac.ffmpeg.org/wiki/Encode/AV1
https://gitlab.com/AOMediaCodec/SVT-AV1
双向认证, 就是客户端和服务端均需要证书认证身份的一种双向认证形式
这里主要介绍下客户端证书的配置
openssl genrsa -out root.key 1024
openssl req -new -out root.csr -key root.key
openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
openssl genrsa -out client.key 1024
openssl req -new -out client.csr -key client.key
openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650
nginx配置
ssl_client_certificate ssl/client.crt;
ssl_verify_client on;
这个是给客户端导入的p12格式证书
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12
重置 SMC 之前,请尝试以下步骤:
如果问题仍然存在,请按照以下步骤重置 SMC:
将 Mac 关机,然后开机并立即同时按住以下四个按键:Option、Command、P 和 R。您可以在大约 20 秒后松开这些按键,在此期间您的 Mac 可能看似在重新启动。
如果安全启动 模式下变得正常,大概率是扩展/自启动程序造成的,关闭即可
如图, 去掉你觉得可疑的勾,然后重启后再尝试关机看看
参考文档:https://discussionschinese.apple.com/thread/252090797
glue record 胶水记录 , 是登记在域名服务商的核心记录, 如果你的域名需要由自己的NS来解析的话
检查的办法很简单, 先查出对应的根服务器
#dig NS com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> NS com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61412
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 12
;; QUESTION SECTION:
;com. IN NS
;; ANSWER SECTION:
com. 82334 IN NS b.gtld-servers.net.
com. 82334 IN NS j.gtld-servers.net.
com. 82334 IN NS m.gtld-servers.net.
com. 82334 IN NS i.gtld-servers.net.
com. 82334 IN NS f.gtld-servers.net.
com. 82334 IN NS a.gtld-servers.net.
com. 82334 IN NS g.gtld-servers.net.
com. 82334 IN NS h.gtld-servers.net.
com. 82334 IN NS l.gtld-servers.net.
com. 82334 IN NS k.gtld-servers.net.
com. 82334 IN NS c.gtld-servers.net.
com. 82334 IN NS d.gtld-servers.net.
com. 82334 IN NS e.gtld-servers.net.
;; ADDITIONAL SECTION:
b.gtld-servers.net. 23540 IN A 192.33.14.30
b.gtld-servers.net. 46911 IN AAAA 2001:503:231d::2:30
j.gtld-servers.net. 23540 IN A 192.48.79.30
j.gtld-servers.net. 46911 IN AAAA 2001:502:7094::30
m.gtld-servers.net. 85907 IN A 192.55.83.30
m.gtld-servers.net. 46911 IN AAAA 2001:501:b1f9::30
i.gtld-servers.net. 44730 IN A 192.43.172.30
i.gtld-servers.net. 46911 IN AAAA 2001:503:39c1::30
f.gtld-servers.net. 23540 IN A 192.35.51.30
f.gtld-servers.net. 46911 IN AAAA 2001:503:d414::30
a.gtld-servers.net. 55315 IN A 192.5.6.30
a.gtld-servers.net. 46911 IN AAAA 2001:503:a83e::2:30
;; Query time: 1 msec
;; SERVER: 10.4.1.1#53(10.4.1.1)
;; WHEN: Tue Aug 24 11:46:33 2021
;; MSG SIZE rcvd: 509
从里边的结果中挑出一个NS即可
#dig NS iqiyi.com @d.gtld-servers.net.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> NS iqiyi.com @d.gtld-servers.net.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59595
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 4
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;iqiyi.com. IN NS
;; AUTHORITY SECTION:
iqiyi.com. 172800 IN NS ns1.iqiyi.com.
iqiyi.com. 172800 IN NS ns2.iqiyi.com.
iqiyi.com. 172800 IN NS ns3.iqiyi.com.
iqiyi.com. 172800 IN NS ns4.iqiyi.com.
;; ADDITIONAL SECTION:
ns1.iqiyi.com. 172800 IN A 43.225.84.1
ns2.iqiyi.com. 172800 IN A 43.225.85.1
ns3.iqiyi.com. 172800 IN A 43.225.84.1
ns4.iqiyi.com. 172800 IN A 43.225.85.1
以上additional section就是胶水记录了
也可以用这个网站查询并做一些相关检查:
http://www.webdnstools.com/dnstools/check-domain-results
wg 是性能非常优秀的链路接入软件, 在linux kernel 5.6的时候已经被纳入正式内核
以下介绍下在centos7 下的配置:
1.先升级下系统版本到最新
#yum upgrade
2. 安装必要的系统依赖库和软件,客户端和服务端一样操作
# sudo yum install epel-release elrepo-release
# sudo yum install yum-plugin-elrepo
# sudo yum install kmod-wireguard wireguard-tools
3. 生成服务器和客户端的公钥私钥
#服务器和客户端都需要分别执行一遍
wg genkey | tee privatekey | wg pubkey > publickey
4. 配置文件
#客户端
[Interface]
PrivateKey = “客户端私钥”
Address = 172.16.52.52/24
DNS = 8.8.8.8
MTU = 1420
[Peer]
PublicKey = “服务端公钥”
Endpoint = “服务端接入IP”:4430
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
服务端
[Interface]
Address = 172.16.52.0/24
MTU = 1420
SaveConfig = true
ListenPort = 4430
PrivateKey = “服务端私钥”
[Peer]
PublicKey = “客户端公钥”
AllowedIPs = 172.16.52.52/32
5. 服务端转发配置
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -I POSTROUTING -s 172.16.52.0/24 -o eth1 -j MASQUERADE
6. 开启脚本:
systemctl enable wg-quick@wg0
7. 可能产生的问题:
1) MSS导致大包无法通过, 这个是NAT代理常见的问题, 现象是ping 或者部分小网页能打开, 大的网页则卡住了, 一般都是MSS导致, 需要设置小MSS
iptables -t mangle -A POSTROUTING -p tcp –tcp-flags SYN,RST SYN -o eth1 -j TCPMSS –set-mss 1400
一些旧设备访问nginx的时候可能会出现400 bad request, 这个跟2020.2月nginx移除了一个兼容特性有关
Disabled duplicate “Host” headers (ticket #1724). Duplicate “Host” headers were allowed in nginx 0.7.0 (revision b9de93d804ea) as a workaround for some broken Motorola phones which used to generate requests with two “Host” headers[1]. It is believed that this workaround is no longer relevant.
新增的这块代码如下: 会判断是否有重复的host 头, 而在之前的版本是认为可以容忍的
这个兼容特性被移除后, 会导致一些旧版本的移动设备响应异常
而我们线上测试机器主要是兼容了spdy协议, 也出现了400 BAD REQUEST, 这个跟spdy代码里边本身进行了一遍header处理有关:
可以参考:
https://hg.nginx.org/nginx/rev/4f18393a1d51
http://mailman.nginx.org/pipermail/nginx-devel/2020-February/012999.html
1.使用USB数据线连接iPhone和Mac
2.打开iTunes,查看UDID编号
3.建立RVI接口,打开终端,输入命令行:
rvictls -s
成功建立了RVI接口后,会输出:[Starting device 你的UDID [SUCCEEDED] with interface rvi0]
rvi0既是新建的接口。
4.查询接口,输入命令行:
ifconfig -l
会发现新增了一个rvi0的链接。
5.开始进行抓包,可以使用tcpdump命令或者其他专业的抓包工具进行抓包,本文使用Wireshark进行抓包。
打开Wireshark以后,在Start下新增了一个rvi0的链接,选择它,然后点击Start开始抓包。
参考文章: https://zhuanlan.zhihu.com/p/23823231
特别感谢: 纪总
gn gen out/release –args=”is_component_build=false is_debug=false”
ninja -C out/release nginx-1.18.0_ipdb
build/linux/debian_sid_amd64-sysroot 这个目录相当于根目录, usr/lib和usr/include 分别放了依赖库和头文件
chromium移除了这两个文件,不知道为何, 会导致nginx 编译失败,目前解决办法是从旧版本拷贝过去
build/linux/debian_sid_amd64-sysroot/usr/lib/x86_64-linux-gnu/libcrypt.so
build/linux/debian_sid_amd64-sysroot/usr/include/crypt.h
build/config/compiler/BUILD.gn, 比如nginx 可能需要把这个特性关掉
if (!is_nacl && !use_libfuzzer) {
#cflags += [ “-Wunreachable-code” ]
}
executable(“fssnginx-1.18.0_ipdb”) {
sources = [
“/root/fssnginx/nginx-1.18.0/objs/ngx_modules.c”,
“/root/fssnginx/nginx-1.18.0/src/core/nginx.c”,….
]
include_dirs = [
“/root/fssnginx/nginx-1.18.0/src/core”,
“/root/fssnginx/nginx-1.18.0/src/event”,
“/root/fssnginx/nginx-1.18.0/src/event/modules”,
“/root/fssnginx/nginx-1.18.0/src/os/unix”,
“/root/fssnginx/nginx-1.18.0/nginx_upstream_check_module-master”,
“/root/fssnginx/nginx-1.18.0/ngx_devel_kit-0.3.0/objs”,
“/root/fssnginx/nginx-1.18.0/objs/addon/ndk”,
“/root/fssnginx/nginx-1.18.0/lua-nginx-module-0.10.13/src/api”,
“/root/fssnginx/nginx-1.18.0/pcre-8.42”,
“/root/fssnginx/nginx-1.18.0/zlib-1.2.11”,
“/root/fssnginx/nginx-1.18.0/objs”,
“/root/fssnginx/nginx-1.18.0/src/http”,
“/root/fssnginx/nginx-1.18.0/src/http/modules”,
“/root/fssnginx/nginx-1.18.0/src/http/v2”,
“/root/fssnginx/nginx-1.18.0/src/http”,
“/root/fssnginx/nginx-1.18.0/ngx_devel_kit-0.3.0/src”,
“/root/fssnginx/nginx-1.18.0/ngx_devel_kit-0.3.0/src”,
“/root/fssnginx/nginx-1.18.0/ngx_devel_kit-0.3.0/objs”,
“/root/fssnginx/nginx-1.18.0/objs/addon/ndk”,
“/root/fssnginx/nginx-1.18.0/luajit/include/luajit-2.0”,
“/root/fssnginx/nginx-1.18.0/quic_module/chromium”,
]
deps = [
“:epoll_quic_tools”,
“:epoll_server”,
“:net”,
“:simple_quic_tools”,
“//base”,
“//third_party/boringssl”,
]
lib_dirs = [
“/root/fssnginx/nginx-1.18.0/json-c/lib”,
“/root/fssnginx/nginx-1.18.0/luajit/lib”,
]
libs = [
“/root/fssnginx/nginx-1.18.0/pcre-8.42/.libs/libpcre.a”,
“/root/fssnginx/nginx-1.18.0/zlib-1.2.11/libz.a”,
“luajit-5.1”,
“json-c”,
“crypt”,
]
cflags_c = [
“-D_FORTIFY_SOURCE=2”,
“-DTCP_FASTOPEN=23”,
“-DNDK_SET_VAR”,
]
}
线上有个业务需要使用到指定版本的chromium源代码, 这里记录下
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ export PATH="$PATH:/path/to/depot_tools"
Tip: /path/to/depot_tools, 为你 depot_tools 本地的路径
$ mkdir chromium && cd chromium
$ fetch chromium
//Don't use fetch --no-history chromium, 我们需要切换到历史版本
Tip: –no-history: 代表不需要历史记录, 完整仓库大约40G 源码大小大概 8G 左右,下载时间因网速而议,请耐心等待
# Make sure you are in 'src'. # This part should only need to be done once, but it won't hurt to repeat it. The first # time checking out branches and tags might take a while because it fetches an extra # 1/2 GB or so of branch commits. gclient sync --with_branch_heads --with_tags # You may have to explicitly 'git fetch origin' to pull branch-heads/ git fetch # Checkout the branch 'src' tree. git checkout -b branch_$BRANCH tags/$BRANCH # Checkout all the submodules at their branch DEPS revisions. gclient sync --with_branch_heads --with_tags
到这一步做完就可以校验下了
$cat chrome/VERSION
参考文档:
https://www.chromium.org/developers/how-tos/get-the-code/working-with-release-branches