OpenWRT 基础

Flash 分区

Linux系统对闪存类存储器是采用MTD设备驱动实现的。

[    0.290000] spi-mt7621 10000b00.spi: sys_freq: 193333333
[    0.300000] m25p80 spi32766.0: w25q256 (32768 Kbytes)
[    0.300000] m25p80 spi32766.0: using chunked io
[    0.310000] 4 ofpart partitions found on MTD device spi32766.0
[    0.310000] Creating 4 MTD partitions on "spi32766.0":
[    0.320000] 0x000000000000-0x000000030000 : "u-boot"
[    0.320000] 0x000000030000-0x000000040000 : "u-boot-env"
[    0.330000] 0x000000040000-0x000000050000 : "factory"
[    0.340000] 0x000000050000-0x000002000000 : "firmware"
[    0.410000] 2 uimage-fw partitions found on MTD device firmware
[    0.410000] 0x000000050000-0x000000168da1 : "kernel"
[    0.420000] 0x000000168da1-0x000002000000 : "rootfs"
[    0.420000] mtd: device 5 (rootfs) set to be root filesystem
[    0.430000] 1 squashfs-split partitions found on MTD device rootfs
[    0.440000] 0x000000620000-0x000002000000 : "rootfs_data"

::: tip 系统在SPI设备上创建了4个MTD分区 :::

分区名分区作用
u-boot引导程序
u-boot-env引导程序的配置数据
factory路由器芯片的初始化参数
firmware固件分区
kernel固件分区
Linux 内核
rootfs固件分区
文件系统子集
rootfs_rom固件分区
文件系统子集
只读分区子集
rootfs_data固件分区
文件系统子集
可写分区子集

::: tip 分区存在子分区,kernel和rootfs就是firmware的子分区,rootfs_rom和rootfs_data就是rootfs的子分区。 :::

查看系统 MTD 分配

root@Widora:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00030000 00010000 "u-boot"
mtd1: 00010000 00010000 "u-boot-env"
mtd2: 00010000 00010000 "factory"
mtd3: 01fb0000 00010000 "firmware"
mtd4: 00118da1 00010000 "kernel"
mtd5: 01e9725f 00010000 "rootfs"
mtd6: 019e0000 00010000 "rootfs_data"

查看系统 MTD 分配

root@Widora:~# cat /proc/partitions
major   minor  #blocks    name
31       0        192   mtdblock0
31       1         64   mtdblock1
31       2         64   mtdblock2
31       3      32448   mtdblock3
31       4       1123   mtdblock4
31       5      31324   mtdblock5
31       6      26496   mtdblock6

读取/备份 factory 分区

factory 分区(位于 /dev/mtd2)保存了重要的配置参数(如MAC地址,天线匹配参数等)。

查看分区内容

root@Widora:~# hexdump /dev/mtd2
0000000 7628 0001 ef0c d2af b8a9 0000 0000 0000
0000010 ffff ffff ffff ffff ffff ffff ffff ffff
0000020 0000 0000 0020 0000 ef0c d2af b8a9 ef0c
0000030 d2af b9a9 3422 2000 ffff 0100 0000 0000
0000040 0000 0022 0000 0000 0030 0000 0000 0000
0000050 0081 9400 b040 c640 c31a c2c3 c5c0 0027
0000060 ffff ffff ffff ffff ffff ffff ffff ffff
*
00000a0 c6c6 c4c4 c0c4 c4c0 c4c4 c0c4 c0c0 0000
00000b0 ffff ffff ffff ffff ffff ffff ffff ffff
*
00000f0 0000 0000 00d1 8800 0000 0000 0000 0000
0000100 ffff ffff ffff ffff ffff ffff ffff ffff
*
0000120 0000 0000 0000 0000 0000 0000 0000 0077
0000130 1d11 1d11 7f15 7f15 7f17 7f17 3b10 3b10
0000140 ffff ffff ffff ffff ffff ffff ffff ffff
*
0010000

备份分区

使用 dd 命令将分区读到一个文件中,然后使用浏览器下载到本地。

root@Widora:~# dd if=/dev/mtd2 of=/www/art.bin
128+0 records in
128+0 records out
root@Widora:~# ls -l /www/art.bin
-rw-r--r--    1 root     root         65536 Apr 27 18:26 /www/art.bin

文件系统

root@Widora:/# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                   26496       752     25744   3% /
/dev/root                 4864      4864         0 100% /rom
tmpfs                    63232        84     63148   0% /tmp
/dev/mtdblock6           26496       752     25744   3% /overlay
overlayfs:/overlay       26496       752     25744   3% /
tmpfs                      512         0       512   0% /dev
  1. 引导程序启动内核完成后,由内核加载 rootfs_rom 只读分区来完成系统的初步启动。rootfs_rom 只读分区采用的是 Linux 内核支持的 squashFS 文件系统,加载完毕后将其挂载到 /rom 目录,同时也挂载为 / 目录。
  2. 系统将使用 JFFS2 文件系统格式化的 rootfs_data 可写文件分区并将这部分挂载到 /overlay 目录。
  3. 系统再将 /overlay 透明挂载为 / 根目录。
  4. 最后将一部分内存挂载为/tmp 目录。

透明挂载根目录 /

::: tip

OpenWrt 设计的一个特点是:系统先将 rootfs_rom 挂载为 / 根目录,这样就具备了一个完整的系统,然后再将 rootfs_data 以透明方式挂载在 / 根目录上。

:::

  • 最终呈现的根文件系统是由 rootfs_romrootfs_data 两个分区组合在一起的效果。
  • 对任何文件的修改(增、删、改)都会记录在 rootfs_data 分区中。
  • 读取文件内容时,首先检测 rootfs_data 里的状态,再检测 roots_rom 里的内容,最后输出结果。

::: warning

如果修改了一个名为 abc 的文件,那么在 /rom 里还会保留修改之前的那个 abc 文件,同时在 /overlay 里有修改后的 abc 文件,因此所占的空间将会倍增。这样带来的一个好处是,在任何时候,只要删除 /overlay 里所有的文件,就能达到恢复出厂的效果。

:::

常用文件夹

文件夹路径作用
/etc/存放系统所有的配置文件
/etc/init.d/存放启动的服务脚本
/etc/config/存放 OpenWrt 的配置文件,包括网络
/tmp/存放临时文件和动态的配置文件
/tmp/TZ系统启动后所使用的时区参数

软件包管理器 OPKG

配置 OPKG

/etc/opkg.conf 文件保存 OPKG 相关设置:

root@Widora:/# cat /etc/opkg.conf
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
option check_signature 1
配置选项说明
dest root安装目标的跟路径
dest ram内存临时文件路径
lists_dir ext软件包列表文件
option overlay_root可写分区挂载位置

常用命令搭配

命令说明
opkg update下载服务器上可用的软件包列表
opkg upgrade <package>升级软件包
opkg install <package>安装软件包
opkg configure <package>配置某一个软件包
opkg remove <package>卸载软件包
opkg list列出全部可用的软件包
opkg list-installed列出已安装的软件包
opkg list-upgradable列出可以升级的软件包
opkg info [package|regexp]显示指定软件包的信息
opkg status [package|regexp]显示指定软件包的状态
opkg download <package>下载一个软件包到当前目录,但不安装

::: tip

软件包列表可能会比较大,因此并不保存在系统中,每次启动需要首先执行 opkg update 取得最新的软件包。

:::

root@Widora:/# opkg update
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/base/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_base.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/base/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/luci/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_luci.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/luci/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/management/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_management.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/management/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_packages.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/packages/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/routing/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_routing.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/routing/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/telephony/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_telephony.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7688/packages/telephony/Packages.sig.
Signature check passed.

UCI 命令系统

UCI (Unified Configuration Interface) 是 OpenWrt 中配置参数管理系统,UCI 中已经包含了网络配置、无线配置、系统信息配置等基本路由器所需的主要配置参数。

UCI 配置文件全部存储在 /etc/config 目录下:

root@Widora:/# ls /etc/config/
dhcp           fstab          mountd         shairport      uhttpd
dropbear       luci           network        system         wireless
firewall       mjpg-streamer  rpcd           ucitrack

常见的 UCI 配置:

配置文件作用
/etc/config/dhcp面向 LAN 口提供的 IP 地址分配服务配置
/etc/config/dropbearSSH 服务配置
/etc/config/firewall路由转发,端口转发,防火墙规则
/etc/config/network自身网络接口配置
/etc/config/system时间服务器时区配置
/etc/config/wireless无线网络配置

支持 UCI 管理模式的软件包是这样完成启动的(以 samba 软件为例):

  1. 启动脚本 /etc/init.d/samba
  2. 启动脚本通过 UCI 分析库从 /etc/config/samba 获得启动参数
  3. 启动脚本完成正常启动

::: warning

UCI 配置文件既可以使用 UCI 命令进行修改,也可以使用文本编辑器直接修改。但如果两种方式都使用,需要注意 UCI 命令修改会产生缓存,每次修改好要尽快保存确认,以免出现冲突。

:::

UCI 文件格式

config 'section-type' 'section'
	option 'key' 'value'
	option 'list_key' 'list_value1'
	option 'list_key' 'list_value2'

::: tip

UCI 允许只有 section-type 的匿名配置节点。

:::

UCI 命令读写配置

uci [<option>] <command> [<arguments>]

读取类语法

命令说明
uci get <config>.<section>获取节点类型
uci get <config>.<section>.<option>获取取得一个值
uci show显示全部 UCI 配置
uci show <config>显示指定文件配置
uci show <config>.<section>显示指定节点的配置
uci show <config>.<section>.<option>显示指定选项配置
uci changes <config>显示尚未生效的修改记录
uci show -X <config>.<section>.<option>显示匿名节点

写入类语法

命令说明
uci add <config> <section-type>增加一个匿名节点
uci set <config>.<section> = <section-type>增加一个节点/修改节点类型
uci set <config>.<section>.<option> = <value>增加一个选项值/修改一个选项值
uci add_list <config>.<section>.<option> = <value>在列表中增加一个值
uci delete <config>.<section>删除指定节点
uci delete <config>.<section>.<option>删除指定选项
uci delete <config>.<section>.<list>删除列表
uci del_list <config>.<section>.<option> = <string>删除列表中的一个值
uci commit <config>使修改生效

::: warning

UCI 读取总是先读取内存中的缓存,然后再读取文件中的。进行过增删改操作后要执行生效指令,否则所有的修改只留存在缓存中。

:::

常用配置操作

查看 system 配置

root@Widora:/# cat /etc/config/system
config system
	option hostname	Widora
	option timezone	CST-8

config timeserver ntp
	list server	0.openwrt.pool.ntp.org
	list server	1.openwrt.pool.ntp.org
	list server	2.openwrt.pool.ntp.org
	list server	3.openwrt.pool.ntp.org
	option enabled 1
	option enable_server 0
root@Widora:/# uci show system
system.@system[0]=system
system.@system[0].hostname='Widora'
system.@system[0].timezone='CST-8'
system.ntp=timeserver
system.ntp.server='0.openwrt.pool.ntp.org' '1.openwrt.pool.ntp.org' '2.openwrt.pool.ntp.org' '3.openwrt.pool.ntp.org'
system.ntp.enabled='1'
system.ntp.enable_server='0'

查看网络配置

root@Widora:/# cat /etc/config/network

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fdff:c5b2:821c::/48'

config interface 'lan'
	option force_link '1'
	option macaddr '0c:ef:af:d2:a9:b9'
	option type 'bridge'
	option proto 'static'
	option ipaddr '192.168.8.1'
	option netmask '255.255.255.0'
	option ip6assign '60'
	option ifname 'eth0.1'

config interface 'wan'
	option force_link '1'
	option macaddr '0c:ef:af:d2:a9:b8'
	option proto 'dhcp'
	option ifname 'eth0.2'

config interface 'wan6'
	option proto 'dhcpv6'
	option ifname 'eth0.2'

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '1 2 3 4 6t'

config switch_vlan
	option device 'switch0'
	option vlan '2'
	option ports '0 6t'

重启网络使配置生效

root@Widora:~# /etc/init.d/network restart

开启 Wi-Fi

uci set wireless.radio0.disabled=0 # 使能 Wi-Fi
uci commit wireless # 使配置生效
wifi # 启动 Wi-Fi

查看当前网络

root@Widora:/# ifconfig
br-lan    Link encap:Ethernet  HWaddr 0C:EF:AF:D2:A9:B9
          inet addr:192.168.8.1  Bcast:192.168.8.255  Mask:255.255.255.0
          inet6 addr: fe80::eef:afff:fed2:a9b9/64 Scope:Link
          inet6 addr: fdff:c5b2:821c::1/60 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:574264 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1217669 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:48102567 (45.8 MiB)  TX bytes:1634912136 (1.5 GiB)

eth0      Link encap:Ethernet  HWaddr 0C:EF:AF:D2:A9:B8
          inet6 addr: fe80::eef:afff:fed2:a9b8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1225320 errors:0 dropped:0 overruns:0 frame:0
          TX packets:579507 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1641989813 (1.5 GiB)  TX bytes:59132909 (56.3 MiB)
          Interrupt:5

eth0.1    Link encap:Ethernet  HWaddr 0C:EF:AF:D2:A9:B8
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1 errors:0 dropped:1 overruns:0 frame:0
          TX packets:3544 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:46 (46.0 B)  TX bytes:244206 (238.4 KiB)

eth0.2    Link encap:Ethernet  HWaddr 0C:EF:AF:D2:A9:B8
          inet addr:192.168.1.5  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::eef:afff:fed2:a9b8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1176423 errors:0 dropped:10706 overruns:0 frame:0
          TX packets:575928 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1617670919 (1.5 GiB)  TX bytes:56565373 (53.9 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:294 errors:0 dropped:0 overruns:0 frame:0
          TX packets:294 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:41961 (40.9 KiB)  TX bytes:41961 (40.9 KiB)

ra0       Link encap:Ethernet  HWaddr 0C:EF:AF:D2:A9:B8
          inet6 addr: fe80::eef:afff:fed2:a9b8/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:641847 errors:830 dropped:0 overruns:0 frame:0
          TX packets:1228723 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:70965355 (67.6 MiB)  TX bytes:1630822247 (1.5 GiB)
          Interrupt:6
网络设备名说明
br-lan虚拟设备,LAN 口桥接设备,包含通过 LAN 口和 WAN 口连入系统的设备统一桥接
eth0真实设备,CPU 内部到交换机芯片之间只有一个接口
eth0.1虚拟设备,由 VLAN 划分的有线的 LAN 口,VLAN 编号为 1
eth0.2虚拟设备,由 VLAN 划分的有线的 LAN 口,VLAN编号为 2
lo虚拟设备,回环设备
ra0真实设备,启动 Wi-Fi 后将会产生此无线设备
pppoe-wan虚拟设备,是 PPPoE 拨号上网成功后产生的

查看 br-lan 桥状态

root@Widora:/# brctl show
bridge name	bridge id			STP enabled	interfaces
br-lan		7fff.0cefafd2a9b9	no			eth0.1
											ra0

查看内核日志

root@Widora:/# logread

查看当前 VLAN 划分

root@Widora:/# swconfig dev switch0 show
Global attributes:
	enable_vlan: 1
	alternate_vlan_disable: 0
	bc_storm_protect: 0
	led_frequency: 0
Port 0:
	disable: 0
	doubletag: 0
	untag: 1
	led: 5
	lan: 1
	recv_bad: 0
	recv_good: 2205
	tr_bad: 0
	tr_good: 52155
	pvid: 2
	link: port:0 link:up speed:100baseT full-duplex
Port 1:
	disable: 0
	doubletag: 0
	untag: 1
	led: 5
	lan: 1
	recv_bad: 0
	recv_good: 0
	tr_bad: 0
	tr_good: 0
	pvid: 1
	link: port:1 link:down
Port 2:
	disable: 0
	doubletag: 0
	untag: 1
	led: 5
	lan: 1
	recv_bad: 0
	recv_good: 0
	tr_bad: 0
	tr_good: 0
	pvid: 1
	link: port:2 link:down
Port 3:
	disable: 0
	doubletag: 0
	untag: 1
	led: 5
	lan: 1
	recv_bad: 0
	recv_good: 0
	tr_bad: 0
	tr_good: 0
	pvid: 1
	link: port:3 link:down
Port 4:
	disable: 0
	doubletag: 0
	untag: 1
	led: 5
	lan: 1
	recv_bad: 0
	recv_good: 0
	tr_bad: 0
	tr_good: 0
	pvid: 1
	link: port:4 link:down
Port 5:
	disable: 1
	doubletag: 0
	untag: 0
	led: ???
	lan: 1
	recv_bad: 0
	recv_good: 0
	tr_bad: 0
	tr_good: 0
	pvid: 0
	link: port:5 link:down
Port 6:
	disable: 0
	doubletag: 0
	untag: 0
	led: ???
	lan: ???
	recv_bad: ???
	recv_good: ???
	tr_bad: ???
	tr_good: ???
	pvid: 0
	link: port:6 link:up speed:1000baseT full-duplex
VLAN 1:
	ports: 1 2 3 4 6t
VLAN 2:
	ports: 0 6t

::: tip

哪个网口是 LAN, 哪个是 WAN, 是由 VLAN 划分的。VLAN1 为 LAN 口,包含 1、2、3、4 接口;VLAN2 为 WAN 口,包含了 0 接口。

:::

配置 WAN 口外网

查看 WAN 口配置

root@Widora:/# uci show network.wan
network.wan=interface
network.wan.force_link='1'
network.wan.macaddr='0c:ef:af:d2:a9:b8'
network.wan.proto='dhcp'
network.wan.ifname='eth0.2'
选项说明可选值
ifname设备接口名eth0.2
proto协议类型static:静态 IP 地址
dhcp:动态获取 IP 地址
pppoe:拨号上网
pptp:远程 VPN 服务器
3g:连接 3G/4G 无线电话网络
macaddrWAN 口 MAC 地址,修改该地址即可实现 MAC 地址克隆首次数据根据 factory 分区内参数自动生成

动态获取 IP 选项

选项说明可选值及说明
proto协议类型dhcp
ifname设备名称eth0.2
macaddrMAC 地址根据 factory 分区自动生成的值
mtu最大数据包大小,默认不用设置数值
reqopts在向 DHCP 服务器发出请求时增加附加的 DHCP 信息字符串
dns使用指定的 DNS 服务器地址替代获得的 DNS字符串

指定静态 IP 选项

选项说明可选值及说明
proto协议类型static
ifname设备名称eth0.2
macaddrMAC 地址根据 factory 分区自动生成的值
mtu最大数据包大小,默认不用设置数值
ipaddrWAN 口的 IP 地址字符串
netmaskWAN 口的子网掩码字符串
gateway默认网关字符串
broadcast广播地址字符串
dns使用指定的 DNS 服务器地址替代获得的 DNS字符串

PPPOE 拨号上网选项

选项说明可选值及说明
proto协议类型pppoe
ifname设备名称eth0.2
macaddrMAC 地址根据 factory 分区自动生成的值
mtu最大数据包大小,默认不用设置数值
username拨号使用的帐号字符串
password拨号使用的密码字符串
ac使用指定的访问集中器进行连接字符串
service连接的服务名称字符串
connect连接时候执行的外部脚本字符串
disconnect断开连接时执行的外部脚本字符串
demand等待多久没有活动就断开 PPPOE 连接数字,单位秒
dnsDNS 服务器地址字符串
pppd_options用于 pppd 进程执行时候的附加参数字符串

配置 LAN 口服务

::: tip

LAN 口下的设备可以通过 WAN 口接入网络,也可以直接访问设备上的各项功能(系统防火墙对 LAN 口默认不做任何拦截)。

:::

查看 LAN 口配置

root@Widora:~# uci show network.lan
network.lan=interface
network.lan.force_link='1'
network.lan.macaddr='0c:ef:af:d2:a9:b9'
network.lan.type='bridge'
network.lan.proto='static'
network.lan.ipaddr='192.168.8.1'
network.lan.netmask='255.255.255.0'
network.lan.ip6assign='60'
network.lan.ifname='eth0.1'
选项说明可选值及说明
ifname设备名称eth0.1
proto协议类型static
macaddrMAC 地址根据 factory 分区自动生成的值
type网络类型bridge,桥模式(这样才有交换机功能)
ipaddrLAN 口的 IP 地址,用于局域网内其它设备访问路由器字符串
netmaskLAN 口的子网掩码字符串

::: warning

修改过 LAN 口的配置后要重启网络以及 DHCP 服务。

root@Widora:~# /etc/init.d/network restart
root@Widora:~# /etc/odhcpd restart

:::

配置无线网络

查看无线网络配置

root@Widora:~# cat /etc/config/wireless

config wifi-device 'radio0'
	option type 'ralink'
	option variant 'mt7628'
	option country 'CN'
	option hwmode '11bgn'
	option htmode 'HT40'
	option channel 'auto'
	option disabled '0'

config wifi-iface 'ap'
	option device 'radio0'
	option mode 'ap'
	option network 'lan'
	option ifname 'ra0'
	option ssid 'Widora-A9B8'
	option hidden '0'
	option encryption 'psk2'
	option key 'passworkd'

config wifi-iface 'sta'
	option device 'radio0'
	option disabled '1'
	option mode 'sta'
	option network 'wwan'
	option ifname 'apcli0'
	option ssid 'UplinkAp'
	option key 'SecretKey'

wifi-device 选项参数

选项说明可选值及说明
type设备类型ralink
channel无线信道,不同的国家支持的信道不同auto 或 1~13
hwmode无线协议类型11bgn: IEEE802.11b + IEEE802.11g + IEEE802.11n
htmode无线频宽HT20、HT40
disable关闭无线设备0:启用;1:禁用
country国家类型,跟支持的频道有关,中国为 CN,支持 1~13CN:中国

wifi-iface 选项参数

选项说明可选值及说明
device关联的无线设备radio0
network关联网络设备类型lan:表示桥接到 LAN 网上
wwan:表示启用无线中继
mode无线工作模式ap:热点模式
sta:客户端模式
ssid无线的名称字符串
hidden隐藏无线名称0:显示名称
1:隐藏名称
encryption无线加密方式none:不加密
psk:WPA-PSK 模式
psk2:WPA-PSK2 模式
psk-mixed:WPA-PSK / WPA-PSK2 混合模式
key无线密钥字符串,长度为 8~64 个 ASCII 字符

::: tip

修改过无线配置后需要使用命令 wifi 使之生效

:::

查看无线网络状态

root@Widora:~# iwinfo
ra0       ESSID: "Widora-A9B8"
          Access Point: 0C:EF:AF:D2:A9:B8
          Mode: Client  Channel: 7 (2.442 GHz)
          Tx-Power: 18 dBm  Link Quality: 10/100
          Signal: -256 dBm  Noise: -82 dBm
          Bit Rate: 150.0 MBit/s
          Encryption: unknown
          Type: wext  HW Mode(s): 802.11bg
          Hardware: unknown [Generic WEXT]
          TX power offset: unknown
          Frequency offset: unknown
          Supports VAPs: no  PHY name: ra0

搜索范围内的其它无线设备

root@Widora:~# iwinfo ra0 scan
Cell 01 - Address: 50:64:2B:4B:02:4E
          ESSID: "Xiaomi_024D"
          Mode: Master  Channel: 11
          Signal: -256 dBm  Quality: 55/100
          Encryption: WPA2 PSK (TKIP, AES-OCB)

Cell 02 - Address: 44:97:5A:EC:C5:14
          ESSID: "FAST_C514"
          Mode: Master  Channel: 1
          Signal: -256 dBm  Quality: 47/100
          Encryption: WPA2 PSK (AES-OCB)

防火墙

防火墙、DMZ(独立隔离区)、NAT 转发在 OpenWrt 系统中都是由 /etc/config/firewall 配置文件管理的。

防火墙命令

重置防火墙

root@Widora:~# /etc/init.d/firewall reload

重启防火墙

root@Widora:~# /etc/init.d/firewall restart

查看防火墙完整策略

root@Widora:~# iptables -L

防火墙 defaults 配置

config defaults
	option syn_flood	1			# 启用防洪水攻击
	option input		ACCEPT		# INPUT 链过滤策略
	option output		ACCEPT		# OUTPUT 链过滤策略
	option forward		REJECT		# FORWARD 链过滤策略

防火墙 zone 域配置

系统将 LAN 和 WAN 分为两个不同的 zone,它们之间是隔离的。

config zone
	option name			lan			# zone 节点名
	list   network		'lan'		# 指定绑定到该 zone 上的设备
	option input		ACCEPT
	option output		ACCEPT
	option forward		ACCEPT

config zone
	option name			wan
	list   network		'wan'
	list   network		'wan6'
	list   network		'wwan'
	option input		ACCEPT
	option output		ACCEPT
	option forward		REJECT
	option masq			1			# 传输伪装开关,WAN 必须设为 1
	option mtu_fix		1			# 数据输出时开启 MSS 钳制,WAN 必须设为 1

防火墙 forwarding 转发配置

forwarding 配置可以实现两个不同 zone 域之间的数据发送

config forwarding
	option src		lan			# 来源 zone
	option dest		wan			# 目标 zone

防火墙 rule 规则

默认情况下,所有进入 WAN 口的请求都会被拒绝,如果希望有例外,那么要通过 rule 来实现许可。

# Allow IPv4 ping
config rule
	option name			Allow-Ping
	option src			wan					# 数据源的 zone 域
	option proto		icmp				# 数据源的协议类型
	option icmp_type	echo-request
	option family		ipv4				# IP 协议类型
	option target		ACCEPT				# 规则动作

# 禁止 LAN 口的某个 IP 访问 WAN 口
config rule
	option src		lan						# 数据源的 zone 域
	option src_ip	192.168.45.2			# 数据源的 IP 地址
	option dest		wan						# 目的地的 zone 域
	option proto	tcp
	option target	REJECT

# 禁止某个 MAC 地址访问 WAN
config rule
	option dest		wan
	option src_mac	00:11:22:33:44:66		# 数据源的 MAC 地址
	option target	REJECT

# 阻塞某个 zone 上的 ICMP 流量
config rule
	option src		lan
	option proto	ICMP
	option target	DROP

防火墙 redirect 端口转发

端口转发允许访问者通过 WAN 口访问 LAN 口中的一个特定端口,并将结果转发回给访问者。

# 将 LAN 口的 80 端口开放到 WAN 口上
config redirect
	option src			wan				# 被转发来源 zone 域
	option src_dport	80				# 被转发的端口
	option dest			lan				# 转发到哪个 zone 域
	option dest_ip		192.168.16.235 	# 转发到哪个 IP 地址
	option dest_port	80				# 转发到哪个端口
	option proto		tcp				# 协议类型

# 将所有来自 WAN 口的 TCP 协议访问 22001 的请求都转发给 LAN 中的一台 80 端口的计算机
config redirect
	option src			wan
	option src_dport	22001
	option dest			lan
	option dest_port	22
	option proto		tcp

# 将 IP 地址 192.168.1.2 设置到 DMZ 隔离区
config redirect
	option src			wan
	option proto		all
	option dest_ip		192.168.1.2

NTP

NTP 用来使网络中的各个计算机时间同步的一种协议,它的用途是把系统的时钟同步到 UTC 时区,其精度在局域网内可达到 0.1ms,在互联网上绝大多数情况其精度可以达到1~50ms。

配置内容如下:

root@Widora:~# cat /etc/config/system
config system
	option hostname	Widora				# 主机名
	option timezone	CST-8				# 时区

config timeserver ntp
	list server	0.openwrt.pool.ntp.org	# NTP 服务器地址
	list server	1.openwrt.pool.ntp.org
	list server	2.openwrt.pool.ntp.org
	list server	3.openwrt.pool.ntp.org
	option enabled 1					# 开启 NTP 功能
	option enable_server 0

::: tip

阿里云提供了 NTP 服务功能:

ntp1.aliyun.com

ntp2.aliyun.com

ntp3.aliyun.com

:::

服务管理

查看系统服务命令

root@Widora:~# ls /etc/init.d/
avahi-daemon   dbus           dropbear       led            mountd         rpcd           sysctl         system         umount
boot           dnsmasq        firewall       log            network        setnetmode     sysfixtime     telnet
cron           done           fstab          mjpg-streamer  odhcpd         shairport      sysntpd        uhttpd

服务命令的语法格式

服务的语法格式:/etc/init.d/服务名称 [命令]
可用命令:
		start	临时开启这个服务
		stop	临时关闭这个服务
		restart 重启当前已开启的服务,如果没有开启就开启它
		reload 	重新读取该服务的配置信息(如果服务支持的话)
		enable	设置该服务随系统一同启动
		disable	禁止该服务随系统一同启动