OpenWrt 常用网络配置
文章记录了博主使用 OpenWrt 过程中多项常用网络功能的配置方法,包括 AP 模式、主机名设置、USB 联网等,以备后续之需。
切换为 AP 模式(Bridged AP)
一般场景,OpenWrt 路由器工作在「Router”」模式,包含了 NAT、拨号、DHCP、DNS 等功能。当想让一台无线 OpenWrt 设备仅作为无线接入点,而不提供路由功能,就需要让其工作在「Bridged AP」模式(俗称「无线AP」)。
按 AP 获取 IP 方式的不同,有两种方法让 OpenWrt 路由器工作在 AP 模式。
方法 1 - 手动设置 IP 模式
AP 进入 OpenWrt
- Interfaces
- LAN
在 Common Configuration
中将 LAN 接口的静态 Ipv4 地址设置为与主路由 LAN 同网段的 IP,例如:主路由的 192.168.1.1,则这里可设置为 192.168.1.2。
然后在 DHCP Server
中勾选 Disable DHCP for this interface.
关闭 AP 的 DHCP,由主路由进行 DHCP,以免冲突。
最后用一根网线将 AP 的 LAN 和主路由的 LAN 相连,即可实现 AP 模式。
方法 2 - AP 自动获取 IP 模式
AP 进入 OpenWrt
- Interfaces
- LAN
在 Common Configuration
中修改 Portocol
协议为 DHCP client
,然后用一根网线将 AP 的 LAN 和主路由的 LAN 相连,即可实现 AP 模式。
方法二相对简单灵活,但有一个缺点,即本机 IP 地址是随机的,导致要进入 AP 的管理面会有些棘手。因此最好结合主路由的静态 DHCP 规则或固定的局域网本地域名使用,参间本文 为设备配置本地域名本地域名 章节。
注意:博主建议使用方法 2,因为这样配置的 AP 可实现一次配置,多次使用,不需要根据主路由手动配置静态 IP。
为设备分配本地域名和静态 IP
我们知道主机名(hostname)可以代替 IP 地址进行访问,例如: ping hostname
、通过 http://hostname/
访问本地 Web 服务。
默认的,OpenWrt 会根据连接设备反馈的设备名配置其 DHCP 的 Hostname
记录,通过这些记录,IP 地址和 hostname 便一一关联起来。此外,OpenWrt 还为局域网配置了 Local domain
,默认后缀是 .lan
(你可以修改为任意值,但注意不要和公网域名冲突), 这种情况下 Galaxy-S8.lan
等价于 Galaxy-S8
。
如果对自动命名的主机名不满意或希望固定 IP,可以在 Network
- DHCP and DNS
- Static Leases
里自定义 Hostname
和对应的静态 IP。
注意:Chrome 浏览器需要在 hostname 的后面加一个 /
以转义关键词搜索;静态 IP 和 hostname 是绑定到 MAC 地址的,因此自定义 DHCP 静态记录时你需要指定设备的 MAC 地址。
使用 USB 绑定上网(USB RNDIS)
USB RNDIS 技术(协议),可以让操作系统通过 USB 设备虚拟出的网卡适配器连接到互联网,我们在 Android 手机上常见的 「USB 绑定/USB Tether」即使用此项技术。
OpenWrt 支持 RNDIS,因此也可以通过手机的 USB 绑定功能上网。方法如下
安装 kmod-usb-net-rndis
软件包
1
opkg install kmod-usb-net-rndis
手机通过 USB 数据线连接到 OpenWrt 设备的 USB 接口,然后打开手机的「USB 绑定
」功能开关。
如果一切正常,OpenWrt 命令控制台可看到如下提示,同时 OpenWrt 会新增一个名为「usb0
」的以太网适配器,表明 RNDIS 设备驱动成功
1
2
usb 1-4.1: new high-speed USB device number 58 using xhci_hcd
rndis_host 1-4.1:1.0 usb0: register 'rndis_host' at usb-0000:1b:00.0-4.1, RNDIS device, 02:05:xx:xx:xx:xx
提醒:如果你的 OpenWrt 运行在 ESXi 环境下,请参考我的这篇文章(TODO)为 OpenWrt 虚拟机添加 USB 设备。
然后 OpenWrt
- Network
- Interfaces
- Add new interface...
新增一个名为 TETHERING
的接口,将其绑定到 usb0
,协议选择 DHCP client
。如图所示
最后,OpenWrt
- Network
- FireWall
编辑 wan
域,将TETHERING
添加进来,就可以让你的 OpenWrt 使用手机网络上网了。
使用 USB 网卡上网(USB LTE MODEM)
如果你要让 OpenWrt 驱动一张 USB 4G 卡,需要安装以下依赖
1
kmod-usb-net-rndis, kmod-usb-net, kmod-usb2, usb-modeswitch, kmod-usb2-pci, kmod-usb-ohci-pci, kmod-usb-serial-option
然后参考 USB 绑定上网的配置方法
dnsmasq 缓存优化
- 优化 1 - 设置最小缓存时间
在 /etc/dnsmasq.conf 最后加入一行 min-cache-ttl=3600
使得所有 DNS 的缓存强制至少为一个小时
- 优化 2 - 增加缓存大小
先看当前缓存是否不够用:
openwrt 查看 dnsmasq 日志
1
2
killall -s USR1 dnsmasq
logread
例如: cache size 2000, 1606/17789 cache insertions re-used unexpired cache entries.
这里 17789 ,显示缓存插入数,1606 表示其中有 1606 次插入是因为空间不够而将未过期的条目剔除
所以要扩大缓存大小,进入 luci 界面设置即可,可设置为 3000
设置 DMZ 主机
进入 Firewall - Port Forwards
创建一个新的规则,其中 Protocol 选取 any,Source Zone 选 wan,Destination Zone 选 lan,Internal IP address 选 DMZ 主机的 IP。
注意,openwrt 的端口转发规则是多条规则按从上到下优先级,先匹配到规则后不再匹配后续的规则
桥接多个网卡适配器到 LAN
如果你的 OpenWrt 运行在 ESXi 虚拟机下,你可能想让主机的多个网口(网卡适配器)绑定到 OpenWrt 的 LAN 接口,并且互相桥接(此时多个网口的关系相当于交换机)。配置很简单,如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
vim /etc/config/network
## 仅单个网卡接入 LAN 的配置
config interface 'lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
option _orig_ifname 'eth3'
option _orig_bridge 'false'
option ifname 'eth3'
## 多个网卡接入 LAN 并启用桥接的配置
config interface 'lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
option _orig_ifname 'eth3'
option _orig_bridge 'true'
option type 'bridge'
option ifname 'eth0 eth2 eth3'
编辑完后执行以下命令使配置生效
1
/etc/init.d/network reload
实际效果如图所示