标签归档:openwrt

N5105小主机跑虚拟机openwrt主路由高负载软重启,尝试解决办法

这个小主机是去年买的,一直没时间去折腾,最近才开始弄。

目前使用它装了PVE,开一个Openwrt虚拟机当家里的主路由,开一个LXC容器专门跑docker。

LXC容器很稳定,就是openwrt会不定时重启,经过一段时间的测试,发现重启都发生在高负载(高连接数)的时候,openwrt上开了日志转存也没有记录到任何错误信息。在PVE上查看虚拟机运行日志,也没有查到任何有用信息。openwrt已经重启了,但PVE上显示此虚拟机持续运行时间并没有归零。

看来是遇到很多人都在说的N5105的重启问题了,V2论坛上有一篇贴子说得很详细。

目前我的PVC内核已经升级到最新的 Linux 6.2.6-1-pve

看来之前人们说的升级内核并没有解决问题。

我已经按贴子里说的办法,升级cpu微码到最新的 0x24000024

希望能解决问题吧。

关于如何升级微码,可查看这篇帖子


2023-4-7更新:已稳定运行27小时,其间有一半左右时间是在高速下载,没有再发生软重启


已稳定运行接近四天,期间有过PT满速下载的情况,CPU最高占用达58.9%(主路由并开了openclash分流,下PT时压力较大),应该可以认为已通过升级微码解决问题了。

我会继续跟踪。


4/13更新 已持续运行7天,期间正常下PT,基本可以认为软重启问题已解决

说说软路由openwrt的几种升级办法

软路由openwrt如果想和普通硬路由一样升级系统且保留配置,有两个前提条件

  • 系统为squashfs格式
  • 升级系统包和原系统分区表相同,分配的硬盘大小相同。

如果你满足上述条件,可以在luci后台升级页面直接升级,其要求升级包为sysupgrade 格式,但实测编译出来的完整系统包也是可以正常升级的,文件名为 openwrt-x86-64-generic-squashfs-combined.img.gz,升级包是不需要解压的,当然,你解压了也是可以的,只是没必要,其在升级过程中发现升级包为压缩格式会自动解压的。

页面升级是最方便的办法,如果你对命令行情有独钟,当然也可以选择命令升级,ssh登陆路由器,把升级包放到 /tmp 目录(本地scp上传或wget下载随意),之后执行 sysupgrade /tmp/openwrt-x86-64-generic-squashfs-combined.img.gz 进行升级,同样,固件包也是不需要解压的。

还有一种办法就是直接使用dd命令写入,此办法没法保留配置,如要保留,请先导出配置,升级完成后再导入回去。不仅适用于squashfs格式的固件,ext4格式的固件也可以。

把解压后的img文件上传到/tmp文件夹,命令如下(注意文件名要改为你自己的,你的文件名不一定和我一样,引导硬盘/dev/sda也要改成你自己的)

dd if=openwrt-x86-64-generic-squashfs-combined.img of=/dev/sda
reboot

如果发现你的tmp空间(其实就是虚拟机内存空间)不够放解压后的文件,你也可以直接上传压缩包边解压边写入

gzip -dc /tmp/openwrt-x86-64-generic-squashfs-combined.img.gz | dd of=/dev/sda

照例reboot重启。

另外还发现一个问题,保留配置升级后后台和ssh登陆不上去,提示密码错误,我直接在虚拟机后台输入passwd命令更改密码,输入原来的密码其又提示“password not change” 密码没有改变?但神奇的是再使用相同密码登陆就能成功了,不知道是什么奇怪的bug,如果你也有相同问题,也可以和我用同样办法试试。如果你是物理机裸装openwrt,就只能接显示器接键盘进行这步操作,哈哈,虚拟机就这点方便~

主路由openwrt搭建wireguard服务时外网无法连接的一个可能原因

最近使用wireguard给家里和公司的网络远程组网,两者都是使用openwrt路由器,并且都有公网IP,具体组建过程就不细说了,网上已经有很多详细的教程了。

这里和说下内网连接正常,外网连接不上的一个可能的原因:没有添加路由器端口映射!是的,你没有看错,即使双端都是主路由,它也不会自动添加端口,要你手动添加!

还有一个问题,如果组建好了之后只能连接上wireguard内网的IP,而各自的局域网网段无法互联互通,请为wireguard接口设置一个VPN防火墙区域(为了安全,不建议直接使用Lan区域),出站、转发、入站 都选择接受,允许转发到目标区域:允许从源区域转发: 都勾选Lan,并勾选上MSS钳制。如下图所示

编译openwrt构建的环境如果时间久远,最好源码都删除重新拉取

大概一年前,我在我的独立服务器上构建了openwrt的编译环境,现在构建环境比较之前方便很多,因为有P3terx大佬构建的docker镜像,安装完docker之后一键装好

docker run \
    -itd \
    --name openwrt-build-env \
    -h P3TERX \
    -p 10022:22 \
    -v ~/openwrt:/home/user/openwrt \
    p3terx/openwrt-build-env

我也是使用的这个镜像,之后成功编译出了我所需要的固件。

最近又在弄一些新功能,需要重新编译一版新的固件,就连接上独服使用这个环境重新编译,没想到编译了N遍都是失败!这个docker容器之前是成功编译出固件的,成功之后关闭,没有任何修改。我把我所能想到的一切问题都检查了,都没有问题。

后来一气之前把此容器删除,之前数据都不要了(docker就这点方便,重建非常容易。)重新拉取编译,花了点时间重新配置,一下就成功编译出来了。

之前那个容器,我把一切都更新了,但还是不行,建议编译openwrt构建的环境如果时间久远,最好源码都删除重新拉取,反正再docker环境,重建也很方便不是吗?

2欧闲置,搭个openwrt的源镜像造福大家

自己这阵在学习(折腾)openwrt,其官方源国内连接实在蛋痛,只好自己搭个镜像源来用,刚好2欧闲置,就用它来弄好了。
最初打算是全部文件本地存放,定期同步,没想到wget了12小时后160G硬盘满了,而只下载了一半左右。。。
没办法,只好把已下载的东西全部删除,做个反代好了
目前已经弄好,放出来方便大家,如果你也有使用openwrt官方源的困扰,可以试下我这个镜像源
http://openwrt.skywing.me/

已装WINDOWS,此镜像已经失效!