目 录CONTENT

文章目录

编译升级软路由openwrt踩坑

成培培
2026-07-03 / 0 评论 / 0 点赞 / 1 阅读 / 0 字

最近准备升级一下我的软路由器,毕竟已经用了五六年了,内核都升级了好几版,刚好前段时间修好了个小米路由器,可以拿它顶一顶,专心搞搞软路由,本以为会很顺利不料期间又踩了好多坑。。。

openwrt编译

五六年前是用的koolshare论坛大佬编译的一款高大全固件有很多插件,如今物是人非论坛也早已倒闭了,而且这几年发现我需要的插件其实就那么些,自己编译openwrt固件也不是什么问题,所以还是决定自己编译好了,之前写过相关教程:
编译适合自己的OpenWRT固件
但是期间还是踩了不少坑:
我一开始是准备用openwrt官方的源码:https://github.com/openwrt/openwrt
编译确实很顺利,但是安装后发现网卡没了,DHCP不工作,排查发现原来官方的默认配置很多网卡驱动都是没有勾选的,需要自己选择,比如我的kmod-igb驱动就没有,所以只好勾选上重新编译,折腾半天安装docker容器时又发现容器内部跟宿主机不通,排查又发现有可能是docker相关网络驱动没有,让我血压飙升,这毛胚房也太毛胚了,什么都没有,于是觉得放弃官方源码,改用https://github.com/immortalwrt/immortalwrt
看了一圈果然是符合中国宝宝体质,该有的驱动全都默认勾选了,而且自带中文该有的第三方插件都自带,省心很多,但是依旧踩到坑Root filesystem partition size设置的太小,插件选多了导致超过大小编译失败。
所以总结:编译时要检查常用驱动,Root filesystem partition size我直接设置到2048M

刷机

编译好的immortalwrt-x86-64-generic-ext4-combined-efi.img.gz传到/tmp/目录下,执行以下命令开始升级:

sysupgrade -n immortalwrt-x86-64-generic-ext4-combined-efi.img.gz

如果不带-n参数会保留/etc下的配置刷机,但是如果版本相差比较大就不建议保留了

修改LAN口配置

我的软路由器上有4个网口分别是:eth0、eth1、eth2、eth3
不知道为什么固件默认把eth2设为了WAN口,导致如果你把网线插到这个口上时是不能通过DHCP拿到IP的,所以先插eth0然后改物理设置eth0、eth1、eth2设为LAN口,eth3设为WAN口

增加磁盘

通过系统-挂载点里的功能新增挂载即可,会自动写到/etc/config/fstab配置文件中

docker网络

我本来准备创建自定义docker network,然后指定每个容器固定IP的,但是折腾了好久总有问题,不是容器访问不通网关,就是宿主机访问不到容器,最后还是解决用最原始的方式直接映射容器的端口到宿主机,但是这样有个问题,因为/etc/config/dockerd中配置了option iptables '1'让 Docker 自动接管 NAT + 放行规则”,结果在 OpenWrt 上刚好和 WAN 隔离模型冲突,导致不需要端口映射,外网直接就能访问所有docker映射出来的端口,很不安全,所以在使用-p参数映射端口时需要加上宿主机IP,例如:

docker run --restart=always --name filebrowser \
    -v /mnt/m2/filebrowser/srv:/srv \
    -v /mnt/m2/filebrowser/database.db:/database.db \
    -v /mnt/m2/filebrowser/database/filebrowser.db:/database/filebrowser.db \
    -v /mnt/m2/filebrowser/.filebrowser.json:/.filebrowser.json \
    -p192.168.5.1:8088:80 -d filebrowser/filebrowser

这样外网就不能直接用外网IP加8088端口直接访问filebrowser了,需要增加端口映射

0

评论区