前言
阅读本文能学到 OpenWrt 的基础管理方式,能获得自主解决 OpenWrt 相关问题的能力,下面我们就开始吧。
哦对了,你可能不知道 OpenWrt 是什么,引用项目官网的一段话:
OpenWrt项目是一个针对嵌入式设备的Linux操作系统。OpenWrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统。这使您可以不使用供应商提供的应用程序选择和配置,而是通过使用软件包来定制设备以适应任何应用程序。对于开发人员来说,OpenWrt是一个无需围绕它构建完整固件就能开发应用程序的框架; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。
大白话就是,本来是一个封闭的路由器,刷完他之后就变成开放的了,能获取 Root 权限,能自己装软件,可玩性更高。给路由器刷 OpenWrt 类似于给手机刷第三方系统。
准备
工欲善其事,必先利其器,必须有个刷了 OpenWrt 的路由器,我的路由器是 网件 R6100,有官方 release 的 OpenWrt 固件。配置如下:
项目 | 说明 |
---|---|
SOC | Atheros AR9344 |
Flash MB | 128 |
RAM MB | 128 |
WLAN HardWare | Atheros AR9344, Qualcomm Atheros QCA9882-2R4E |
USB | 1x 2.0 |
很自然联想到,路由器的 OpenWrt 固件也分为官方支持和民间自编译。想知道你的路由器怎么刷 OpenWrt ,建议用优秀的搜索引擎差找「品牌+型号+OpenWrt 」,如果找到了「openwrt。org」域名下的网站,比如我的是 https://openwrt.org/toh/netgear/netgear_r6100,这个就是 OpenWrt 官方支持的了。话说回来,建议买网件的路由器刷 OpenWrt,官方支持的多,硬件不缩水,配置冗余高,而且刷写简单,只需要下载固件,然后在官方 web 管理的升级处上传 OpenWrt 的固件镜像即可。
连接终端
终端的效率比较高,而且不受版本限制。
Linux 用户打开终端,Windows 10 用户 按 win + x
快捷键然后选 Windows PowerShell
,Windows 8 及以下用户 按 win + R
快捷键打开「运行」输入 cmd 回车。
然后你就会得到一个黑黑的命令行窗口
输入 ssh root@192.168.1.1
回车,此处 192.168.1.1
是路由器的 ip,因为是第一次连接,会让你确认指纹:
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6
PS C:\WINDOWS\system32> ssh root@192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
RSA key fingerprint is SHA256:xgM+5SHaV+RCUi66JbjaC/d6xpSc+3YRD/sxCUI.
Are you sure you want to continue connecting (yes/no)?
输入 yes
确认连接
然后输入密码(就是登录 web 管理界面的密码),此处输入密码的时候保护隐私不会有显示的,只管输入然后回车就行
PS C:\WINDOWS\system32> ssh root@192.168.1.1
The authenticity of host '192.168.1.1 (192.168.1.1)' can't be established.
RSA key fingerprint is SHA256:xgM+5SHPZ8gaV+RCUi66JbjaC/d6xpSc+3YRD/sxCUI.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.1' (RSA) to the list of known hosts.
root@192.168.1.1's password:
不出意外会看到欢迎语:
PS C:\WINDOWS\system32> ssh root@192.168.1.1
root@192.168.1.1's password:
BusyBox v1.30.1 () built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 19.07.3, r11063-85e04e9f46
-----------------------------------------------------
root@gtf35-host:~#
这样我们就成功的用 root 身份登录了 OpenWrt 的终端
改源
OpenWrt 是一个 Linux 发行版,有自己的包管理软件,叫 opkg
。熟悉 Linux 的小伙伴肯定都知道,第一件事就是改源。
这里插播一个 Linux 的小常识,Linux 的发行版(可以简单理解为 Ubuntu,Debian 等每一种 Linux 的分支都叫一种发行版)都有自己的包管理器,通俗理解为就是自己的官方应用商店。比如 Debian 系列的发行版使用 apt 包管理器,想安装网易云音乐只需要输入 sudo apt install netease-cloud-music
然后确认信息安装就可以了。不需要去网上搜索下载安装包,只需要一个命令就可以安装。软件叫软件包,包管理就是方便的管理(安装,卸载,升级)软件包。
描述在哪搜索和下载软件的东西叫「源」,因为在线安装软件的时候,国外的中央站点会很慢,甚至无法访问,所以要使用国内的加速镜像站点,这一操作叫做改源。OpenWrt 的高质量源并不多,我这里使用「北京外国语大学」的源,他的官网是 点击访问。
如果之前没有换过源,那么恭喜你哦,输入下面的命令即可自动替换:
sed -i 's_downloads.openwrt.org_mirrors.bfsu.edu.cn/openwrt_' /etc/opkg/distfeeds.conf
手动替换可以编辑 /etc/opkg/distfeeds.conf
文件,将其中的 downloads.openwrt.org
替换为 mirrors.bfsu.edu.cn/openwrt
。至于如何手工编译见下一节。
题外话,vim 操作简易指南
因为后续的文章会在命令行下编辑文本,使用叫 vim 的文本编辑工具。我简单介绍下用法。
用上一节的例子,我们要编辑的是 /etc/opkg/distfeeds.conf
这个文件,那么就输入:
vim /etc/opkg/distfeeds.conf
就会看见里面的文本
src/gz openwrt_core http://downloads.openwrt.org/releases/19.07.3/targets/ar71xx/nand/packages
src/gz openwrt_kmods http://downloads.openwrt.org/releases/19.07.3/targets/ar71xx/nand/kmods/4.14.180-1-3487e40b92src/gz openwrt_base http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/base
src/gz openwrt_luci http://downloads.openwrt.org/releases/19.07.3/packages/mips_24kc/luci
src/gz openwrt_packages http://downloads.openwrt.org/releases/19.07.3/packages/mips_24kc/packages
src/gz openwrt_routing http://downloads.openwrt.org/releases/19.07.3/packages/mips_24kc/routing
src/gz openwrt_telephony http://downloads.openwrt.org/releases/19.07.3/packages/mips_24kc/telephony
~
- /etc/opkg/distfeeds.conf 1/6 16%
最开始我先说一下如何退出,先按几次 esc
复位到初始状态,让后打 :q
回车,如果文档中的文本有修改的话使用 :q!
(不保存强制退出) 和 :wq
保存并退出。第一次见这种使用方式可能会觉得很惊讶,但是用多了真的会爱上他。
刚进入的时候是浏览模式,不能编辑,如果打字的话会被识别为各种快捷键的。如果要编辑,先按几次esc
到初始模式,然后按一下键盘上的 i
进入编辑模式,这时候就可以用键盘上的方向键换行,换光标,正常打字了,编辑完之后按一下 esc
退出编辑模式,然后 :wq
保存并退出
更新软件列表
输入 opkg update
回车来更新软件列表。
这个就是字面意思了,可以理解为获取下应用商店里都有什么软件,正常的输出如下:
root@gtf35-host:~# opkg update
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/targets/ar71xx/nand/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_core
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/targets/ar71xx/nand/packages/Packages.sig
Signature check passed.
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/targets/ar71xx/nand/kmods/4.14.180-1-3487e40b92bc4840fe01ec6a7fc6943b/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_kmods
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/targets/ar71xx/nand/kmods/4.14.180-1-3487e40b92bc4840fe01ec6a7fc6943b/Packages.sig
Signature check passed.
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/base/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_base
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/base/Packages.sig
Signature check passed.
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/luci/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_luci
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/luci/Packages.sig
Signature check passed.
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_packages
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/packages/Packages.sig
Signature check passed.
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/routing/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_routing
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/routing/Packages.sig
Signature check passed.
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/telephony/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_telephony
Downloading http://mirrors.bfsu.edu.cn/openwrt/releases/19.07.3/packages/mips_24kc/telephony/Packages.sig
Signature check passed.
root@gtf35-host:~#
看到最后的 Signature check passed.
才算是成功更新。如果有错误,比如 skip 跳过等字样,考虑换个源吧。
学习简单的包管理操作
最准确的教程大概就是官方文档了,我这里给出包管理的官方文档:OPKG 软件包管理
OpenWrt 使用 opkg 包管理程序,我这里列一下常用的命令:
安装软件
- 首先执行
opkg update
更新仓库列表,这个是必须的,因为重启设备会使可用软件包列表丢失,所以在试图安装软件包之前务必更新列表。 - 然后执行
opkg install <package>
,比如要安装中文的语言包就输入opkg install luci-i18n-base-zh-cn
一些例子:
opkg install hiawatha
opkg install http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages/hiawatha_7.7-2_ar71xx.ipk
opkg install /tmp/hiawatha_7.7-2_ar71xx.ipk
搜索软件
- 执行
opkg list [pkg|globp] ,比如要搜索 php 开头的软件就要执行:
opkg list php*`
卸载软件
opkg remove <pkgs|globp>
,比如要卸载adb
,就可以执行opkg remove adb
升级软件
- 使用
upgrade <pkgs>
,比如要更新adb
,就可以执行opkg upgrade adb
安装 PHP
我们这里要安装软件了,我们这次要安装的是 php,我们去 OpenWrt 的官网看下文档,点击访问关于 php 的文档。
这个文档没有被本地化,其实英文都很简单,不要怕,硬着头皮看看,应该都能看懂的。首先在文档的一开始的「Installation」章节就介绍了如何安装:
- 1 :执行
opkg update
更新列表,上节有介绍,这里不再赘述 - 2:执行
opkg list php*
,搜索下 php 开头的软件包,上节有介绍,这里不再赘述 - 3:
opkg install php7 php7-cgi
安装 php7 的本体和统一接口
并不难,很简单的,是吧,然后我们来配置,下面是我根据我的感受总结的:
1:修改网络框架,让他支持 php 的处理器, 具体操作是执行 vim /etc/config/uhttpd
,然后在文末追加,说明见注释即可
# web 是自己的这个配置的名字,可以换成自己喜欢的
config uhttpd web
# 在服务器中,0.0.0.0 指的是本机上的所有 IPV4 地址,[::] 是 IPV6 的
# 5332 是监听的端口,写 5332 的话,以后访问的网页就是类似 http://127.0.0.1:5332/hi.php
list listen_http 0.0.0.0:5332
list listen_http [::]:5332
# php cgi 的位置,无需改动
list interpreter ".php=/usr/bin/php-cgi"
# 网页的 home 目录,使用这个配置需要下一节的禁用 php.ini 的 home 配置为前提
# 路由器的 flash 空间不充足可以使用 U 盘等的挂载目录
option home /www/php_home
# 默认页面
option index_page index.php
# 不列出文件列表,如果不关闭的话,访问空地址会直接显示目录,会有安全风险
option no_dirlists yes
2:关闭 php.ini
让上文的 home
设置生效,否则会报错。
具体操作是执行 vim /etc/php.ini
,然后找到一行 doc_root = "/www"
,在前面加上个 ;
注释掉这行,让他不生效。示意如下:
; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;doc_root = "/www"
user_dir =
extension_dir = "/usr/lib/php"
enable_dl = On
3:重启网络框架让配置生效,具体操作是执行命令:/etc/init.d/uhttpd restart
4:上传 php 文件
- 1 先创建存放 php 的目录,按照上文写的目录是
/www/php_home
,其中www
已经有了,php_home
是我们自己建立的。至于单独建一个文件夹的原因是不和原有的luci
的目录混淆,方便管理。先执行cd /www/
进入到www
目录下,然后执行mkdir php_home
来创建文件夹。 2 准备 php 文件,新建一个文本文件,名为
hi.php
来承载测试代码,编辑内容:<?php echo phpinfo(); ?>
- 3 开始正式上传 php 文件,在放 php 的文件夹上按住
shift
右键,选择在「在此处打开 PowerShell 窗口」,然后输入命令scp .\hi.php root@192.168.1.1:/www/php_home/
然后输入密码上传文件。 - 4 测试,也就是最激动人心的环节了,打开浏览器访问:
http://192.168.1.1:5332/hi.php
(其中192.168.1.1
为路由器的 IP,5332
为配置文件中的监听端口号),看到下图即为成功:php测试页面 (可选)配置外网访问端口转发,依次执行下面的命令:
# 添加防火墙端口转发 uci add firewall redirect # 设置内部端口 uci set firewall.@redirect[-1].dest_port='5332' # 指定流量来源区域 # 必须引用定义的区域名称之一 uci set firewall.@redirect[-1].src='wan' # 设置策略的名字 uci set firewall.@redirect[-1].name='web' # 设置外部端口 uci set firewall.@redirect[-1].src_dport='5332' # 生成规则时要使用的NAT目标(DNAT或SNAT) uci set firewall.@redirect[-1].target='DNAT' # 指定流量目标区域 # 必须引用定义的区域名称之一 uci set firewall.@redirect[-1].dest='lan' # 提交防火墙修改 uci commit firewall # 重启防火墙 service firewall restart
以上命令更详细的信息请查阅官方文档:点击访问