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

推荐订阅源

GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
C
Check Point Blog
Stack Overflow Blog
Stack Overflow Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
WordPress大学
WordPress大学
博客园_首页
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Visual Studio Blog
L
LINUX DO - 最新话题
S
Security @ Cisco Blogs
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Help Net Security
Help Net Security
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
The GitHub Blog
The GitHub Blog
Schneier on Security
Schneier on Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
Jina AI
Jina AI
雷峰网
雷峰网
罗磊的独立博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 【当耐特】
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
V
V2EX
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Hacker News - Newest:
Hacker News - Newest: "LLM"
P
Proofpoint News Feed
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
O
OpenAI News
P
Proofpoint News Feed
H
Help Net Security
S
Securelist
Vercel News
Vercel News
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - 三生石上(FineUI控件)

繁星点点

最新轻量级龙虾部署教程 通过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 :再次确保所有数据写入完成