OpenWrt是在實(shí)現(xiàn)路由器功能方面很受歡迎的開源軟件之一。本書基于OpenWrt,詳細(xì)介紹了智能路由器的開發(fā)。
本書共計(jì)15章,按照認(rèn)識(shí)路由器的順序進(jìn)行編寫,介紹了智能路由器、開發(fā)環(huán)境及編譯分析、OpenWrt包管理系統(tǒng)、OpenWrt配置、軟件開發(fā)、GDB調(diào)試、網(wǎng)絡(luò)基礎(chǔ)知識(shí)、路由器基礎(chǔ)軟件模塊、常用軟件模塊、IP路由、DNS與DHCP、iptables防火墻、UCI防火墻、UPnP、網(wǎng)絡(luò)測(cè)試及分析工具等。豐富的理論知識(shí)和代碼示例可以幫助讀者深入認(rèn)識(shí)和理解OpenWrt技術(shù),并能夠提升開發(fā)水平和開發(fā)效率。
本書適合軟件架構(gòu)師、軟件開發(fā)工程師、軟件測(cè)試工程師以及計(jì)算機(jī)相關(guān)專業(yè)的學(xué)生閱讀。讀者通過閱讀本書,不僅可以掌握OpenWrt技術(shù),還能進(jìn)一步提升自己的軟件開發(fā)水平。
1. 這是一本智能路由器開發(fā)的必讀指南。
2. 本書以理論和實(shí)際相結(jié)合,以virtualBox來講解,沒有智能路由設(shè)備的開發(fā)者也可學(xué)習(xí)實(shí)踐。
3. 以代碼為基礎(chǔ)進(jìn)行講解,代碼放在國(guó)內(nèi)托管網(wǎng)站上供大家自由下載。
4. 本書提供進(jìn)一步深入閱讀的參考資料鏈接,讀者可以進(jìn)一步深入學(xué)習(xí)。
張永智,1979年出生于山西省臨猗縣,本科畢業(yè)于太原理工大學(xué),并于中國(guó)科學(xué)院大學(xué)取得碩士學(xué)位。曾在聯(lián)想、中國(guó)數(shù)碼、暢訊、山石等公司從事各種軟件研發(fā)工作。在研發(fā)崗位上,他參與了TPM安全芯片、拯救系統(tǒng)、OpenOffice、網(wǎng)絡(luò)感知與流控系統(tǒng)、可視IP電話、路由協(xié)議、防火墻、HTTP代理和VPN等功能的開發(fā),并曾在中國(guó)數(shù)碼擔(dān)任研發(fā)經(jīng)理,負(fù)責(zé)多個(gè)項(xiàng)目的研發(fā)工作,F(xiàn)就職于北京邦天信息技術(shù)有限公司,負(fù)責(zé)防火墻、VPN等功能的開發(fā)。
他長(zhǎng)期致力于搭建并維護(hù)OpenWrt的代碼搜索服務(wù),網(wǎng)址為openwrt.bjbook.net/source。除此之外,他還作為開源項(xiàng)目Frog的發(fā)起人,對(duì)中國(guó)人口普查數(shù)據(jù)進(jìn)行研究。該項(xiàng)目對(duì)2010年第六次人口普查數(shù)據(jù)進(jìn)行程序算法分析,預(yù)測(cè)中國(guó)人口將在2021年左右達(dá)到高峰,以后中國(guó)人口數(shù)量將逐年下降。
李章明,1986年出生于山西省昔陽(yáng)縣,2009年畢業(yè)于河北科技師范學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)。曾在華為、德信無線等公司從事通信設(shè)備研發(fā)工作。并參與過機(jī)頂盒,CDMA基站、CDMA固定臺(tái)、路由器、交換機(jī)、防火墻、VPN等設(shè)備的功能開發(fā),F(xiàn)就職于鵬博士電信傳媒集團(tuán),負(fù)責(zé)智能家居、物聯(lián)網(wǎng)設(shè)備、SDN項(xiàng)目的開發(fā)。
第1章 智能路由器概述 1
1.1 OpenWrt簡(jiǎn)介 1
1.2 整體功能組件 3
1.2.1 整體架構(gòu) 3
1.2.2 網(wǎng)絡(luò)功能 5
1.2.3 系統(tǒng)管理 5
1.2.4 狀態(tài)監(jiān)控 6
1.3 開源嵌入式操作系統(tǒng)比較 7
1.3.1 和Android比較 9
1.3.2 和其他WRT比較 10
1.4 參考資料 12
第2章 開發(fā)環(huán)境及編譯分析 13
2.1 安裝編譯環(huán)境 13
2.1.1 Ubuntu安裝 13
2.1.2 安裝編譯工具 15
2.1.3 下載代碼 17
2.1.4 配置及編譯 19
2.2 編譯腳本分析 27
2.2.1 頂層目錄概述 27
2.2.2 編譯腳本 29
2.2.3 下載工具 29
2.2.4 patch-kernel.sh 30
2.2.5 編譯擴(kuò)展機(jī)制feeds 31
2.3 使用VirtualBox部署 34
2.4 編譯部署出現(xiàn)問題的解決方法 37
2.5 VirtualBox虛擬機(jī)網(wǎng)絡(luò)設(shè)置 38
2.5.1 網(wǎng)絡(luò)地址轉(zhuǎn)換模式 39
2.5.2 橋接網(wǎng)絡(luò)模式 40
2.5.3 內(nèi)部網(wǎng)絡(luò)模式 41
2.5.4 僅主機(jī)網(wǎng)絡(luò)模式 41
2.5.5 網(wǎng)絡(luò)模式比較 42
2.5.6 組建路由器實(shí)驗(yàn)環(huán)境 42
2.6 參考資料 43
第3章 OpenWrt包管理系統(tǒng) 44
3.1 工作原理 44
3.2 OPKG命令 45
3.2.1 命令用法 45
3.2.2 軟件包的管理 46
3.2.3 查詢信息 48
3.2.4 選項(xiàng) 49
3.3 OPKG配置 50
3.3.1 調(diào)整軟件倉(cāng)庫(kù)地址 50
3.3.2 調(diào)整安裝目錄 51
3.3.3 代理設(shè)置 51
3.4 使用舉例 52
3.4.1 安裝軟件包 52
3.4.2 查詢已安裝的OPKG
軟件包文件列表 53
3.4.3 自定義安裝目錄 53
3.5 OPKG包結(jié)構(gòu) 55
3.6 參考資料 57
第4章 OpenWrt配置 58
4.1 UCI簡(jiǎn)介 58
4.1.1 文件語法 58
4.1.2 統(tǒng)一配置原理 60
4.1.3 UCI工具 61
4.1.4 配置腳本 66
4.2 UCI API編程接口 68
4.2.1 Libubox 69
4.2.2 UCI 69
4.2.3 UCI API接口 70
4.3 系統(tǒng)內(nèi)核設(shè)置 71
4.3.1 sysctl.conf 71
4.3.2 sysctl 72
4.4 系統(tǒng)配置 73
4.4.1 /etc/rc.local 74
4.4.2 /etc/profile 74
4.4.3 /etc/shells 75
4.4.4 /etc/fstab 75
4.4.5 /etc/services 76
4.4.6 /etc/protocols 77
4.5 名詞解釋 78
4.6 參考資料 78
第5章 軟件開發(fā) 79
5.1 編譯構(gòu)建系統(tǒng) 79
5.1.1 概述 79
5.1.2 變量定義 85
5.1.3 軟件包定義 87
5.1.4 構(gòu)建 88
5.2 HelloWorld 89
5.2.1 目錄結(jié)構(gòu) 91
5.2.2 Makefile 92
5.2.3 編譯 94
5.3 軟件啟動(dòng)機(jī)制 95
5.4 補(bǔ)丁生成及應(yīng)用工具 99
5.4.1 補(bǔ)丁 99
5.4.2 diff工具 100
5.4.3 patch工具 102
5.5 參考資料 104
第6章 GDB調(diào)試 105
6.1 什么是GDB 105
6.2 如何啟動(dòng)程序調(diào)試 106
6.2.1 使用GDB啟動(dòng)程序 106
6.2.2 環(huán)境變量設(shè)置 107
6.2.3 設(shè)置日志文件 108
6.2.4 獲取幫助 108
6.2.5 命令總結(jié) 109
6.3 斷點(diǎn)管理 110
6.3.1 指令斷點(diǎn)管理 110
6.3.2 觀察點(diǎn)管理 112
6.3.3 捕獲點(diǎn)管理 113
6.3.4 單步調(diào)試 113
6.3.5 命令總結(jié) 114
6.4 查看程序運(yùn)行狀態(tài) 115
6.4.1 查看棧幀信息 115
6.4.2 查看運(yùn)行中的源程序
信息 117
6.4.3 查看運(yùn)行時(shí)數(shù)據(jù) 117
6.4.4 命令總結(jié) 119
6.5 動(dòng)態(tài)改變——改變程序的執(zhí)行 120
6.6 名詞解釋 121
6.7 參考資料 121
第7章 網(wǎng)絡(luò)基礎(chǔ)知識(shí) 122
7.1 概述 122
7.1.1 網(wǎng)絡(luò)設(shè)備 123
7.1.2 計(jì)算機(jī)網(wǎng)絡(luò)分類 124
7.2 數(shù)據(jù)鏈路層 124
7.2.1 以太網(wǎng) 124
7.2.2 MAC尋址 125
7.2.3 沖突和沖突域 125
7.2.4 廣播域 126
7.2.5 ARP協(xié)議 126
7.3 IP協(xié)議 127
7.3.1 IP報(bào)文格式 127
7.3.2 IP地址分類 129
7.3.3 協(xié)議功能 131
7.4 ICMP 132
7.4.1 概述 132
7.4.2 報(bào)文格式 133
7.4.3 差錯(cuò)報(bào)文 134
7.4.4 查詢報(bào)文及響應(yīng)報(bào)文 135
7.4.5 ping 136
7.4.6 TraceRoute 137
7.5 傳輸層協(xié)議 137
7.6 綜合 138
7.7 名詞解釋 141
7.8 參考資料 141
第8章 路由器基礎(chǔ)軟件模塊 143
8.1 libubox 143
8.1.1 libubox 143
8.1.2 jshn 145
8.2 ubus 147
8.2.1 ubusd 148
8.2.2 ubus命令行工具 149
8.3 netifd 152
8.3.1 概述 152
8.3.2 netifd方法 154
8.3.3 netifd文件 158
8.3.4 網(wǎng)絡(luò)配置 159
8.4 ubox 160
8.5 procd 163
8.5.1 reload_config 164
8.5.2 procd進(jìn)程 164
8.5.3 procd.sh 167
8.5.4 rc.common 169
8.5.5 綜合示例 170
8.6 參考資料 172
第9章 常用軟件模塊 173
9.1 CWMP 173
9.1.1 概述 173
9.1.2 方法和流程 174
9.1.3 如何配置 176
9.2 SSH服務(wù)器 177
9.2.1 概述 177
9.2.2 配置 177
9.3 QoS 178
9.3.1 服務(wù)模型 178
9.3.2 QoS配置 180
9.4 uHTTPd服務(wù)器 181
9.4.1 概述 181
9.4.2 配置 182
9.5 SMTP 183
9.6 NTP 184
9.7 PPPoE 185
9.7.1 CHAP驗(yàn)證過程 186
9.7.2 PPPoE配置 188
9.8 無線基礎(chǔ) 188
9.8.1 什么是無線 188
9.8.2 優(yōu)點(diǎn) 188
9.8.3 缺點(diǎn) 188
9.8.4 安全 189
9.8.5 認(rèn)識(shí)OpenWrt無線
接口 189
9.8.6 OpenWrt無線配置 191
9.9 參考資料 192
第10章 IP路由 194
10.1 路由分類 194
10.2 單播路由 195
10.2.1 路由表管理 195
10.2.2 靜態(tài)路由配置 198
10.3 策略路由 199
10.3.1 概述 199
10.3.2 配置策略路由 200
10.3.3 典型配置舉例 203
10.4 組播路由 205
10.4.1 組播原理 205
10.4.2 IGMP原理 207
10.4.3 IGMP代理 207
10.4.4 IGMP Proxy管理 209
10.4.5 驗(yàn)證及調(diào)試 210
10.5 名詞解釋 211
10.6 參考資料 212
第11章 DNS與DHCP 213
11.1 主機(jī)系統(tǒng) 213
11.2 DNS基礎(chǔ) 215
11.2.1 域名結(jié)構(gòu) 215
11.2.2 DNS報(bào)文格式 216
11.2.3 域名解析器原理 217
11.2.4 域名解析實(shí)例 218
11.3 DHCP基礎(chǔ) 220
11.3.1 引言 220
11.3.2 DHCP原理 220
11.3.3 DHCP報(bào)文 221
11.3.4 DHCP工作流程 222
11.4 dnsmasq 223
11.4.1 概述 223
11.4.2 配置 224
11.5 動(dòng)態(tài)DNS 228
11.5.1 DDNS原理 228
11.5.2 DDNS配置 229
11.5.3 DNS更新協(xié)議及
算法 230
11.6 DNS測(cè)試工具 232
11.6.1 nslookup 232
11.6.2 dig 232
11.7 參考資料 234
第12章 iptables防火墻 235
12.1 防火墻概述 235
12.2 iptables中的表 236
12.2.1 filter(過濾表) 236
12.2.2 nat(網(wǎng)絡(luò)地址轉(zhuǎn)換表) 237
12.2.3 mangle(修改表) 237
12.2.4 raw(原始表) 238
12.3 處理目標(biāo) 238
12.3.1 REJECT(拒絕) 239
12.3.2 DNAT(目的網(wǎng)絡(luò)地址
轉(zhuǎn)換) 240
12.3.3 SNAT(源網(wǎng)絡(luò)地址轉(zhuǎn)換) 240
12.3.4 MASQUERADE(偽裝) 241
12.3.5 LOG 241
12.3.6 REDIRECT 241
12.4 報(bào)文處理流程 242
12.5 報(bào)文規(guī)則匹配 245
12.6 管理防火墻規(guī)則 247
12.7 其他工具集 249
12.8 小結(jié) 250
12.9 參考資料 250
第13章 UCI防火墻 251
13.1 概述 251
13.2 防火墻配置 252
13.2.1 Defaults 252
13.2.2 Zones-安全域 253
13.2.3 轉(zhuǎn)發(fā) 253
13.2.4 重定向 254
13.2.5 規(guī)則 255
13.2.6 include 257
13.3 常見用法 258
13.3.1 MAC地址黑白
名單 258
13.3.2 家長(zhǎng)控制 260
13.4 防火墻管理及調(diào)試 261
13.4.1 管理防火墻 261
13.4.2 測(cè)試防火墻 262
13.5 名詞解釋 263
13.6 參考資料 263
第14章 UPnP 264
14.1 UPnP簡(jiǎn)介 264
14.1.1 起源 264
14.1.2 概述 264
14.2 UPnP架構(gòu) 265
14.2.1 UPnP協(xié)議術(shù)語 265
14.2.2 UPnP組件 266
14.3 UPnP協(xié)議 267
14.4 UPnP工作流程 268
14.4.1 尋址 268
14.4.2 發(fā)現(xiàn) 269
14.4.3 描述 269
14.4.4 控制 270
14.4.5 事件 270
14.4.6 表達(dá) 272
14.5 UPnP應(yīng)用之IGD 272
14.5.1 IGD框架 272
14.5.2 端口映射在IGD中的應(yīng)用 274
14.6 參考資料 277
第15章 網(wǎng)絡(luò)測(cè)試及分析工具 278
15.1 NetCat 278
15.2 TcpDump 283
15.2.1 抓取報(bào)文 283
15.2.2 匹配規(guī)則 285
15.2.3 使用舉例 287
15.3 參考資料 288