惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Security Latest
Security Latest
P
Palo Alto Networks Blog
AWS News Blog
AWS News Blog
NISL@THU
NISL@THU
T
Threatpost
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Latest news
Latest news
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
J
Java Code Geeks
P
Privacy International News Feed
阮一峰的网络日志
阮一峰的网络日志
S
Schneier on Security
博客园 - 聂微东
Project Zero
Project Zero
美团技术团队
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Scott Helme
Scott Helme
I
Intezer
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hacker News: Front Page
S
Security @ Cisco Blogs
博客园 - 司徒正美
O
OpenAI News
Last Week in AI
Last Week in AI
L
LINUX DO - 热门话题
酷 壳 – CoolShell
酷 壳 – CoolShell
SecWiki News
SecWiki News
月光博客
月光博客
S
Security Affairs
The GitHub Blog
The GitHub Blog
P
Privacy & Cybersecurity Law Blog
S
Secure Thoughts
V
V2EX
S
Securelist
F
Fortinet All Blogs
W
WeLiveSecurity
D
Docker
博客园 - 三生石上(FineUI控件)
Simon Willison's Weblog
Simon Willison's Weblog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
V
Visual Studio Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Webroot Blog
Webroot Blog
Engineering at Meta
Engineering at Meta

繁星点点

最新轻量级龙虾部署教程 通过netboot.xyz重装系统 giffgaff卡保号教程 Llinux系统中全新透明代理方案(可代理所有出站流量) tailscale开启子网路由常见的坑 解决UFW和Docker的问题 使用PGP的非对称算法加密文件 NSSM工具把任意exe程序注册为Windows后台服务 轻量级简约端口转发rinetd 安卓IDE的安装和使用 IP信息查询网站汇总 热点共享代理教程 SSH使用密钥认证登录详细解释 Debian系统公网IP出口切换指南,适用多IP服务器 Windows系统安装Scoop包管理器 安卓Flutter开发学习笔记 使用手机搭建节点服务端 关于github提交记录泄露真实邮箱的处理办法 anytls协议部署教程 caddy给域名用上ECH加密 通过gitlab流水线自动备份仓库 通过CF-Workers代理访问网站 低配机器使用alpine系统跑docker 端口敲门教程 3x-ui面板通过api管理示例 nmap端口扫描 数据库常用命令 snap和winget包管理器 Git推送GitHub常用命令 😩😩😩学不完,根本学不完😩😩😩 使用CDN后获取访客真实IP 一些用于网络测试的下载测速文件 纯v6网络访问v4站点最简单的方法 服务器配置SSH密钥登录 windows重装系统教程 Docker部署哪吒监控 Github-Actions默认用户变量GITHUB_TOKEN的提权语法 给站点套CFT的一些坑 解决CF反代Docker失效的问题 使用py3快速启动一个文件上传和下载的接口 ios系统最新免拔卡使用tiktok方法 clash手搓配置最全协议示例详解 为IP地址申请免费证书并开启HTTPS 实用网站收藏 纯CSS实现剧透效果 在CloudflareWAF中屏蔽国内浏览器 网络安全之百度URL欺骗漏洞分析和复现 超级强大的ansible批量管理主机运维工具使用教程 收集整理的最新的常用VPS脚本工具 无法注册TG账号和国内号码接收不到验证码详细解决方案 国内环境安装xui面板 免费接码网站合集 完整的网络状态码列表 关于xui面板报错无法监听127.0.0.1:62789的问题 Xboard面板常见问题 项目编译构建文档 ios最新美区ID注册方法 V2board前后端分离 Markdown语法教程 Github加速 Docker镜像加速和离线安装 Liunx配置wrap 代理工具和SSH工具推荐 常用代码记录
OpenWrt固件编译
2025-11-16 · via 繁星点点

介绍

OpenWrt 是一个 基于 Linux 的路由器操作系统,专门为嵌入式设备(路由器、NAS、小型网关设备等)设计。

本篇教程基于immortalwrt,immortalwrt 是基于 openwrt 开发的优化版本,是专门针对中国大陆环境优化的版本。国内用户基本都使用这个版本。

项目地址:https://github.com/immortalwrt/immortalwrt

immortalwrt 在线构建

官方提供的网页在线构建叫ImageBuilder,不是编译源码,而是借助官方的服务器资源,使用预编译好的SDK,快速选择包然后生成固件。优点是构建很快,缺点是自定义程度不是很高,但是常用的配置都可以自定义,例如提前安装插件,配置网口信息和防火墙什么的。

官方在线编译地址:https://firmware-selector.immortalwrt.org

必备软件

curl luci-theme-argon luci-i18n-homeproxy-zh-cn luci-i18n-ttyd-zh-cn luci-i18n-diskman-zh-cn luci-i18n-filemanager-zh-cn luci-i18n-package-manager-zh-cn luci-i18n-firewall-zh-cn

当你安装一个插件包时,他会自动下载所需的软件和依赖,所以只需添加对应插件的汉化包即可。

ImmortalWrt软件包查询(注意替换实际的版本和设备架构):

https://downloads.immortalwrt.org/releases/24.10.4/packages/x86_64/luci/index.json

初始化构建脚本

要修改的地方请去掉注释

#!/bin/sh
exec >/tmp/setup.log 2>&1

###########################################################
#                  自 定 义 配 置 区 域
###########################################################

### 系统后台密码(为空则不修改)
root_password="admin"

### LAN 的 IPv4 地址(也是后台地址,例如 192.168.2.1)
lan_ip_address="192.168.2.1"

### LAN 的子网掩码(例如 255.255.255.0)
# lan_netmask="255.255.255.0"

### LAN 的 IPv4 网关(可为空)
# lan_gateway="192.168.1.1"

### LAN 的 DNS(多个 DNS 可空格分隔,如 "8.8.8.8 1.1.1.1")
# lan_dns="8.8.8.8 223.5.5.5"

### DHCP 是否开启(1=开启,0=关闭)
# lan_dhcp_enable="1"

### DHCP 起始地址
# lan_dhcp_start="100"

### DHCP 地址池数量
# lan_dhcp_limit="150"

### DHCP 租约时间
# lan_dhcp_leasetime="12h"

### WiFi 名称 SSID(为空则不修改)
# wlan_name="ImmortalWrt"

### WiFi 密码(≥ 8 位才生效)
# wlan_password="12345678"

### PPPoE 宽带账号(为空则跳过)
# pppoe_username=""

### PPPoE 宽带密码
# pppoe_password=""

###########################################################

# ------------ root 密码 ------------
if [ -n "$root_password" ]; then
  (echo "$root_password"; sleep 1; echo "$root_password") | passwd >/dev/null
fi

# ------------ LAN 基础配置 ------------
if [ -n "$lan_ip_address" ]; then
  uci set network.lan.ipaddr="$lan_ip_address"
fi

if [ -n "$lan_netmask" ]; then
  uci set network.lan.netmask="$lan_netmask"
fi

if [ -n "$lan_gateway" ]; then
  uci set network.lan.gateway="$lan_gateway"
fi

# DNS
if [ -n "$lan_dns" ]; then
  uci delete network.lan.dns 2>/dev/null
  for d in $lan_dns; do
    uci add_list network.lan.dns="$d"
  done
fi

uci commit network

# ------------ DHCP 设置 ------------
if [ -n "$lan_dhcp_enable" ]; then
  uci set dhcp.lan.ignore=$([ "$lan_dhcp_enable" = "1" ] && echo 0 || echo 1)
fi

[ -n "$lan_dhcp_start" ] && uci set dhcp.lan.start="$lan_dhcp_start"
[ -n "$lan_dhcp_limit" ] && uci set dhcp.lan.limit="$lan_dhcp_limit"
[ -n "$lan_dhcp_leasetime" ] && uci set dhcp.lan.leasetime="$lan_dhcp_leasetime"

uci commit dhcp

# ------------ WIFI 配置 ------------
if [ -n "$wlan_name" ] && [ -n "$wlan_password" ] && [ ${#wlan_password} -ge 8 ]; then
  uci set wireless.@wifi-device[0].disabled='0'
  uci set wireless.@wifi-iface[0].disabled='0'
  uci set wireless.@wifi-iface[0].encryption='psk2'
  uci set wireless.@wifi-iface[0].ssid="$wlan_name"
  uci set wireless.@wifi-iface[0].key="$wlan_password"
  uci commit wireless
fi

# ------------ PPPoE 宽带拨号 ------------
if [ -n "$pppoe_username" ] && [ -n "$pppoe_password" ]; then
  uci set network.wan.proto=pppoe
  uci set network.wan.username="$pppoe_username"
  uci set network.wan.password="$pppoe_password"
  uci commit network
fi

echo "All done!"

构建完成后下载对应的固件包刷入系统即可。

immortalwrt 基于源码编译

使用干净的Debian 12或者ubuntu 22.04系统,国外网络通畅,有40G以上的空闲存储空间。注意源码编译很费时间,4H8G的配置需要大约2小时以上才能编译好。

1:安装依赖

sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y \
  ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
  bzip2 ccache clang cmake cpio curl device-tree-compiler ecj fastjar flex gawk gettext \
  gcc-multilib g++-multilib git gperf haveged help2man intltool libc6-dev-i386 libelf-dev \
  libglib2.0-dev libgmp-dev libltdl-dev libmpc-dev libmpfr-dev libncurses-dev libpython3-dev \
  libreadline-dev libssl-dev libtool libyaml-dev lld llvm lrzsz genisoimage \
  ninja-build p7zip-full patch pkgconf python3 python3-pip python3-ply python3-docutils \
  python3-pyelftools qemu-utils re2c rsync scons squashfs-tools subversion swig texinfo \
  uglifyjs unzip wget nano xmlto xxd zlib1g-dev upx zstd

2:下载对应tags的源码(以v24.10.4为例)

后续步骤建议切换为普通用户,不要用root用户编译。

git clone -b v24.10.4 --single-branch --filter=blob:none https://github.com/immortalwrt/immortalwrt

3:进入项目目录

cd immortalwrt

4:获取最新软件包清单

./scripts/feeds update -a

5:安装软件包符号链接

./scripts/feeds install -a

6:配置固件信息

make menuconfig

这一步很重要,前三个选项分别是目标系统 - 子架构 - 目标机型。根据你的实际设备来选。

然后第四个选项Target Images是修改固件配置的,其中Root filesystem partition size根文件系统分区大小建议修改,根据你设备的存储空间来选择,这里的值就是最大存储空间。

其他配置都是可选的,其中luci选项中可以预安装一些插件包。

来自某大佬的详细说明:https://youtu.be/czUW52M62Sw?t=2432

7:修改LAN口IP地址等等信息

可以在这里查看默认值:https://github.com/immortalwrt/immortalwrt/blob/master/package/base-files/files/bin/config_generate

nano package/base-files/files/bin/config_generate

8:编译固件

单线程编译

make -j1 V=s

或者多线程编译

make -j$(nproc --ignore=1)

编译出来的固件在bin目录下

9:重新编译说明

如果需要重新编译 则执行make distclean清理一些残留和工具链等等,然后再从第四步重新开始。


VirtualBox虚拟机运行immortalwrt

1:选择x86/64型号,编译后,下载COMBINED (EXT4)格式的镜像,并解压到下载目录

2:在文件目录下打开 PowerShell

  • 将镜像转换成VDI格式
& "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" convertfromraw `
    "immortalwrt-24.10.4-f726c678216d-x86-64-generic-ext4-combined.img" `
    "immortalwrt.vdi" `
    --format VDI

3:打开VirtualBox,新建虚拟机,OS选择Linux,然后选择Other Linux,然后指定虚拟硬盘,选择使用已有的虚拟硬盘文件,选择immortalwrt.vdi文件,然后点击完成,然后设置里找到网络,选择桥接网卡,勾选Virtual Cable Connected,注意你的openwrt系统的LAN口IP地址要和电脑在同一网段。网关和DNS也要和电脑的一致。

系统内修改网络配置的命令:

vi /etc/config/network
/etc/init.d/network restart

4:浏览器进入LAN口IP地址,密码是初始化脚本中设置的密码。

X86主机设备将镜像写入到硬盘

先将镜像烧录到U盘,然后使用U盘启动进入到openwrt系统,然后使用DD命令写入镜像,就可以拔掉U盘运行openwrt系统了。

查看U盘和目标硬盘

lsblk -f

例如 U 盘是 /dev/sdb 硬盘是 /dev/sda

如果目标硬盘有被挂载则需要卸载,例如之前装了系统之类的

umount /dev/sda1
umount /dev/sda2
umount /dev/sda3

检查是否卸载成功

mount | grep sda

如果返回为空就代表卸载成功了

写入镜像(注意替换实际的U盘和硬盘)

dd if=/dev/sdb of=/dev/sda bs=4M conv=fsync

如果没报错,并且看到了两行数字就代表成功了

强制刷新缓存

sync

命令解释:

if=/dev/sdb :输入源,U 盘设备

of=/dev/sda :输出目标,硬盘/闪存设备

bs=4M :每次写入 4M,提高速度

conv=fsync :写完后刷新缓存,确保数据落盘

sync :再次确保所有数据写入完成