跳转至

博客

Openwrt Mesh 和快速漫游配置

背景

家里原本有两个路由器,一个负责楼上,一个负责楼下。但是仍然有许多覆盖不到的地方,比如厨房。并且更影响体验的是楼上楼下的 WIFI 使用不同的 SSID,手机无法很好地自动切换。经常是楼上连接到楼下的网络导致信号很差。因此决定对家里的网络改造一番。

以前听过 mesh 这个技术,可以将很多台路由器通过无线连接起来,共同提供一个网络。于是去搜索了 openwrt 是否支持 mesh,发现是可以的。并且经过进一步的了解,纠正了自己之前对无线网络的一些错误认知。

  • 首先,mesh 解决的并不是如何让设备自动切换网络,而是如何进行无线组网,可以避免布线的困难。mesh 节点通过同一个信道的的无线相互连接,而通过另一个无线提供 WIFI。
  • 快速漫游(fast roaming) 协议,准确来说叫做 802.11r 协议,可以减少设备切换无线网络的耗时。

硬件设备上,我选择使用小米路由 3G 来搭建,主要是因为硬件配置上在 wifi5 的路由器中算是很不错的了,且某鱼上一个只需要 50 元。于是又买了两个,加上原本的,现在有 4 台 openwrt 路由器,一个红米 AC2100 作为主路由,3 个 R3G 作为 AP 节点。

为了方便配置还实现了一个自动配置脚本放在 github:TheRainstorm/my-openwrt-config (github.com)

openwrt DNS 详解

openwrt DNS 说明

参考:

  • openwrt DNS 和 DHCP 配置均位于/etc/config/dhcp
  • openwrt 使用 dnsmasq 和 odhcpd。它们功能如下:

    image-20220816220011245

  • 总结来说:
    • dnsmasq 将自己设置为 DHCP 客户端的 DNS
    • dnsmasq 使用缓存来提升性能。到达的 dns 请求如果没有命中则转发给上游 DNS

      Dnsmasq serves as a downstream caching DNS server advertising itself to DHCP clients. This allows better performance and management of DNS functionality on your local network. Every received DNS query not currently in cache is forwarded to the upstream DNS servers.

linux 系统迁移

linux 系统迁移

买了一条三星的 PM9A1 SSD,想要把原本的 linux 迁移到新的固态上。

系统信息

  • 原本的系统(windows 和 ubuntu 双系统)安装在固态上,包含 EFI 分区。
  • 系统引导方式:EFI/GPT(其它方式有 BIOS/MBR, BIOS/GPT)

    BIOS system

    On a BIOS/GPT system there is no MBR and therefore no place to store the loader. The GPT partition specification allows for an unformatted partition of the BIOS boot partition type (0xEF02). The size of this partition can be as small as 1 mebibyte. The Calamares installer uses a fixed size of 32 mebibyte. On a BIOS/MBR system a part of the bootloader is written to the Master Boot Record for the primary disk.

vnc 和 rdp 远程

说明

写这个的原因是,网络上的教程真的太烂了。比如:

  • 没有说明就默认用 centos
  • 默认是服务器版本的 Linux 发行版,没有桌面环境
  • 桌面环境默认用 xfce,而很少有 gnome 的
  • vnc 各种版本,默认只说明其中一种
  • xstartup 没有任何说明,如何配置

各种 remote desktop 软件,可以看到最近更新时间

读 x86 手册记录

常见看名字猜测不了功能的指令

lea //Load Effective Address

test //Logical Compare, Computes the bit-wise logical AND of first operand 
 //(source 1 operand) and the second operand (source 2 operand) and 
 //sets the SF, ZF, and PF status flags according to the result. The result is then discarded.

incl //Adds 1 to the destination operand, while preserving the state of the CF flag. 
  //The destination operand can be a register or a memory location. This instruction 
  //allows a loop counter to be updated without disturbing the CF flag. (Use a ADD 
  //instruction with an immediate operand of 1 to perform an increment operation that does updates the CF flag.)

如何实现网络自由

如何实现网络自由:-)

这里说的网络自由,是指通过网络工具极大地便利生活的某些方面。这篇文章是我自己对折腾路由器刷机、openwrt、ipv6 的总结,并尽量说明了各种玩法的实际用途。其中有些操作确实给我带来了极大便利,比如其中使用 iSCSI 通过网络挂载其它设备的硬盘,这充分解放了我只有 500GB 的轻薄本。在上面安装游戏后,又可以实现在不同设备上无缝玩同一个游戏的体验。

记录红米 AC2100 折腾

第一次尝试自己刷路由器,网上搜索了很多资料,忙活了 2 天,期间差点以为将路由器刷成砖了。

红米 AC2100 这款路由器确实算是很火,网上有很多资料。刚开始在恩山论坛查找各种资料,但是觉得恩山论坛的帖子有点乱,对新手不太友好。看精华帖时帖子之间的联系性不大,要是有一个板块进行总结性的介绍就好了。

不同情况下的内网穿透

技术说明
  • ddns:将动态的公网 ip 地址绑定到一个域名上
  • 通过 VPN 访问内网:在互联网上建立一个隧道,通过隧道可实现访问内网设备
  • 端口转发:将发送给 A 的某个端口的数据转发给 B 的某个端口。对于访问者来说,访问的是 A,实际响应的是 B
网络状况

设备 A 位于路由器后,设备 B 想要远程连接 A。以下是设备 B 分别使用 ipv4 和 ipv6 访问 A 时不同情况的处理方式。

移动光猫开启 ipv6

  1. 移动光猫使用桥接模式 + 路由器使用拨号上网
  2. 移动光猫开启 ipv6 步骤 1. 删除原本 ipv4 的 PPPoE 2. 协议选择 ipv4/ipv6,创建新的PPP连接

使用整数位运算计算 div10

使用整数位运算计算 div10,得到舍入到整数的精确值。得到了一个 magic number

unsigned int div10(unsigned short x){
 //return x/10
 unsigned int t = x<<16;
 t = (t>>4) + (t>>5);
 t = t + (t>>4) + (t>>8) + (t>>12) + (t>>16);

 t += 6554;  //should in [409.6, 6553.6]
 unsigned int r;
 r = t>>16;
 return r;
}

记一次路由器刷出问题修复过程

前言

起因是想在 openwrt 上装上openclash插件,但路由器空间不够了(路由器为 mi4a 千兆版,有一个 16M 的 NOR flash。通过在编译时设置块大小为 512KB,成功安装了zerotier,wireguard,python等软件,编译的镜像大小为 13,894,754 B),因此参考官方教程:[OpenWrt Wiki] Saving firmware space and RAM,在编译时关闭了一些内核相关的选项,并将块大小设置为了 1MB。最后成功生成镜像,大小为 14,943,330 B。

可没想到在更新系统后路由器无法正确启动,于是需要先使用小米官方工具恢复,然后再重刷 openwrt 系统。但考虑到之后如果要多次尝试的话,每次失败都需要先恢复官方系统然后重新刷比较麻烦。于是这一次重装,我选择了刷breed引导程序。这样,下次刷失败后便可以通过 breed 直接重刷固件。

然而,不知是否是因为操作过程中的一个失误,我使用 breed 刷 openwrt 会失败,路由器会无限重启。并且在刷回官方固件后,甚至无法上网。最后,我从原厂固件直接刷回了 openwrt,但是却发现 openwrt 中的5GHz 的无线最大发射功率 (Maximum transmit power) 居然变为了 1mW(3dBm),这导致路由器的 5G 信号非常弱,即使是 1m 的距离,信号也很弱。于是我各种尝试去修复这个问题,以下是记录的过程。