分类 "Linux" 下的文章

日常听说 HTTPS 是加密协议,那现实中的 HTTPS 流量,是真的完全加密吗?

——答案是,不一定。原因嘛,抓个包就知道了。

我们用 curl 命令触发一下:

curl -v 'https://s-api.37.com.cn/api/xxx'
*   Trying 106.53.109.63:443...
* Connected to s-api.37.com.cn (106.53.109.63) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
*  CAfile: /etc/ssl/cert.pem
*  CApath: none
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=*.37.com.cn
*  start date: Aug 24 00:00:00 2022 GMT
*  expire date: Sep 11 23:59:59 2023 GMT
*  subjectAltName: host "s-api.37.com.cn" matched cert's "*.37.com.cn"
*  issuer: C=US; O=DigiCert, Inc.; CN=RapidSSL Global TLS RSA4096 SHA256 2022 CA1
*  SSL certificate verify ok.
* Using HTTP2, server supports multiplexing
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* h2h3 [:method: GET]
* h2h3 [:path: /api/xxx]
* h2h3 [:scheme: https]
* h2h3 [:authority: s-api.37.com.cn]
* h2h3 [user-agent: curl/7.85.0]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x159813400)
> GET /api/xxx HTTP/2
> Host: s-api.37.com.cn
> user-agent: curl/7.85.0
> accept: */*
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 404 
< date: Wed, 18 Jan 2023 09:57:12 GMT
< content-type: text/html
< content-length: 150
< 
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>openresty</center>
</body>
</html>
* Connection #0 to host s-api.37.com.cn left intact

Wireshark 使用过滤条件 ip.addr == 106.53.109.63,截图如下:

https抓包分析

阅读全文

注意:如果你公司的 VPN 网络是在苹果下使用的,本文可能不适用(苹果系统不支持 PPTP)。

用 Linux 和用 Windows/macOS 不一样,它真的需要用户操心很多东西。比如怎么连接公司的 VPN 网络……

我是折腾了挺久,反正系统自带的 VPN 连接管理界面,不管你怎么配置,就是用不了!!!

最后,我翻了 arch 的官方文档,发现有一个叫 PPTP Client 的东西,配置起来超级简单,敲几下命令就连接上了……

真正连上的那一瞬间,真的很有成就感!趁热记录下来:)

好了, 我们进入正题,首先是安装:

sudo pacman -S pptpclient

然后配置一下连接(起名叫 company):

sudo pptpsetup --create company --server 域名或 IP 地址 --username 账号 --password 密码 --encrypt

可以用以下命令测试一下 company 连接:

sudo pon company debug dump logfd 2 nodetach

会打印一堆调试信息,并最终程序卡住不会退出。连接成功后,你会看到一个 ppp0 的网卡:

ip addr

要用公司 VPN 连接的时候,需要加个路由:

sudo pon company
sudo ip route add default dev ppp0

结束使用时去掉就好了:

sudo ip route del default dev ppp0
sudo poff company

经过以上步骤配置后,就可以使用了。

但我发现特别卡,ping 了一下发现丢包率很高(6%)。

网上搜索了一圈资料,最终确定和 MTU 有关系(默认是 1500),我参考了 macOS 的 1280,设置后一切正常,不再丢包了!

sudo ifconfig ppp0 mtu 1280

MTU 设置太大会被分片,太小影响效率。因此需要设置成一个合理值,保证网络的可靠性的同时,实现传输效率的最大化。

MTU 一般网络设备都是 1500。如果本机的 MTU 比网关大,大的数据包会被拆分传送,会产生大量数据包碎片,增加丢包率,降低网络传输速度。

检查的话,可以使用以下命令:

ping -s 1472 -M do 192.168.1.123

它表示发送 1472+28 字节的数据包,并禁止路由器拆包。

  • 如果正常回复,说明网络最大 MTU 是 1500,与系统默认一致;
  • 如果不正常,说明超过网络限定大小,需要减小探测包大小再次尝试。

注:1500 = 1472 + 8(ICMP 回显请求和应答报文的格式长度)+ 20(IP 头)。

还是挺多命令要敲的,为了方便,我加了两个 alias,大家可以根据实际情况配置:

alias onn_company="sudo pon company && sleep 5 && sudo ip route add default dev ppp0 && sudo ifconfig ppp0 mtu 1280"
alias off_company="sudo ip route del default dev ppp0 && sudo route del -host 1.2.3.4 dev enp2s0 && sudo poff company"
  • sleep 5 使得连接后等一下下,再改路由;不 sleep 的话网络会卡一下,体验不是很好;
  • ifconfig 修改后的 MTU 重启电脑会丢失,但这个不是很重要,我觉得也没必搞成永久生效了;
  • route del -host 1.2.3.4 需要改成你公司的 VPN 的 IP,我发现有时候 del default 不好使,原因不明(可能我连接多次了)。

整体上还是挺方便的,简单几行命令就搞定了。

“记得上次用 Manjaro Linux 的时候,还是上次:)”

三年前,工作都是在 Linux 下完成的——那时候的我还没有苹果电脑。

我算是接触了很多很多发行版,Ubuntu、Debian、Deepin 深度、Linux Mint 薄荷、CentOS、Manjaro……小众的,还有 Puppy Linux、Slitaz……

最喜欢的,还是 Manjaro 啦!软件库非常齐全,更新也快。所以我一般都会安利它哈哈~

不过有时候下载一些软件,你会发现官网只提供 deb 或者 rpm 包。这个时候可以用以下命令,转成 Manjaro 可以安装的包:

一、先检查有没有安装 debtap,有安装可以直接跳到第 3 步:

sudo pacman -Q debtap

二、安装debtap:

sudo pacman -S yaourt
yaourt -S debtap

三、更换源(非常重要,不然炒鸡炒鸡卡):

sudo sed -i "s|http://ftp.debian.org/debian/dists|https://mirrors.ustc.edu.cn/debian/dists|g" /usr/bin/debtap
sudo sed -i "s|http://archive.ubuntu.com/ubuntu/dists|https://mirrors.ustc.edu.cn/ubuntu/dists|g" /usr/bin/debtap

四、更新一下:

sudo debtap -u

五、打包:

sudo debtap xxxx.deb

期间提示你输入包名、License 信息。

  • 包名根据你安装的软件填写就好了,比如飞书,你输入 feishu 回车键即可;
  • License 自己使用随便填一个就好了,比如 GPL。

上述操作完成后会在deb包同级目录生成×.tar.xz文件

六、安装:

sudo pacman -U XXXX.tar.xz

2022年08月07日文章更新:第 6 步打出来的包是 zst 格式的了,命令自行改一下。

今天在业务上云的时候,遇到了些问题。最终发现问题的根源不好排查,于是——

把生产环境的全量配置文件,还有日志全量打包下载到开发机器分析!

刚入职不是很久的整个运维团队,也不是很熟悉生产环境(有时候觉得自己就是个运维哈哈哈哈),于是把机器下线后,一顿 tar 压缩,就准备 scp 发送了。

生产和开发机内网不通,都是走公网传输。很容易想到:10+G,非 80 端口,ssh 协议(自己公司约定好的),肯定特别慢,之前用的时候每秒也就 2 兆。

某同事:“我有办法让你更快点。”

我:“请教下?”

于是,他就教了我:)

  1. 假设开发机器的公网 IP 是 1.1.1.1,在该机器先监听 80 端口,并重定向到文件,接收完进程会自己退出。
nc -l 80 > all.tar.gz
  1. 生产环境机器,直接往 1.1.1.1 的 80 端口写入数据即可,写完进程会自动结束!
nc 1.1.1.1 80 < all.tar.gz
  1. 用 md5sum 校验一下,发现 md5 一致
md5sum all.tar.gz

时间多久就真的忘记了,确实比 scp 快很多!

事情是这样,服务器很多人在使用,以前的离职同事留了一大堆不知道是什么东西。

那些文件看不了,又删不掉,非常碍眼。

我搜索了挺多资料,没有一篇文章能真的解决问题(感觉都是抄来抄去的)。

用 SFTP 工具、PHPStorm 全家桶,都删不了……

后面找到了一篇英文资料,提示说可以用 inode 编号删,所以就有了今天这篇文章。

步骤很简单,分两步:

阅读全文