前置工作

x86 架构中 先下载最新的 generic-ext4-combined-efi.img.gz

上传到 pvetmp 目录

解压

1
2
cd /tmp/wrt
gzip -d openwrt-24.10.1-x86-64-generic-ext4-combined-efi.img.gz

自定义镜像

先创建一个空的 raw 镜像文件
再把现有的东西 在复制进去的同时去修改文件 达到自定义的目的

创建空的镜像并分区挂载

1
2
qemu-img create -f raw openwrt_new.raw 1G
losetup /dev/loop2 openwrt_new.raw

分区时候 一个 efi 一个 data

1
2
cfdisk /dev/loop2
kpartx -a /dev/loop2

格式化分区并挂载

1
2
3
4
5
mkfs.fat -n EFI -F16 /dev/mapper/loop2p1
mkfs.ext4 -L OpenWrt /dev/mapper/loop2p2

mount --mkdir /dev/mapper/loop2p1 /tmp/wrt/new/boot
mount --mkdir /dev/mapper/loop2p2 /tmp/wrt/new/data

挂载现有镜像

1
2
3
4
losetup /dev/loop4 openwrt-24.10.1-x86-64-generic-ext4-combined-efi.img
kpartx -a /dev/loop4
mount --mkdir /dev/mapper/loop4p1 /tmp/wrt/old/boot
mount --mkdir /dev/mapper/loop4p2 /tmp/wrt/old/data
1

复制旧的文件到新系统

1
2
rsync -qaHAXS /tmp/wrt/old/boot/ /tmp/wrt/new/boot/
rsync -qaHAXS /tmp/wrt/old/data/ /tmp/wrt/new/data/

修复新系统引导

编辑 /tmp/wrt/new/boot/boot/grub/grub.cfg 如下

修改的有

  • PARTUUID d9d3bec6-66ad-6945-acc6-cce5071fce8fblkid 获取到的 /dev/mapper/loop2p2 的值
  • timeout 等待时间
1
2
3
4
5
6
7
8
9
10
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 --rtscts=off
terminal_input console serial; terminal_output console serial

set default="0"
set timeout="1"
search -l kernel -s root

menuentry "OpenWrt" {
linux /boot/vmlinuz root=PARTUUID=d9d3bec6-66ad-6945-acc6-cce5071fce8f rootwait console=tty1 console=ttyS0,115200n8 noinitrd
}

关闭wan防火墙

编辑 /tmp/wrt/new/data/etc/config/firewall

将 里面的 REJECT 改为 ACCEPT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
config defaults
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option synflood_protect '1'

config zone
option name 'lan'
list network 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'

config zone
option name 'wan'
list network 'wan'
list network 'wan6'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option mtu_fix '1'
...

修改网络配置

/etc/config/network 这玩意貌似启动成功后才有

等进入后用终端改吧

取消挂载完成修改

1
2
3
4
5
6
7
8
9
umount /tmp/wrt/new/boot/
umount /tmp/wrt/new/data/
kpartx -d /dev/loop2
losetup -d /dev/loop2

umount /tmp/wrt/old/boot/
umount /tmp/wrt/old/data/
kpartx -d /dev/loop4
losetup -d /dev/loop4

导入镜像

pve 将改为 uefi 启动

1
qm disk import [openwrt vm id] /tmp/wrt/openwrt_new.raw local

pve ip 设置

🕊

Q&A

主路由重启后ipv6未更新情况

ipv6 有效期很长 然而主路由拨号获得了新的之后 老的不会自己失效

这就导致无网络连接了

临时先以计划任务的的模式去判断 再去重启网口

*/15 * * * * /data/scripts/check_wan6_count_auto_restart.sh

1
2
3
4
5
6
7
8
#!/bin/sh

ipv6_count=$(ip -6 addr show dev eth3 | grep inet6 | grep -v fe80:: | wc -l)

if [ "$ipv6_count" -ge 2 ]; then
logger -t custom_scripts_wan6 "ipv6 count: $ipv6_count restart"
ifup wan6
fi

再准备研究监听逻辑

参考