本帖最后由 sunsili 于 2024-4-11 10:26 编辑
OpenWrt系统网络配置和UCI命令详解
配置文件OpenWrt所有配置保存在/etc/config目录,以下为主要的网络配置文件 - 网络接口配置 /etc/config/network
- 网络服务配置 /etc/config/dhcp
- 防火墙配置 /etc/config/firewall
网络接口
OpenWrt网络接口一般包含lan口和wan口,但如果是X86等设备,只设置了一张网卡,只会生成lan口信息,在虚拟机中我们默认只配置一个网卡,方便配置网络,等熟悉基本网络配置后再尝试将OpenWrt打造成一台路由器。
查看网卡配置和IP信息
在前面的教程中,我们将网卡IP设置成了动态获取IP,那我们查看网卡和IP信息有哪几种方式呢 - 通过web界面查看 这是我们最常用的查看方式,但作为开发人员,应该学会下面的命令行方式查看
- ifconfig ifconfig是一条用于显示和配置Linux/Unix操作系统中网络接口的命令。 ifconfig命令可以显示当前系统中所有可用的网络接口的信息,例如IP地址、MAC地址、子网掩码、广播地址等 命令格式: ifconfig $ifname 比如查看lan口信息:
- ifconfig br-lan
- br-lan Link encap:Ethernet HWaddr 00:0C:29:9F:9A:35
- inet addr:192.168.10.161 Bcast:192.168.10.255 Mask:255.255.255.0
- inet6 addr: fdf1:f344:c0d9::1/60 Scope:Global
- inet6 addr: fe80::20c:29ff:fe9f:9a35/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:71256 errors:0 dropped:0 overruns:0 frame:0
- TX packets:50883 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:19697329 (18.7 MiB) TX bytes:48109633 (45.8 MiB)
复制代码
查看所有接口: ifconfig 由于通过ifconfig只能看到ip和子网掩码信息,还要结合ip或route命令查看路由信息 - root@OpenWrt:~# ip route
- default via 192.168.10.1 dev br-lan src 192.168.10.161
- 192.168.10.0/24 dev br-lan scope link src 192.168.10.161
- root@OpenWrt:~#
- root@OpenWrt:~#
- root@OpenWrt:~# route
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- default 192.168.10.1 0.0.0.0 UG 0 0 0 br-lan
- 192.168.10.0 * 255.255.255.0 U 0 0 0 br-lan
- root@OpenWrt:~#
复制代码
ubus是OpenWrt中的一种轻量级RPC(Remote Procedure Call)机制,用于实现进程之间的通信。ubus支持基于JSON格式的消息传递和异步通信,它可以用来在OpenWrt设备上进行各种操作,例如获取设备状态、配置网络设置、查询系统信息等。 可以使用ubus命令查看OpenWrt设备的网络信息。具体步骤如下: 获取指定网络接口的详细信息(接口的名称、MAC地址、IP地址、子网掩码、广播地址、网关、DNS服务器) ubus call network.interface.<interface_name> status,其中<interface_name>是网络接口的名称。 例如,获取lan接口的详细信息: - ubus call network.interface.lan status
- {
- "up": true,
- "pending": false,
- "available": true,
- "autostart": true,
- "dynamic": false,
- "uptime": 14506,
- "l3_device": "br-lan",
- "proto": "dhcp",
- "device": "br-lan",
- "metric": 0,
- "dns_metric": 0,
- "delegation": true,
- "ipv4-address": [
- {
- "address": "192.168.10.161",
- "mask": 24
- }
- ],
- "ipv6-address": [
-
- ],
- "ipv6-prefix": [
-
- ],
- "ipv6-prefix-assignment": [
- {
- "address": "fdf1:f344:c0d9::",
- "mask": 60,
- "local-address": {
- "address": "fdf1:f344:c0d9::1",
- "mask": 60
- }
- }
- ],
- "route": [
- {
- "target": "0.0.0.0",
- "mask": 0,
- "nexthop": "192.168.10.1",
- "source": "192.168.10.161/32"
- }
- ],
- "dns-server": [
- "192.168.10.1"
- ],
- "dns-search": [
- ],
- "neighbors": [
-
- ],
- "inactive": {
- "ipv4-address": [
-
- ],
- "ipv6-address": [
-
- ],
- "route": [
-
- ],
- "dns-server": [
-
- ],
- "dns-search": [
-
- ],
- "neighbors": [
-
- ]
- },
- "data": {
- "dhcpserver": "192.168.10.1",
- "hostname": "OpenWrt",
- "leasetime": 1800
- }
- }
复制代码
我们也可以通过读取配置的方式获取网卡配置信息,但如果设置成了dhcp方式,状态数据不会存储在配置中,这种方式适合查看基本信息,比如ip地址获取方式、接口信息等 - 查看文件命令
cat /etc/config/network
- root@OpenWrt:~# cat /etc/config/network
- config interface 'loopback'
- option device 'lo'
- option proto 'static'
- option ipaddr '127.0.0.1'
- option netmask '255.0.0.0'
- config globals 'globals'
- option ula_prefix 'fdf1:f344:c0d9::/48'
- config device
- option name 'br-lan'
- option type 'bridge'
- list ports 'eth0'
- config interface 'lan'
- option device 'br-lan'
- option ipaddr '192.168.1.1'
- option netmask '255.255.255.0'
- option ip6assign '60'
- option proto 'dhcp'
复制代码
查看路由配置- route
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- default 192.168.3.252 0.0.0.0 UG 0 0 0 br-lan
- 192.168.3.0 * 255.255.255.0 U 0 0 0 br-lan
- 192.168.3.252 * 255.255.255.255 UH 0 0 0 br-lan
- 192.168.5.0 * 255.255.255.0 U 0 0 0 eth1
复制代码
uci配置查看命令
- uci show network
- root@OpenWrt:~# uci show network
- network.loopback=interface
- network.loopback.device='lo'
- network.loopback.proto='static'
- network.loopback.ipaddr='127.0.0.1'
- network.loopback.netmask='255.0.0.0'
- network.globals=globals
- network.globals.ula_prefix='fdf1:f344:c0d9::/48'
- network.@device[0]=device
- network.@device[0].name='br-lan'
- network.@device[0].type='bridge'
- network.@device[0].ports='eth0'
- network.lan=interface
- network.lan.device='br-lan'
- network.lan.ipaddr='192.168.1.1'
- network.lan.netmask='255.255.255.0'
- network.lan.ip6assign='60'
- network.lan.proto='dhcp'
- uci show network.lan
- root@OpenWrt:~# uci show network.lan
- network.lan=interface
- network.lan.device='br-lan'
- network.lan.ipaddr='192.168.1.1'
- network.lan.netmask='255.255.255.0'
- network.lan.ip6assign='60'
- network.lan.proto='dhcp'
复制代码
网络配置命令- 配置动态获取 uci set network.lan.proto=dhcp
- 配置静态IP
设置IP配置方式:uci set network.lan.proto='static'
设置LAN口的IP地址:uci set network.lan.ipaddr='192.168.10.100'
设置LAN口的子网掩码:uci set network.lan.netmask='255.255.255.0'
设置LAN口的网关地址:uci set network.lan.gateway='192.168.10.1'
设置DNS服务器地址:uci set network.lan.dns='8.8.8.8',如果有多个DNS服务器,可以用空格隔开多个IP地址,例如:uci set network.lan.dns='8.8.8.8 8.8.4.4'
保存修改后的配置:uci commit network
最后重启网络服务生效/etc/init.d/network reload
执行完以上步骤后,OpenWrt设备的LAN口将配置为静态IP地址192.168.10.100、子网掩码255.255.255.0、网关192.168.10.1、dns 8.8.8.8 完整命令: - uci set network.lan.proto='static'
- uci set network.lan.ipaddr='192.168.10.100'
- uci set network.lan.netmask='255.255.255.0'
- uci set network.lan.gateway='192.168.10.1'
- uci set network.lan.dns='8.8.8.8'
- uci commit network
- /etc/init.d/network reload
复制代码
执行后可以查看uci和配置文件 - root@OpenWrt:~# uci set network.lan.proto='static'
- root@OpenWrt:~# uci set network.lan.ipaddr='192.168.10.100'
- root@OpenWrt:~# uci set network.lan.netmask='255.255.255.0'
- root@OpenWrt:~# uci set network.lan.gateway='192.168.10.1'
- root@OpenWrt:~# uci set network.lan.dns='8.8.8.8'
- root@OpenWrt:~# uci commit network
- root@OpenWrt:~#
- root@OpenWrt:~#
- root@OpenWrt:~# uci show network.lan
- network.lan=interface
- network.lan.device='br-lan'
- network.lan.netmask='255.255.255.0'
- network.lan.ip6assign='60'
- network.lan.proto='static'
- network.lan.ipaddr='192.168.10.100'
- network.lan.gateway='192.168.10.1'
- network.lan.dns='8.8.8.8'
复制代码
lan接口修改后的配置 - config interface 'lan'
- option device 'br-lan'
- option netmask '255.255.255.0'
- option ip6assign '60'
- option proto 'static'
- option ipaddr '192.168.10.100'
- option gateway '192.168.10.1'
- option dns '8.8.8.8'
复制代码
网络重启命令修改网络配置后,有多种方式让配置生效
- /etc/init.d/network reload
- /etc/init.d/network restart
- ubus call network reload
复制代码 dhcp服务器配置dhcp服务器用于分配ip地址给局域网的客户端,默认lan口的dhcp服务器是开启的,如果lan口虚拟网卡设置的是桥接模式,那lan口和PC处于同一广播域,PC可能会获取到OpenWrt系统分配的IP。
为了防止出现多DHCP服务器,我们要么将LAN口获取ip的方式改为dhcp,要么将DHCP服务器关闭,这里教大家如何关闭DHCP服务器。 - 配置文件
dhcp服务器配置保存在/etc/config/dhcp中,里面dhcp服务器配置和接口dhcp配置
- cat /etc/config/dhcp
- config dnsmasq
- option domainneeded '1'
- option boguspriv '1'
- option filterwin2k '0'
- option localise_queries '1'
- option rebind_protection '1'
- option rebind_localhost '1'
- option local '/lan/'
- option domain 'lan'
- option expandhosts '1'
- option nonegcache '0'
- option authoritative '1'
- option readethers '1'
- option leasefile '/tmp/dhcp.leases'
- option resolvfile '/tmp/resolv.conf.auto'
- option localservice '1'
- config dhcp 'lan'
- option interface 'lan'
- option start '100'
- option limit '150'
- option leasetime '12h'
- option dhcpv6 'server'
- option ra 'server'
- option ra_management '1'
- config dhcp 'wan'
- option interface 'wan'
- option ignore '1'
- config odhcpd 'odhcpd'
- option maindhcp '0'
- option leasefile '/tmp/hosts/odhcpd'
- option leasetrigger '/usr/sbin/odhcpd-update'
复制代码
dhcp服务器忽略lan口: - uci set dhcp.lan.ignore=1
复制代码
保存配置:
重启服务:
- /etc/init.d/dnsmasq restart
复制代码
wan口配置如果是路由器,默认就包含了wan接口,而如果是虚拟机,只配置了一个网卡,则需要配置wan接口搭建路由环境,具体见最后的OpenWrt虚拟网络环境搭建教程。 查看wan口配置
常用配置
wan口配置和lan口类似,也可以设置static、dhcp、pppoe等方式,我们可以通过uci命令修改,也可以通过vi命令编辑/etc/config/network配置文件修改,配置生效方式和lan口一样。
以下为各种方式的接口配置/etc/config/network - config interface 'wan'
- option device 'eth1'
- option proto 'dhcp'
复制代码
切换dhcp网卡- udhcpc -i eth1
- udhcpc (v1.23.2) started
- Sending discover...
- Sending select for 192.168.5.8...
- Lease of 192.168.5.8 obtained, lease time 30840
- udhcpc: ifconfig eth1 192.168.5.8 netmask 255.255.255.0 broadcast +
- udhcpc: setting default routers: 192.168.5.1
复制代码
- config interface 'wan'
- option device 'eth1'
- option proto 'static'
- option ipaddr '192.168.10.171'
- option netmask '255.255.255.0'
- list dns '192.168.10.1'
- list dns '8.8.8.8'
复制代码
- config interface 'wan'
- option device 'eth1'
- option proto 'pppoe'
- option username 'test'
- option password '123456'
- option ipv6 'auto'
复制代码
管理OpenWrt 设备按以上拓扑部署后大家应该发现一个问题,就是物理PC不能直接访问OpenWrt了,因为PC和OpenWrt wan口在同网段,和OpenWrt lan不在同一网段。
那如何管理配置OpenWrt系统呢?
这里有两个方案: - 新增一台虚拟PC连接在OpenWrt LAN口,这样在虚拟PC中可以直接管理OpenWrt
- 通过wan口访问OpenWrt系统
注意默认是不能直接通过wan口访问的,因为OpenWrt默认开启了wan口防火墙,需要先关闭 - 关闭wan口防火墙
- 打开防火墙配置,找到wan口的配置规则,将REJECT修改为ACCEPT,然后重新加载防火墙规则
vi /etc/config/firewall
/etc/init.d/firewall restart这样就可以通过web访问OpenWrt系统了,注意通过wan口ip访问。 也可以通过ssh连接wan口ip访问后台,注意低版本的OpenWrt需要绑定ssh服务到wan口才能访问,ssh配置文件`/
|