Linux 网络调优:内核网络栈参数篇

网络上流传着很多“Linux 网络一键优化脚本/配置”,并不是说这些配置不好,而是在不知道这些常用内核参数的含义和影响的前提下 xjb 调其实挺危险的,根据使用场景不同和机器配置不同,有些参数调了只是“没用”,而有的调了会引起一些网络玄学故障,本文尝试结合 Linux 网络栈 ingress 和 egress 的基本架构,整理了一下常用的一些参数的含义和相关的用途坑点。

主要有以下部分组成:

  • 简述 Linux ingress 架构
  • backlog 和 skb 相关
  • TIME_WAIT 相关
  • Linux egress 架构和 qos 相关
  • nf_conntrack 相关
  • TCP keepalive 相关
浅谈 Linux 上的 SLAAC:原理、配置和系统行为

TL; DR:本文简要介绍了 IPV6 自动配置的基本概念和原理,并讨论了在 Linux 下自动配置(aka. SLAAC)原理和坑点,其中:

启用 IPV6 SLAAC 并允许内核自动添加 IPV6 默认路由需要使 net.ipv6.conf.{iface}.autoconf = 1 且 net.ipv6.conf.{iface}.accept_ra = 1
如果启用了 net.ipv6.conf.{iface}.forwarding ,则对应网卡接口 accept_ra 需要为 2
上述 iface 既可以是 default/all,也可以是具体某个网卡接口,但是需要特别注意,对于部分 IPV6 配置项,仅修改 net.ipv6.conf.all 时不会应用到全部网卡接口,使用时请确认所需的网卡接口上配置正确。
另外在部分发行版中可能修改 accept_ra 实际不生效,系统可能出现预期外行为(无法自动获取的地址和路由,或配置为不需要 SLAAC 时系统仍会进行配置等),此时可检查系统中是否存在其他网络管理工具如 netplan 造成了遗留影响。

TL; DR:变更 sshd 这种高危操作三思而后行,最好留个后路谨防失联。
TL; DR 2:裸奔的 aria2c 可以用于写入文件最终导致 getshell,为了安全起见,公网上的 aria2c 建议禁用 rpc-listen-all 或/和设置足够强的 rpc token,也避免使用 root 运行 aria2c。

如 https://lwn.net/Articles/812537/ 所述,由于 SHA-1 签名算法的暴力破解成本已下降到可接受范围,OpenSSH 8.2 决定不再支持 ssh-rsa 签名算法,其结果是,过旧版本的 ssh-server 将无法使用高版本 ssh-client 连接,比如 CentOS6 的 5.3 不支持 ecdsa host key,也不支持 rsa-sha256 或更强的算法,摆在 CentOS6 用户面前的只有两条路,1. 升级 OpenSSH 版本,2. 准备一个旧版 ssh client 用来登陆老旧服务器。

很不巧的是我手头正好有一台老旧的、没有接 IPMI 管理网卡的 CentOS6 物理服务器,CentOS6 主源中没有符合要求版本的 OpenSSH(>5.7),于是我需要尝试自行编译或找一个别人编译好的二进制,于是我找到了 https://github.com/faishal/openssh-portable/releases/download/cent.os.6.7.openssh.7.3p1/openssh-7.3.zip ,事实表明它有坑,Google 搜出来的第一个结果也不一定总是靠谱的。

Windows Terminal 试用小记

为了对水果近年来在 T2 问题上的倒行逆施表示反抗,我最近开始研究 Windows 下工作的可能性,由于 WSL 的完成度日渐提高,我使用 macOS 工作的最大理由已经消失,不过由于 conemu 等第三方终端总是感觉性能不好,刷新率和响应速度都和 iTerm 有肉眼可见的差距,在 Windows 下工作总觉得手感差点。不过 Windows Terminal 于近日宣布 feature complete,距离预定于明年初发布的 v1.0 只剩下 bug fix 工作,感觉是时候尝试一下,于是我老人家终于下定决心花了一晚上时间把我的 LTSC 系统升级到半年频道(Windows Terminal 使用了 conhost 的一些新 API,要求系统版本在 1903 build 18362 以上)

但是和 VS Code 发布之初类似,Windows Terminal 现在也只有 json 格式配置文件,没有 GUI 配置,不得不说这个还是挺劝退的,目前 WT 的文档非常的不齐全,组织的还比较混乱, 还全部直接扔在 Github 源码里,Github 本身不是一个便于阅读文档的地方,翻文档就很累,虽然微软提供了一个完整的 config sample ,但是由于太长了人类可读性也不是很好,有时候找半天不如直接 Google 搜关键词最后从某 issue 的角落里抄来一句能用的配置,个人还是很烦这种不得要领又无序可循的感觉,这也是我写本文的一个原因。

近期由于某地方需要一个能推路由且平台兼容性好一点的 VPN(wg 和 IPSec 之类都因为需要本机配路由或是兼容问题不想在 Windows 平台折腾)于是盯上了 openvpn,然后又由于懒得自己折腾 CA,又稍微看了看 openvpn 的收费版本 openvpn access server(简称 ovpnas 或 oas),在不激活的情况下,oas 支持两个设备同时连接,个人自己用其实是够了的,但是我出于好奇搜了一下有没有相关破解,并发现这个所谓的破解就是个 .egg 文件,听说将其替换就能绕过未激活版本的设备限制,于是又稍微花了点时间研究这个所谓的破解是怎么实现的。

声明:本文基于技术研究角度,笔者不支持对商业软件的破解行为,也不会传播相关破解补丁