在 DN42 中使用 FlapAlerted 抑制 Flapping 的插图

在 DN42 中使用 FlapAlerted 抑制 Flapping

DN42 全称 Decentralized Network 42(42 号去中心网络),是一个大型的 VPN 网络。但是与其它传统 VPN 不同的是,DN42 使用了大量在互联网骨干上应用的技术(例如 BGP),可以很好的模拟一个真实的网络环境。 在真实的互联网中,各个运营商会使用不同厂商的硬件路由器互相交换路由信息,例如思科(Cisco)、瞻博(Juniper)、诺基亚(Nokia)、Arista、华为等。类似的,在 DN42 中,不同参与者也会选择不同的 BGP 软硬件,最常用的是 Bird 和 FRRouting ,但也有使用 Mikrotik、Ubiquiti EdgeRouter 甚至真正的商用路由硬件。 由于大家选择的 BGP 软硬件不同,并且即使使用同一款软件也会用不同的方式配置内网,所以当大家的网络连接在一起,有时候就会出一些奇怪的问题,例如 BGP Flapping。 真实互联网和 DN42 中的 BGP Flapping BGP Flapping 指的是同一条路由的路径在短时间内发生大量变化,一般源于一个网络反复广播、撤销广播这一条路由。...

用 Open5GS 搭建合法的 LTE 网络

蓝天移动(自建 LTE 网络) 系列文章目录: $100,DIY 搭建合法的 LTE 网络 用 Open5GS 搭建合法的 LTE 网络 (当前文章) 在上一篇文章中 ,我用美国的 CBRS 频段和 Magma LTE 核心网软件 搭建了一套合法的 LTE 网络。 关于「合法」:我不是律师或者无线电专家。根据我对相关政策法规的研究,我的整套配置应当是合法的。但如果你按照本文操作后遇到了法律问题,我不负任何责任。 我当时选择 Magma,是因为我买的 CBRS LTE 基站原本用于 Helium Mobile 网络,而 Nova Labs/Helium Mobile 使用的 CBRS 核心网就是 Magma 。这保证了 Magma 一定兼容我手上的基站。但是,从在 Homelab 里自建核心网的角度来考虑,Magma 存在这些问题: Magma 的核心网依赖 Docker 或者 Kubernetes 进行部署,难以用常规的方式(例如 systemd 服务)在容器外部署。而我是 NixOS 用户,希望尽量避免臃肿的 Docker 容器,而是用 systemd 服务管理系统上的服务。...

在内网中免 StosVPN 使用 SideStore

前言 SideStore 是一款常用的 iOS 应用侧载工具,可以绕过 App Store 安装第三方应用。它的工作原理是用你的 Apple ID 获取免费的苹果开发者证书,给你要安装的应用签名,从而让应用可以在 iOS 设备上正常运行。 然而,苹果为了维护其对 iOS 生态系统的控制,阻止第三方应用商店使用开发者证书大规模地绕过限制,对开发者证书设置了 7 天的过期时间。用户需要定期获取新的开发者证书,重新给应用签名,才能一直使用自己安装的第三方应用。 传统的侧载工具,例如 AltStore,都依赖电脑上的 iTunes 等软件进行重新签名的操作。但 SideStore 与其它侧载工具不同,它只有首次安装时需要电脑辅助。安装完成后,SideStore 可以自己模拟一台安装了 iTunes 的电脑,让 iOS 系统通过虚拟网络与其通信,从而实现无需电脑就能给应用重新签名,甚至安装新的第三方应用的效果。 SideStore 的虚拟网络一般可以用下面两种方式实现: WireGuard:...

从零开始实现 Nix 对数函数库 的插图

从零开始实现 Nix 对数函数库

从零开始实现 Nix 数学库 系列文章目录: 从零开始实现 Nix 三角函数库 从零开始实现 Nix 对数函数库 (当前文章) (题图来自: 维基百科 - 对数 ) 起因 由于一个有点离谱的原因(计算 VPS 间的物理距离来估算网络延迟),我 用 Nix 实现了一个有点离谱的三角函数库 。我把三角函数库 发布到 GitHub 上 后,发现居然有人用!看来我的需求也不算太离谱。 在仓库的 Issues 里, 有用户建议我给这个数学库添加一些指数/对数函数支持 ,例如 exp , ln , pow 和 log 。 因为从零开始实现这些基础函数也挺有趣的,所以我就抽空研究了一下。这四个函数中,有些难度的是 exp 和 ln 。 pow 和 log 都可以用另外两个函数转化出来: log ⁡ n x = ln ⁡ x ln ⁡ n p o w ( x , n ) = x n = exp ⁡ ( n ∗ ln ⁡ x ) \begin{aligned} \log_n x &= \frac{\ln x}{\ln n} \\ pow(x, n) = x^n &= \exp (n * \ln x) \end{aligned} lo g n ​ x p o w ( x , n )...

$100,DIY 搭建合法的 LTE 网络

蓝天移动(自建 LTE 网络) 系列文章目录: $100,DIY 搭建合法的 LTE 网络 (当前文章) 用 Open5GS 搭建合法的 LTE 网络 是的,你没看错,不需要法拉第笼等信号屏蔽措施,只需要大概 100 美元,你就可以在(美国的)家里搭建一个合法的 LTE 网络,可以 24 小时连续发射。 关于「合法」:我不是律师或者无线电专家。根据我对相关政策法规的研究,我的整套配置应当是合法的。但如果你按照本文操作后遇到了法律问题,我不负任何责任。 CBRS 频段:美国的免授权 LTE/5G 频段 自建 LTE 网络的难点不在技术部分,而是在于合法地获取无线电频谱资源。软件方面,早在 2014 年就有了 srsRAN 等基于 SDR(软件定义无线电)的 LTE 发射方案,也有 Magma 、 Open5GS 等开源的核心网软件。 但是在无线电频谱方面,LTE、5G 等移动网络使用的无线电频率都处在授权频段,需要向当地政府的无线电管理机构提出申请,并缴纳昂贵的频段使用费(一般根据覆盖范围和当地人口数)...

用 Nix 编译自定义 Android 内核

前言 我现在使用的手机是 Motorola Edge+ 2023,一台 Android 手机。为了更好的自定义手机的功能,我解锁了手机的 Bootloader,并且获取了 Root 权限,以便安装 LSPosed 以及基于 LSPosed 的各种插件。 我使用的 Root 方案是 KernelSU ,通过修改 Linux 内核,从而允许且只允许指定程序获取 Root 权限。虽然 KernelSU 官方提供了适配大部分手机的 GKI 内核镜像,但我给手机刷了不兼容 GKI 的 LineageOS,所以只能自己编译内核。 由于直接修改内核镜像的难度较大,我们一般是从手机厂商获取以 GPLv2 协议开源的内核源码,按照 KernelSU 的官方教程 进行修改后,再编译成完整的内核。 注:现在有一种新的 Root 方案 APatch ,通过直接修改内核镜像来实现类似 KernelSU 的功能。我没试过 APatch,但如果你不想自己编译内核,可以尝试一下。 由于 KernelSU 使用广泛,有一些开发者编写了 GitHub Actions 的 Workflow,例如 https://github....

使用 Astro.js 重构我的博客

前言 差不多四年半前, 我把博客系统从 Typecho 迁移到了 Hexo 。Hexo 是一款静态网页生成器(Static Site Generator),本身无需连接 MySQL、PostgreSQL 等数据库动态生成网页,而是根据给定的 Markdown 文章文件一次性生成所有的 HTML 网页。相比于 WordPress、Typecho 等动态方案,预先生成静态网页不需要服务器支持 PHP 等动态语言,对服务器的性能压力更低。 但是 Hexo 本身并不新, 它的第一个版本发布于 2013 年 7 月 。当时以 React 为首的单页应用框架刚刚发布(React:2013 年 5 月),Webpack 等现代前端流程必须的框架也还不存在(Webpack:2014 年 2 月),因此 Hexo 理所当然的没有用上这些工具,而是停留在拼接 HTML 字符串的时代。Hexo 常用的几个主题模板系统 EJS,Pug 等都是基于字符串拼接的模板系统。 没有了现代前端流程,就意味着: 我需要手动处理拼接 HTML 的所有细节。每次修改模板都让我想起写 PHP 的美好时光。...

NixOS 系列(五):制作小内存 VPS 的 DD 磁盘镜像 的插图

NixOS 系列(五):制作小内存 VPS 的 DD 磁盘镜像

NixOS 系列文章目录: NixOS 系列(一):我为什么心动了 NixOS 系列(二):基础配置,Nix Flake,和批量部署 NixOS 系列(三):软件打包,从入门到放弃 NixOS 系列(四):“无状态”操作系统 NixOS 系列(五):制作小内存 VPS 的 DD 磁盘镜像 (当前文章) 黑色星期五已经过了,相信有一些读者新买了一些特价的 VPS、云服务器等,并且想在 VPS 上安装 NixOS。但是由于 NixOS 的知名度不如 CentOS、Debian、Ubuntu 等老牌 Linux 发行版,几乎没有 VPS 服务商提供预装 NixOS 的磁盘镜像,只能由用户使用以下方法之一手动安装: 自行挂载 NixOS 的安装 ISO 镜像,然后手动格盘安装。 由于你可以在 NixOS 安装镜像的环境中随意操作 VPS 的硬盘,这种方法自由度最高,可以任意对硬盘进行分区,指定文件系统格式。但是,使用这种方法前,你的主机商需要在以下三项前提中满足任意一项: 主机商直接提供 NixOS 的 ISO 镜像挂载(即使是很老的版本)...

从零开始实现 Nix 三角函数库 的插图

从零开始实现 Nix 三角函数库

从零开始实现 Nix 数学库 系列文章目录: 从零开始实现 Nix 三角函数库 (当前文章) 从零开始实现 Nix 对数函数库 (题图来自: 维基百科 - 三角函数 ) 起因 我想计算我的所有 VPS 节点之间的网络延迟,并把延迟写入 Bird BGP 服务端的配置中,以便让节点之间的数据转发经过延迟最低的路径。但是,我的节点截至今天有 17 个,我不想在节点之间手动两两 Ping 获取延迟。 于是我想了一种方法:标记所有节点所在物理地点的经纬度,根据经纬度计算物理距离,再将距离除以光速的一半即可获得大致的延迟。我随机抽样了几对节点,发现她们之间的路由都比较直,没有严重的绕路现象,此时物理距离就是一个可以满足我要求的近似值。 因为我的节点上用的都是 NixOS,统一使用 Nix 语言管理配置,所以我需要找到一种在 Nix 中计算这个距离的方法。一种常用的根据经纬度算距离的方法是半正矢公式(Haversine Formula),它将地球近似为一个半径为 6371 公里的球体,...

解决 Pipewire 被 SIGKILL 的问题 的插图

解决 Pipewire 被 SIGKILL 的问题

症状 我频繁遇到 Pipewire 音频框架突然停止运行的情况: 问题通常出现在我的笔记本电脑连接/断开电源的时候,此时我的电脑会因为切换性能模式卡顿一小段时间; systemctl --user status pipewire.service 只能看到 Pipewire 进程被 SIGKILL 信号终止,没有其它有用的日志信息; coredumpctl 和 dmesg 里也找不到 Coredump 内存转储事件的记录。 原因 Pipewire 进程运行时具有实时优先级,其调度需求被最优先满足,以便及时处理音频数据,避免音频卡顿。Pipewire 提高进程优先级是通过它的 libpipewire-module-rt 模块请求系统中以 root 权限运行的 RTKit (Realtime Kit)服务,然后 RTKit 以特权修改进程优先级来达成的。 但是,如果一个具有实时优先级的进程出了 Bug,进入了死循环,那么它会占用所有的 CPU 资源。系统上绝大部分其它进程(包括但不限于 SSH 服务端,Xorg,还有你的 Shell)由于优先级更低,就无法得到任何 CPU 时间片,无法处理任何任务,...