产品特色
编辑推荐
极企科技联合创始人力作
OpenWrt社区经理Gregers Petersen亲自推荐
本书主要从OpenWrt这个系统的角度来介绍,但书中内容不局限于路由器本身,通过阅读本书,读者可以掌握智能家居、智能玩具、工业控制等各类不同设备的玩法。
内容简介
本书汇集了各类基于OpenWrt系统的路由器、物联网、智能家居方向的技能和行业内知名企业的技术经验。本书区别于传统嵌入式系统书籍,并没有一上来介绍那些晦涩的软硬件知识,本书所介绍的内容门槛更低,更适合读者循序渐进地完成学习。书中使用更轻松的表达方式,让读者开开心心便可以完成智能路由器的开发。
由于路由器大量采用了开源操作系统,哥伦比亚大学法学院教授Eben Moglen向路由器厂商提出了开源路由器系统部分的要求,这样,2004年OpenWrt诞生了White Russian版,之后每一两年便发布一个新的版本。现今,OpenWrt系统在智能路由器行业已是事实性标准,大量的芯片厂商及路由器厂商(包括小米、极路由、极企科技等知名互联网科技企业)均采用该系统作为路由器或智能家居控制中心,即使宣称没有使用OpenWrt的厂商,也多是在该系统基础之上进行了业务定制。
OpenWrt作为开源组织采取松散管理,很难找到一份比较系统的专业技术文档用于爱好者学习。因此2012年由hoowa发起、众多技术“大神”参与的“跟hoowa学智能路由”在线培训开始启航,本书所有内容均原滋原味来源于此。本书遵循“学中做,做中学”的理念,将内容分为19章,读者可以跟着本书内容,边学边做,终完成一个智能路由器的开发。
本书主要从OpenWrt这个系统的角度来介绍,但书中内容不局限于路由器本身,通过阅读本书,读者可以掌握智能家居、智能玩具、工业控制等各类不同设备的玩法。本书适合计算机或电子类相关学生、从事IT行业的人员、智能设备或OpenWrt系统的发烧友、各智能设备厂商员工阅读。
作者简介
孙冰
1982年出生于辽宁省营口市。从小学4年级开始接触互联网,作为首批中国互联网弄潮儿,2001年只身到中关村从事Unix/Linux系统开发。2003年成立Perl语言中国协会,致力于Perl语言推广工作,在CSDN开设开源专家博客。2008年创建中国开源语音通信项目Freeiris。极企科技联合创始人、GLG集团专家顾问、雷锋网专栏撰稿人。
王伟
副教授。自2009年起,主要从事嵌入式系统软硬件开发相关教学与科研工作,近年来发表中外文学术论文十余篇,出版嵌入式系统开发相关书籍一部,翻译著作一部。多次指导学生参加省级及国jia级专业竞赛,取得优异成绩。从事嵌入式Linux、单片机相关教学工作多年,有较丰富的嵌入式开发经验。
刘龙
副教授。东北师范大学毕业,自2005年起从事嵌入式Linux系统研究以来,发表中文核心级别以上论文十余篇,参与或主持横纵向项目5项,带领学生取得国jia级比赛奖项若干。从事嵌入式Linux方面教学工作多年,曾设计过多款嵌入式产品,具有较丰富的系统开发经验。
目录
第 1章 路由器概述 1
1.1 传统路由器 1
1.2 智能路由器 1
1.3 传统路由器与智能路由器的区别 2
第 2章 OpenWrt介绍 3
2.1 什么是OpenWrt 3
2.2 哪些产品用了OpenWrt 3
2.3 OpenWrt是如何支持路由器CPU的 4
第3章 智能路由器硬件 5
3.1 MIPS架构 5
3.2 国内常见路由器的配置 5
3.3 常见路由器芯片厂商 6
3.4 本书智能路由硬件 7
3.4.1 本书硬件的由来 7
3.4.2 MT7620芯片 7
3.4.3 MR808开发板简述 8
3.4.4 AXWRT系统 11
第4章 智能路由开发环境搭建 12
4.1 小企鹅的力量 12
4.2 准备学习工具 13
4.3 安装VirtualBox虚拟机 13
4.4 在虚拟机中安装Centos 17
4.4.1 创建新虚拟主机 17
4.4.2 配置新虚拟机 18
4.4.3 安装Centos系统 20
4.5 SSH远程登录 23
4.5.1 SSH的作用 23
4.5.2 启动网卡 23
4.5.3 查看当前IP 24
4.5.4 SSH连接 24
4.6 WinSCP文件传输 25
4.6.1 SCP协议 25
4.6.2 安装WinSCP客户端 26
4.6.3 创建到Linux的连接 28
4.6.4 文件传输 29
第5章 基本知识 30
5.1 向系统下达命令 30
5.2 时间命令 30
5.2.1 查看当前日期 30
5.2.2 查看当前日历 31
5.3 关机和重启 31
5.3.1 立即安全关闭系统 31
5.3.2 重新启动系统 31
5.3.3 强制将缓存写入存储器 31
5.4 权限机制 31
5.4.1 文件权限 32
5.4.2 所有者 32
5.4.3 文件容量 32
5.4.4 文件日期 32
5.4.5 可执行文件 32
5.4.6 隐含文件 33
5.4.7 修改所有人 33
5.4.8 修改所有组 33
5.4.9 修改文件权限 34
5.5 文件与目录管理 34
5.5.1 路径概念 34
5.5.2 特殊目录 35
5.5.3 变换目录 35
5.5.4 查看当前所在目录是哪个 35
5.5.5 创建目录 36
5.5.6 删除目录 36
5.5.7 列表文件和目录 36
5.5.8 复制文件或目录 37
5.5.9 删除文件或整个目录 38
5.5.10 移动或更名 38
5.6 文件分析 39
5.6.1 查看文件内容 39
5.6.2 分行查看 39
5.6.3 查看文件后几行 39
5.6.4 查看启动信息 40
5.7 更多指令 40
5.8 Vi编辑器 40
5.8.1 Vi介绍 40
5.8.2 Vi的命令 40
5.8.3 Vi的3个状态 41
5.8.4 Vi编辑操作 41
5.9 基础Shell编程 43
5.9.1 何为Shell编程 43
5.9.2 Shell的运行方式 44
5.9.3 Hello World! 44
5.9.4 变量 44
5.9.5 运算符 47
5.9.6 注释语法 53
5.9.7 字符串 54
5.9.8 条件判断 54
5.9.9 循环表达 56
5.9.10 输入/输出重定向 58
5.9.11 使用黑洞,一劳永逸 59
第6章 OpenWrt刷机 61
6.1 通过串口进入系统 61
6.1.1 操作板子注意事项 61
6.1.2 连接串口步骤 61
6.2 认识U-Boot 63
6.3 U-Boot的TFTP刷机 64
6.3.1 TFTP的准备 64
6.3.2 TFTP刷机流程 65
6.3.3 可能遇到的问题 67
6.4 U-Boot的Web刷机 67
6.4.1 触发按钮准备 67
6.4.2 可能遇到的问题 69
第7章 分区、外网与OPKG 70
7.1 了解分区 70
7.1.1 查看系统MTD分配 72
7.1.2 查看系统MTD的分区 72
7.1.3 将非文件系统分区读出来 72
7.2 文件系统 73
7.2.1 透明挂载/根目录 73
7.2.2 基本系统演示 74
7.2.3 第 一次接入网络 75
7.3 软件包管理OPKG 77
7.3.1 OPKG语法格式 77
7.3.2 软件包的内核依赖问题 78
7.3.3 OPKG的配置 78
7.3.4 关于OPKG软件包 79
第8章 UCI命令系统 80
8.1 UCI命令 80
8.2 UCI的文件和流程 80
8.3 UCI的文件语法 81
8.3.1 config节点语法格式 81
8.3.2 option选项语法格式 82
8.3.3 list列表选项语法格式 82
8.3.4 UCI的语法容错 82
8.3.5 UCI无法容忍的语法 82
8.4 UCI命令读写配置 82
8.4.1 读取类语法 83
8.4.2 写入类语法 83
8.5 综合实例 84
8.5.1 语法测试 85
8.5.2 举例开启Wi-Fi 86
第9章 智能路由配置 88
9.1 网络配置文件 88
9.1.1 查看网络配置 88
9.1.2 查看当前网络 89
9.1.3 查看br-lan桥状态 90
9.1.4 查看内核日志 91
9.1.5 网口VLAN 91
9.2 配置WAN口外网 91
9.2.1 动态获取IP选项 92
9.2.2 静态IP语法 92
9.2.3 PPPOE拨号上网语法 93
9.2.4 WAN口设置 94
9.2.5 WAN口设置 94
9.3 配置LAN口服务 95
9.4 配置无线网络 97
9.4.1 无线查看命令 99
9.4.2 实现无线中继 99
9.5 DHCP服务 102
9.6 如何连接外网 105
第 10章 防火墙与UPnP 106
10.1 防火墙命令 106
10.2 防火墙配置 106
10.2.1 defaults默认配置 107
10.2.2 zone域配置 107
10.2.3 forwarding转发配置 108
10.2.4 rule规则 109
10.2.5 direction端口转发 110
10.3 实现UPnP 111
10.3.1 安装UPnP 111
10.3.2 配置UPnP 112
10.3.3 UPnP命令 114
第 11章 时区、服务、SSH与SCP 115
11.1 信息和时区 115
11.2 服务管理 118
11.3 SSH远程登录 118
11.3.1 SSH配置 118
11.3.2 SSH登录 119
11.4 SCP文件复制 121
11.4.1 安装SCP客户端 121
11.4.2 SCP操作 123
第 12章 存储器扩展 124
12.1 实现原理 124
12.2 存储器选型 124
12.3 初始化存储器 125
12.3.1 存储器软件包 125
12.3.2 识别存储器 126
12.3.3 存储器分区 126
12.3.4 存储器格式化 128
12.4 存储器扩容设置 129
12.4.1 rootfs_data数据迁移 129
12.4.2 获得存储器UUID 130
12.4.3 自动挂载配置 130
12.4.4 存储区自动挂载 132
12.4.5 swap交换区自动挂载 133
12.4.6 关于挂载的注意事项 134
第 13章 网络存储与文件共享 135
13.1 Windows文件共享实现 135
13.1.1 创建文件夹/pub 135
13.1.2 安装Samba 135
13.1.3 Samba配置说明 135
13.1.4 配置共享目录 137
13.1.5 Windows连接方法 137
13.2 FTP文件共享实现 139
13.2.1 安装Pure-FTPD 139
13.2.2 Pure-FTPD配置说明 139
13.2.3 配置Pure-FTPD 140
13.2.4 创建FTP账户 141
13.2.5 FTP穿越防火墙 142
13.2.6 WinSCP做FTP客户端 143
13.2.7 浏览器作FTP客户端 144
第 14章 智能路由器媒体中心 145
14.1 USB声卡驱动支持 145
14.1.1 媒体播放条件 145
14.1.2 选择合适的USB声卡 145
14.1.3 安装声卡驱动 145
14.1.4 设置默认音量 146
14.1.5 用命令行播放MP3 147
14.2 安卓手机远程播放音乐 147
14.2.1 MP介绍 147
14.2.2 安装MPD服务 148
14.2.3 安卓系统安装客户端 151
14.2.4 关于安卓手机播放音乐 153
14.3 DLNA数字媒体服务器 153
14.3.1 DLNA介绍 154
14.3.2 安装配置MiniDLNA 154
14.3.3 Inotify与overlay的冲突 156
14.3.4 启动服务 157
14.3.5 DLNA客户端 157
14.3.6 DLNA其他功能 159
14.4 苹果AirPlay播放音乐 159
14.4.1 AirPlay介绍 159
14.4.2 安装与配置Shairport 159
14.4.3 辅助配置和检查 161
14.4.4 使用终端播放 162
第 15章 智能路由器编程工具 163
15.1 Web+PHP建站系统 163
15.1.1 PHP语言 163
15.1.2 Web服务 164
15.1.3 PHP测试代码 167
15.2 SQLite3与MySQL数据库应用 169
15.2.1 SQLite3数据库 169
15.2.2 MySQL数据库 173
15.3 Python、Lua与Ruby编程工具 174
15.3.1 Python 174
15.3.2 Lua 175
15.3.3 Ruby 175
第 16章 智能路由器服务软件 177
16.1 VPN(PPTP)服务器与
客户端 177
16.1.1 PPTP协议VPN服务器 177
16.1.2 PPTP协议VPN客户端 181
16.2 USB摄像头 183
16.2.1 USB摄像头准备 183
16.2.2 MJPG-streamer 184
16.2.3 浏览器访问 186
16.3 迅雷远程下载 187
16.3.1 迅雷远程下载条件 187
16.3.2 迅雷远程下载 190
16.4 WiFiDog广告路由器 192
16.4.1 WiFiDog功能服务 192
16.4.2 WiFiDog验证界面 195
第 17章 编译定制OpenWrt固件 197
17.1 OpenWrt编译环境 197
17.1.1 编译与交叉编译 197
17.1.2 AxWRT与OpenWrt的
关系 198
17.1.3 OpenWrt的版本关系 199
17.1.4 准备编译环境 199
17.2 OpenWrt固件生成 200
17.2.1 编译流程 200
17.2.2 获取AxWRT源代码 200
17.2.3 获取软件包源代码 201
17.2.4 OpenWrt菜单选项配置 201
17.2.5 编译固件 203
17.2.6 清理编译 204
17.2.7 编译完成 204
17.3 OpenWrt源码预设 205
17.3.1 Feeds源 205
17.3.2 OPKG自定义软件仓库 206
17.3.3 预设编译参数文件 206
17.3.4 OpenWrt文件夹的作用 206
17.3.5 Target/Linux下平台预设文件 207
17.4 OpenWrt官方版编译 208
17.4.1 关于编译 208
17.4.2 关于硬件支持 209
第 18章 编译定制IPK软件包 210
18.1 IPK软件包与OPKG命令 210
18.2 IPK软件包规范 210
18.2.1 Makefile格式与流程 211
18.2.2 PKG_*任务的作用 212
18.2.3 定义Build/*的作用 213
18.2.4 定义Package/*的作用 213
18.2.5 IPK软件包补充说明 214
18.3 简易软件包mytest 215
18.3.1 mytest软件包的制作 215
18.3.2 mytest调试 216
18.3.3 下载测试 217
18.4 软件包示例xware 218
18.5 软件包示例shairport 219
第 19章 智能路由器外设应用实例 221
19.1 OpenWrt的硬件支持 221
19.1.1 DTS设备树 221
19.1.2 GPIO总线 223
19.2 OpenWrt对LED驱动的支持 224
19.2.1 LED电路设计 224
19.2.2 手动测试LED 224
19.2.3 将LED注册为系统标准LED 225
19.2.4 LED设置心跳功能 226
19.2.5 将LED设置为WAN口状态 226
19.3 OpenWrt对按钮驱动的支持 226
19.3.1 按钮电路设计 226
19.3.2 手动测试按钮 227
19.3.3 将按钮注册为系统按钮 228
19.3.4 编写脚本检测按钮时长 228
19.4 OpenWrt对继电器驱动的支持 229
19.4.1 继电器电路设计 229
19.4.2 手动测试继电器 230
智能路由的革新之路:从原理到实战,构建你的个性化网络体验 在这个信息爆炸的时代,家庭和小型办公室的网络需求日益增长,对网络性能、安全性以及个性化配置的要求也越来越高。传统的“即插即用”路由器虽然方便,但在功能上往往显得捉襟见肘,无法满足用户在智能家居联动、VPN访问、内容过滤、网络加速等方面的深度需求。正是基于这样的背景,我们即将踏上一场探索智能路由系统的深度旅程。 本书旨在为广大对网络技术、嵌入式开发以及智能家居有着浓厚兴趣的读者,提供一套系统、全面且实用的智能路由开发指南。我们不局限于市面上少数品牌的固件限制,而是将目光聚焦于开放、灵活、功能强大的开源路由操作系统——OpenWrt。通过深入剖析OpenWrt的核心架构、软件包管理、系统配置,以及掌握其开发与定制的方方面面,你将能够摆脱硬件厂商的束缚,亲手打造出真正属于自己的、高度智能化的网络中心。 谁适合阅读本书? 网络爱好者与技术探索者: 如果你对路由器的内部工作原理充满好奇,渴望了解网络是如何连接世界,并希望能够对其进行更深层次的控制和优化,那么本书将为你揭开神秘面纱。 嵌入式开发工程师: 拥有C/C++、Shell等编程基础,并对嵌入式Linux系统有一定了解的你,将能通过本书快速掌握在资源受限的硬件平台上进行系统开发和应用部署的技能。 智能家居DIY玩家: 希望构建一个更安全、更智能、更个性化的家庭网络环境,以实现设备间的无缝联动和精细化管理的用户。 网络管理员与运维人员: 希望提升网络管理能力,学习如何使用更强大的工具来应对复杂的网络环境,并为用户提供更优质网络服务的专业人士。 学生与教育工作者: 希望在课程之外,学习一项极具实践价值的网络技术,为未来的职业发展打下坚实基础的学生,以及寻求优质教学资源的教育工作者。 本书将带你穿越哪些领域? 本书将以循序渐进的方式,带领读者从零开始,深入理解智能路由系统的本质,并最终掌握DIY定制的精髓。 第一部分:智能路由基础理论与OpenWrt初探 在踏入实战之前,扎实的理论基础是必不可少的。我们将从最基础的网络概念讲起,帮助你巩固TCP/IP协议栈、DNS、DHCP、NAT等核心知识。在此基础上,我们会详细介绍智能路由器的作用和发展趋势,以及传统固件的局限性,为引入OpenWrt做好铺垫。 深入理解网络通信基石: 我们会以通俗易懂的方式,解析IP地址、子网掩码、网关、DNS服务器的工作流程,让你对数据包如何在网络中穿梭有一个清晰的认知。 路由器的角色与演进: 从最初的简单交换设备,到如今集防火墙、VPN、Wi-Fi AP、网络存储等于一体的家庭网络中枢,我们将梳理路由器的发展历程,体会其功能边界的不断拓展。 开放源代码的魅力:OpenWrt概述:本书的核心主角——OpenWrt,将在这里被首次隆重介绍。我们将探讨其作为一款开源嵌入式Linux发行版的优势,包括其高度的可定制性、丰富的软件包生态系统、活跃的社区支持,以及为何它成为智能路由系统开发的理想选择。 首次触电OpenWrt: 你将学习如何选择适合你的硬件平台,并详细指导你完成OpenWrt的刷写过程,包括固件的选择、备份现有固件、以及安全刷写等关键步骤。初次登陆OpenWrt的Web界面(LuCI),熟悉其基本布局和功能模块,为后续的深入探索打下基础。 第二部分:OpenWrt系统架构与核心组件解析 了解一个系统的灵魂,需要深入其内部。本部分将带领你剖析OpenWrt的系统架构,理解其各个核心组件如何协同工作,从而为你后续的定制开发奠定坚实的基础。 Linux内核的魔力: OpenWrt是构建在Linux内核之上的。我们将深入解析Linux内核在嵌入式设备上的作用,了解其如何管理硬件资源、进程调度、内存分配等。 BusyBox:嵌入式Linux的瑞士军刀: BusyBox集成了大量常用的Unix工具,大大减小了系统的体积。你将学习BusyBox的架构以及它在OpenWrt中的重要作用。 UCI配置系统:驱动一切的配置引擎: OpenWrt采用统一的配置接口(UCI)来管理系统设置。我们将详细讲解UCI的语法、配置文件结构,以及如何通过命令行和脚本来读写和修改配置,这是掌握OpenWrt的关键之一。 网络服务的支柱:netifd与Procd: `netifd`负责网络接口的管理和配置,`procd`则是一个通用的init系统,负责启动和管理各种服务进程。理解它们的工作原理,能帮助你更好地控制网络和系统服务。 Web管理界面的秘密:LuCI剖析: LuCI是OpenWrt最常用的Web管理界面。我们将揭示LuCI的开发框架、模板引擎以及如何通过其进行各种网络和系统配置,甚至是如何扩展LuCI来添加自定义功能的。 第三部分:网络功能的深度定制与实践 一旦掌握了OpenWrt的基础,我们就可以开始动手改造,实现更强大的网络功能。本部分将聚焦于智能路由器的核心网络功能,并提供丰富的实战案例。 精通DHCP与DNS: 从理解DHCP租约分配到配置静态IP,从设置本地DNS缓存到集成公共DNS服务,我们将让你对网络地址分配和域名解析有更精细化的控制。 防火墙的铁壁:iptables详解: 学习如何利用`iptables`构建强大的防火墙规则,实现端口转发、访问控制、IP地址伪装等。你将掌握策略链、表、链、匹配和目标等核心概念。 VPN技术的全面应用:OpenVPN与WireGuard: 学习如何配置和部署OpenVPN服务器和客户端,安全地访问家庭网络或绕过网络限制。同时,我们将探讨新兴的、高性能的WireGuard VPN协议,并指导你完成配置。 IPv6的世界: 随着IPv6的普及,掌握IPv6的配置和管理也变得越来越重要。本书将指导你如何在OpenWrt上配置IPv6地址分配、路由和防火墙规则。 Wi-Fi性能优化与安全: 深入理解802.11协议,学习如何优化Wi-Fi信道、功率、加密方式,以及实现访客网络、WDS桥接等高级Wi-Fi配置。 网络存储与文件共享:Samba与NFS: 将你的路由器变成一个迷你NAS,实现家庭设备间的文件共享。我们将详细讲解Samba和NFS的配置,以及如何在OpenWrt上实现。 第四部分:高级应用开发与系统扩展 智能路由的魅力在于其无限的可能性。本部分将引导你探索更高级的应用开发,以及如何扩展OpenWrt的功能,使其成为一个真正智能的中心。 软件包管理与编译:opkg的妙用: 学习如何使用`opkg`安装、更新和删除OpenWrt的软件包,以及如何从源码编译自定义软件包,为你的路由器注入新的活力。 Shell脚本编程:实现自动化管理: 掌握Shell脚本的编写,让你能够自动化执行重复性任务,如定时备份配置、监控网络状态、触发告警等。 AdGuard Home与Pi-hole:终极广告拦截与DNS过滤: 学习如何安装和配置AdGuard Home或Pi-hole,彻底告别恼人的网络广告,同时实现更精细化的内容过滤和DNS解析控制。 智能家居协议集成:MQTT与Home Assistant: 探索如何将OpenWrt作为智能家居的网关,通过MQTT协议与其他设备通信,并与Home Assistant等平台集成,实现智能设备间的联动控制。 QoS流量控制: 掌握如何配置QoS(服务质量)来优先处理关键应用的流量,确保在线游戏、视频通话等体验的流畅性。 开发你自己的Lua脚本: 深入了解OpenWrt的Web界面开发框架,学习如何使用Lua语言编写自定义的LuCI页面,实现个性化的管理功能。 Docker在OpenWrt上的应用: 探索如何在OpenWrt上部署Docker容器,运行各种服务,极大地扩展路由器的功能边界,而无需担心对系统原生环境的污染。 第五部分:性能优化、故障排查与安全加固 在享受智能路由带来的便利的同时,性能优化、故障排查和安全加固同样至关重要。本部分将为你提供实用的技巧和方法。 系统性能监控与调优: 学习如何使用`top`、`htop`等工具监控系统资源占用,分析瓶颈,并进行相应的优化,确保路由器始终保持最佳运行状态。 日志分析与故障排查: 掌握查看和分析系统日志的方法,能够快速定位和解决各种网络和系统问题。 固件更新与回滚策略: 了解固件更新的最佳实践,以及在遇到问题时如何安全地回滚到之前的稳定版本。 系统安全加固: 学习如何加固OpenWrt系统的安全性,包括密码策略、SSH访问限制、防火墙规则优化、关闭不必要的服务等,有效抵御潜在的网络攻击。 展望未来:构建你的智能网络生态 本书不仅仅是一本技术手册,更是一份邀请,邀请你加入到智能路由系统开发的浩瀚海洋中。通过本书的学习,你将不再被动地接受厂商提供的功能,而是能够主动地去创造、去定制,去构建一个真正符合你需求的、高度智能化的网络环境。从家庭网络的安全与隐私,到智能家居的便捷联动,再到远程办公的可靠连接,你将拥有掌控这一切的能力。 让我们一起,从OpenWrt开始,踏上这场充满挑战与乐趣的智能路由革新之路,为你的数字生活注入无限可能!