谷动谷力

 找回密码
 立即注册
查看: 1592|回复: 0
打印 上一主题 下一主题
收起左侧

【OpenWrt】OpenWrt网络配置详解

[复制链接]
跳转到指定楼层
楼主
发表于 2023-12-5 22:17:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
【OpenWrt】OpenWrt网络配置详解

OpenWrt是一款强大的路由器操作系统,当然OpenWrt还可以作为其他用途,目前应用最广泛的就是路由器。路由器的核心功能当然是网络,熟悉OpenWrt网络配置无论对于开发人员还是发烧友都至关重要。我认为OpenWrt是学习Linux网络的最佳系统,不仅可以学习基本的网络配置,还可以结合Linux内核学习Linux协议栈,这里先给大家介绍OpenWrt网络基本配置。
文章主要结合命令行进行讲解,因为很多人用x86虚拟机安装OpenWrt,首次配置时由于网络不通,经常不知所措。知道用命令行配置OpenWrt后,可以不需要web直接配置OpenWrt网络,这也大大方便折腾x86或者虚拟机的发烧友。
配置文件

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 Scopeink
          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命令

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'

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配置
  • 关闭lan口dhcp

dhcp服务器忽略lan口:uci set dhcp.lan.ignore=1
保存配置:uci commit dhcp
重启服务:/etc/init.d/dnsmasq restart

wan口配置

如果是路由器,默认就包含了wan接口,而如果是虚拟机,只配置了一个网卡,则需要配置wan接口搭建路由环境,具体见最后的OpenWrt虚拟网络环境搭建教程。

查看wan口配置

uci show network.wan

常用配置
wan口配置和lan口类似,也可以设置static、dhcp、pppoe等方式,我们可以通过uci命令修改,也可以通过vi命令编辑/etc/config/network配置文件修改,配置生效方式和lan口一样。

以下为各种方式的接口配置/etc/config/network

  • dhcp方式
config interface 'wan'
        option device 'eth1'
        option proto 'dhcp'
  • 静态ip
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'
  • pppoe拨号
config interface 'wan'
option device 'eth1'
option proto 'pppoe'
option username 'test'
option password '123456'
option ipv6 'auto'

虚拟机路由环境搭建
  • 增加虚拟网卡
    当我们通过虚拟机安装系统后默认只配置了一个网卡,所以我们还需要增加一个网卡,用于做wan口
  • 网络规划

为了方便模拟数据从lan到wan进行转发,我们需要增加一台虚拟PC,该PC和OpenWrt LAN口在同一个局域网,而OpenWrt wan口和物理PC在同一个局域网(通过桥接或NAT模式均可),这样虚拟PC上网数据就会经过OpenWrt处理,OpenWrt充当了一个路由器的角色。

网络拓扑
将OpenWrt lan接口配置为主机模式绑定为vmnet10(其他未占用的也可以),这样所有vmnet10中的网卡都和OpenWrt lan在同一个局域网。而wan口网卡设置为桥接模式,这样wan口可以获取到路由器分配的ip,并且和PC网卡ip在同一个网段。

网络拓扑图如下:

根据网络拓扑,还需要增加一台客户端,将网卡绑定到vmnet10,这样该客户端可以通过OpenWrt虚拟机联网,这里建议将OpenWrt系统克隆后修改网卡配置,作为客户端使用,当然你也可以增加一台windows、ubuntu虚拟机,连接OpenWrt路由器LAN口使用。

管理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配置文件/etc/config/dropbear,绑定到wan后重启服务即可,重启ssh服务命令/etc/init.d/dropbear restart


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-12-27 08:42 , Processed in 0.091254 second(s), 42 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表