作者归档:admin

aws lightsail ssh 挂掉如何登录

在尝试调整sshd端口的时候不小心把ssh弄挂了, 由于vps里边也是有防火墙的,外边进不去,控制台也进不去,因为amazon的lightsail 实际上并没有console控制台, 它的控制台也是通过ssh登录的

这个时候需要如下步骤来拯救机器和数据

1.    打开 Amazon Lightsail 控制台

2.    创建实例的手动快照

3.    在 Snapshots (快照)选项卡上的 Manual snapshots (手动快照)项下,选择新快照旁边的三个点。

4.    选择 Create new instance (创建新实例)。

5.    选择与上一个实例相同的可用区域。

6.    选择 Add launch script (添加启动脚本),然后添加以下脚本

sudo sed -i 's/Port /#Port /g' /etc/ssh/sshd_config
sudo systemctl restart sshd.service
sudo systemctl stop firewalld.service
sudo systemctl disable firewalld.service
sudo systemctl enable sshd
sudo systemctl restart sshd
sudo systemctl enable sshd.service
sudo systemctl restart sshd.service

7.    选择新的实例计划,或使用与之前的实例相同的计划。

8.    输入实例的名称,然后选择 Create instance (创建实例)。

新实例开始运行后,等待 10 到 15 分钟,然后尝试使用基于浏览器的 SSH 控制台连接到该实例。

注意:如果以前的实例具有静态 IP 地址,则可以在新实例上使用它。分离静态 IP 地址,然后从 Networking (联网)选项卡将其附加到新实例。有关更多信息,请参阅 Amazon Lightsail 中的静态 IP 地址

如果以上问题仍不能修复, 则需要尝试为机器配置会话管理器, 这个就比较复杂了,仅供参考

https://lightsail.aws.amazon.com/ls/docs/en_us/articles/understanding-static-ip-addresses-in-amazon-lightsail

SSH 服务已关闭

如果 SSH 服务未在实例上运行或未处于活动状态,则 SSH 连接将失败,并且您会收到 UPSREAM_NOT_FUND [519] 错误消息。要解决此问题,请为您的 Lightsail 实例配置 AWS Systems Manager 会话管理器服务。配置会话管理器后,在没有 SSH 服务的情况下访问实例,然后修复 SSH 问题。

SSH 问题的基本故障排除步骤包括:

  • 请查看 /var/log/auth.log 或 /var/log/secure 文件中的 SSH 身份验证日志以识别错误,具体取决于操作系统的版本。
  • 测试 SSH 配置文件语法,然后更正所有错误。
sudo sshd -t
sudo systemctl restart sshd

参考文档: https://aws.amazon.com/cn/premiumsupport/knowledge-center/lightsail-resolve-ssh-console-errors/

APNIC 区域不准确的情况

bilibili.com广州电信区域发现无法访问, 这边上网是根据APNIC的CN列表来的

结果发现8.134.32.222 这段的IP无法访问, 从搜狗查看是阿里云广东的节点,跟APNIC的数据集有冲突,APNIC显示是新加坡

于是用CNNIC校验了下,发现了矛盾的地方,CNNIC显示是CN Aliyun,但是mnt-by数据是SG新加坡, 不知道是不是跟新加坡买了这一段IP

ffmpeg av1编码

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://sspai.com/post/59174

https://gitlab.com/AOMediaCodec/SVT-AV1

https://www.streamingmedia.com/Articles/Editorial/Featured-Articles/AV1-Has-Arrived-Comparing-Codecs-from-AOMedia-Visionular-and-Intel-Netflix-142941.aspx?utm_source=related_articles&utm_medium=gutenberg&utm_campaign=editors_selection

客户端证书认证

双向认证, 就是客户端和服务端均需要证书认证身份的一种双向认证形式

这里主要介绍下客户端证书的配置

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

升级big sur 关机花屏

重置SMC

重置 SMC 之前,请尝试以下步骤:

  1. 将 Mac 关机。
  2. 按住电源按钮 10 秒钟,然后松开这个按钮。
  3. 等待几秒钟,然后按下电源按钮以将 Mac 开机。

如果问题仍然存在,请按照以下步骤重置 SMC:

  1. 将 Mac 关机。
  2. 在内建键盘上,按住以下所有按键。Mac 可能会开机。
    • 键盘左侧的 Control 
    • 键盘左侧的 Option (Alt) 
    • 键盘右侧的 Shift 
  3. 按住全部三个按键 7 秒钟,然后在不松开按键的情况下按住电源按钮。如果 Mac 处于开机状态,它将在您按住这些按键时关机。

重置NVRAM

将 Mac 关机,然后开机并立即同时按住以下四个按键:Option、Command、P 和 R。您可以在大约 20 秒后松开这些按键,在此期间您的 Mac 可能看似在重新启动。

  • 如果 Mac 电脑发出启动声,您可以在第二次启动声过后松开这些按键。
  • 搭载 Apple T2 安全芯片的 Mac 电脑上,您可以在 Apple 标志第二次出现并消失后松开这些按键。 

安全模式启动

  • Apple 芯片
  1. 将 Mac 关机。
  2. 启动 Mac 并继续按住电源按钮,直至看到启动选项窗口。
  3. 选择启动磁盘,然后按住 Shift 键并点按“继续以安全模式运行”。
  4. 登录到 Mac。系统可能会要求您再次登录。
  • Intel 处理器
  1. 启动或重新启动 Mac,然后在 Mac 启动时立即按住 Shift 键
  2. 看到登录窗口时,松开这个按键,然后登录 Mac。 
  3. 系统可能会要求您再次登录。在第一个或第二个登录窗口中,您应该会在窗口的右上角看到“安全启动”。

去掉多余的扩展

如果安全启动 模式下变得正常,大概率是扩展/自启动程序造成的,关闭即可

如图, 去掉你觉得可疑的勾,然后重启后再尝试关机看看

参考文档:https://discussionschinese.apple.com/thread/252090797

DNS glue record 胶水记录

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 配置

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增多的问题

一些旧设备访问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

iPhone监听移动数据

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

特别感谢: 纪总

编译chromium的一些记录

这两个命令用来编译release版本的二进制文件

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”,
]
}