我的需求:

记得最开始学Linux的时候,使用VM虚拟机安装,配置网络,希望可以和主机互通,同时希望可以访问外网,改配置文件,照着网上的博客,改了又改,捣鼓了好几天也弄不好。

我需要解决的问题:

后来工作了慢慢会了,而且网络的管理工具也变了,对于centos来讲,network.service变成了NetworkManager.service,配置方式更多的是通过命令,或者UI界面的方式去配置,一般不去修改配置文件了,这里和小伙伴讲解一下linux的网络配置,希望小伙伴们学的时候不会乱糟糟的改配置文件,同时对于虚拟网络类型有个大概的了解。

我是这样做的:

我们这里使用的linux的版本为 Centos 7 ,博文主要讲解:

  • Linu虚拟网络配置的常用方
  • Linxu常用的网络配置命令

一个成熟的人没有任何职责,除了这个:寻找自己,坚定地成为自己,不论走向何方,都往前探索自己的路。——赫尔曼·黑塞《德米安》


一、Linu虚拟网络配置的常用方式

1、桥接模式

1、为什么要叫桥接模式?

关于桥接模式,是设计模式的一种,了解过设计模式的小伙伴应该不陌生,这里简单回忆下,没有了解的直接忽略,不重要。

桥接模式,桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦,我们看一个java的Demo
在这里插入图片描述
使用相同的抽象类方法但是不同的桥接实现类,来画出不同颜色的圆
创建桥接实现接口DrawAPI.java
public interface DrawAPI {
   public void drawCircle(int radius, int x, int y);
}
创建实现了 DrawAPI 接口的实体桥接实现类。RedCircle.java,GreenCircle.java
public class RedCircle implements DrawAPI {
   @Override
   public void drawCircle(int radius, int x, int y) {
      System.out.println("Drawing Circle[ color: red, radius: "
         + radius +", x: " +x+", "+ y +"]");
   }
}
public class GreenCircle implements DrawAPI {
   @Override
   public void drawCircle(int radius, int x, int y) {
      System.out.println("Drawing Circle[ color: green, radius: "
         + radius +", x: " +x+", "+ y +"]");
   }
}
使用 DrawAPI 接口创建抽象类 Shape。Shape.java
public abstract class Shape {
   protected DrawAPI drawAPI;
   protected Shape(DrawAPI drawAPI){
      this.drawAPI = drawAPI;
   }
   public abstract void draw();  
}
创建实现了 Shape 抽象类的实体类。Circle.java
public class Circle extends Shape {
   private int x, y, radius;
 
   public Circle(int x, int y, int radius, DrawAPI drawAPI) {
      super(drawAPI);
      this.x = x;  
      this.y = y;  
      this.radius = radius;
   }
 
   public void draw() {
      drawAPI.drawCircle(radius,x,y);
   }
}
使用 Shape 和 DrawAPI 类画出不同颜色的圆。BridgePatternDemo.java
public class BridgePatternDemo {
   public static void main(String[] args) {
      Shape redCircle = new Circle(100,100, 10, new RedCircle());
      Shape greenCircle = new Circle(100,100, 10, new GreenCircle());

      redCircle.draw();
      greenCircle.draw();
   }
}

类比虚拟机网络连接这一块,linux系统联网是一个抽象行为,他需要网卡才可以和外部连接,那么网卡就是他的一个桥接接口,我们通过网卡的实现类来实现网络的互通,这里我们有两种网卡,真机的物理网卡, 虚机的虚拟网卡,所以有两个桥接实现类,通过桥接模式,我们解耦了联网这种抽象行为和具体网卡的联网实现。

2、桥接模式可以做什么

下面回到正题,我们要通过桥接模式,实现这样一个场景,就那我们常用的笔记本来说,我要通过笔记本上的无线网卡连接公网,然后通过虚机配置桥接模式,实现我的虚机可以ping通真机,也可以ping通公网,同时多个虚机可以ping通.
在这里插入图片描述

在实际的工作中,我们需要一个交换机可以完成这样的需求,VM的桥接模式帮我们虚拟了一个交换机,配置桥接模式后,我们虚机和真机就位于一个网段内,且掩码相同,彼此可以ping通。

在这里插入图片描述

虚机网卡 与 真机网卡 通过桥接实现;桥接物理网卡,相当于直连到 真机 所在网络;配置桥接模式后:

真机网卡信息,使用的无线网卡,ip为192.168.1.4
在这里插入图片描述

虚机网卡信息,linux网关查看,可以看出虚机的网络ip为:192.168.1.10

┌──[root@master]-[~]
└─$ ifconfig ens33 | head -2
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
┌──[root@master]-[~]
└─$  route -n | grep ens33
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
┌──[root@master]-[~]
└─$  route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 ens33
10.254.0.0      0.0.0.0         255.255.0.0     U     0      0        0 flannel.1
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
┌──[root@master]-[~]
└─$
  • 网关第一行的意思就是去往所有目标地址数据包由网关192.168.1.1 通过网卡ens33来转发;0.0.0.0代表的是匹配所有目标地址
  • 网关第二行:意思就是去往10.254.0.0 地址的数据包通过flannel.1网桥设备来转发

在它显示的信息中,如果标志是 U,则说明是可达路由(活动的);如果是 G,则说明这个网络接口连接的是网关,H则说明目标是一个主机。

3. 桥接模式如何配置:

说了这么多,来具体操作一下,桥接模式到底要怎么配置:

&&&&&&&&&&&&&&&&&&配置网络步骤&&&&&&&&&&&&&&&&&&
桥接模式下,要自己选择桥接到哪个网卡(实际联网用的网卡),然后确认
在这里插入图片描述
配置网卡为DHCP模式(自动分配IP地址):执行方式见表尾,这里值得一说的是,如果网络换了,那么所以有的节点ip也会换掉,因为是动态的,但是还是在一个网段内。DNS和SSH免密也都不能用了,需要重新配置,但是如果你只连一个网络,那就没影响。
nmcli connection modify 'ens33' ipv4.method auto connection.autoconnect yes #将网卡改为DHCP模式(动态分配IP)nmcli connection up 'ens33'

配置网卡为DHCP模式(自动分配IP地址)


┌──[root@localhost.localdomain]-[~] 
└─$ nmcli connection modify 'ens33' ipv4.method auto   connection.autoconnect yes
┌──[root@localhost.localdomain]-[~] 
└─$ nmcli connection up 'ens33'
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
┌──[root@localhost.localdomain]-[~] 
└─$ ifconfig | head -2 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.7  netmask 255.255.255.0  broadcast 192.168.1.255
┌──[root@localhost.localdomain]-[~] 
└─$ 
┌──[root@192.168.1.7]-[~] 
└─$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.7  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::8899:b0c7:4b50:73e0  prefixlen 64  scopeid 0x20<link>
        inet6 240e:319:707:b800:2929:3ab2:f378:715a  prefixlen 64  scopeid 0x0<global>
        ether 00:0c:29:b6:a6:52  txqueuelen 1000  (Ethernet)
        RX packets 535119  bytes 797946990 (760.9 MiB)
        RX errors 0  dropped 96  overruns 0  frame 0
        TX packets 59958  bytes 4119314 (3.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 616  bytes 53248 (52.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 616  bytes 53248 (52.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:2e:66:6d  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

┌──[root@192.168.1.7]-[~] 
└─$ 

当然,桥接模式特别方便,但是也有一个弊端,就是当更换网络时,ip都会变化,关于这一点,我们可以使用NAT模式,这个我们最后讲。

2、隔离模式

1、什么是隔离模式,隔离模式能做什么

关于隔离模式,顾名思义,就是虚机可以ping通真机上的上的其他虚机,也可以ping通真机,但是不能ping通外网。

这里如果小伙使用vm虚拟机,那么在装好系统以后会自动生成两个虚拟网卡,vmnet1和vmnet8
在这里插入图片描述
我们可以使用vmnet1或者vmnet8虚拟网卡来实现隔离模式的网络配置。
在这里插入图片描述

2、如何配置隔离模式

下面和小伙伴分享隔离模式如何配置
这里我们使用vmnet1 配置网络,配置虚拟网卡
在这里插入图片描述
设置网络为vmnet1
在这里插入图片描述
nmcli connection modify 'ens33' ipv4.method auto connection.autoconnect yes,nmcli connection up 'ens33',这里使用静态的也可以,一般也是设置成静态,这里为了方便.
静态配置方式,注意ip和掩码 nmcli connection modify 'ens33' ipv4.method manual ipv4.addresses 192.168.4.12/24 connection.autoconnect yes,nmcli connection up 'ens33'
到这里我们已经基于隔离模式配置好了网网络,虚机看看网卡信息,测试一下
在这里插入图片描述
这里如果不通的话,需要关闭真机的防火墙试试
在这里插入图片描述
在这里插入图片描述
嗯,然后做真机测试一下
在这里插入图片描述

虚机网卡配置

──[root@master]-[~] 
└─$ nmcli connection modify 'ens33' ipv4.method auto connection.autoconnect yes
┌──[root@master]-[~] 
└─$ nmcli connection up 'ens33'
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/8)
┌──[root@master]-[~] 
└─$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:5e:c9:7f brd ff:ff:ff:ff:ff:ff
    inet 192.168.5.128/24 brd 192.168.5.255 scope global noprefixroute dynamic ens33
       valid_lft 1798sec preferred_lft 1798sec
    inet 192.168.0.106/32 brd 192.168.0.106 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::8899:b0c7:4b50:73e0/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:2e:66:6d brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:2e:66:6d brd ff:ff:ff:ff:ff:ff
┌──[root@master]-[~] 
└─$ 
┌──[root@master]-[~]
└─$ 

3、NAT模式

1、什么是NAT模式,NAT模式能做什么

NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网.

在NAT模式中,主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。这里的VMware Network Adapter VMnet8虚拟网卡主要是为了实现主机与虚拟机之间的通信

使用NAT模式,可以实现上面桥接模式的功能,同时又不需要考虑IP的问题

2、NAT模式的配置

配置真机vm8网卡,添加ip,用于和虚机通信
在这里插入图片描述
配置虚机为NAT模式,添加子网IP
在这里插入图片描述
配置虚机IP
在这里插入图片描述

然后启动虚机,配置ip这里我们写了一个脚本配置,直接 运行脚本 + ip最后一位。

#!/bin/bash
if [ $# -eq 0 ]; then
        echo "usage: `basename $0` num"
        exit 1
fi
[[ $1 =~ ^[0-9]+$ ]]
if [ $? -ne 0 ]; then
        echo "usage: `basename $0` 10~240"
        exit 1
fi

cat > /etc/sysconfig/network-scripts/ifcfg-ens32 <<EOF
TYPE=Ethernet
BOOTPROTO=none
NAME=ens32
DEVICE=ens32
ONBOOT=yes
IPADDR=192.168.26.${1}
NETMASK=255.255.255.0
GATEWAY=192.168.26.2
DNS1=192.168.26.2
EOF

systemctl restart network &> /dev/null
ip=$(ifconfig ens32 | awk '/inet /{print $2}')
sed -i '/192/d' /etc/issue
echo $ip
echo $ip >> /etc/issue
hostnamectl set-hostname vms${1}.liruilongs.github.io
echo "192.168.26.${1} vms${1}.rhce.cc vms${1}"  >> /etc/hosts
┌──[root@liruilongs.github.io]-[~]
└─$ ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.26.55  netmask 255.255.255.0  broadcast 192.168.26.255
        inet6 fe80::20c:29ff:fec9:6fae  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:c9:6f:ae  txqueuelen 1000  (Ethernet)
        RX packets 217344  bytes 305924645 (291.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 31035  bytes 2482366 (2.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

┌──[root@liruilongs.github.io]-[~]
└─$

二、linxu常用的网络配置命令

1、配置静态主机名

linux主机名的配置在配置文件 /etc/hostname 这里需要注意的是 一般的命里提示服配置的都是-h即短的主机名,只会显示·前面的部分,要想全部显示,需要修改为-H

E:\docker>ssh  root@39.97.241.18
Last failed login: Thu Sep 16 19:46:40 CST 2021 from 47.106.250.53 on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Thu Sep 16 17:48:01 2021 from 121.57.15.165

Welcome to Alibaba Cloud Elastic Compute Service !

How would you spend your life?.I don't know, but I will cherish every minute to live.
[root@liruilong ~]# echo liruilongs.github.io > /etc/hostname
[root@liruilong ~]# cat /etc/hostname
liruilongs.github.io
[root@liruilong ~]#
[root@liruilong ~]# echo liruilongs.github.io > /etc/hostname #重定向将主机名写入配置文件,重启系统后才会生效
[root@liruilong ~]# cat /etc/hostname #查看配置文件
liruilongs.github.io
##临时设置的主机名,重新开一个终端即可生效 Ctrl + Shift + T
[root@liruilong ~]# hostname liruilongs.github.io #临时设置主机名
[root@liruilong ~]# hostname #查看当前系统的主机名
liruilongs.github.io
[root@liruilong ~]#

2. NetworkManager

NetworkManager主要管理2个对象:Connection(网卡连接配置) 和 Device(网卡设备),他们之间是多对一的关系,但是同一时刻只能有一个Connection对于Device才生效。这里理解的话,我们要配置linux网络的话,主要就是使用的这个配置的。

RHEL 8/Centos 8 有四种方法配置网络:

  • 通过nmcli connection add命令配置,会自动生成ifcfg文件。我们上面用的就是这种。
  • 手动配置ifcfg文件,通过nmcli connection reload来加载生效。
  • 手动配置ifcfg文件,通过传统network.service来加载生效。
  • 通过nmtui以图形化的方式配置

启动NetworkManager 服务

[root@liruilong ~]# nmcli connection show
Error: NetworkManager is not running.
[root@liruilong ~]# systemctl start  NetworkManager
[root@liruilong ~]# systemctl status  NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2021-09-16 21:30:52 CST; 7s ago
     Docs: man:NetworkManager(8)
 Main PID: 997 (NetworkManager)
    Tasks: 5
   Memory: 12.0M
   CGroup: /system.slice/NetworkManager.service
           ├─ 997 /usr/sbin/NetworkManager --no-daemon
           └─1005 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib/Ne...

Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info>  [1631799052.9624] dhcp4 (eth0):   nameserver '1...138'
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info>  [1631799052.9625] dhcp4 (eth0): state changed u...ound
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info>  [1631799052.9635] device (eth0): state change: ...me')
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info>  [1631799052.9646] device (eth0): state change: ...me')
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info>  [1631799052.9648] device (eth0): state change: ...me')
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info>  [1631799052.9651] manager: NetworkManager state...SITE
Sep 16 21:30:52 liruilongs.github.io dhclient[1005]: bound to 172.17.57.70 -- renewal in 154114011 seconds.
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info>  [1631799052.9767] device (eth0): Activation: su...ted.
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info>  [1631799052.9770] manager: NetworkManager state...OBAL
Sep 16 21:30:52 liruilongs.github.io NetworkManager[997]: <info>  [1631799052.9774] manager: startup complete
Hint: Some lines were ellipsized, use -l to show in full.
[root@liruilong ~]#  

1、查看网络连接

使用 show 指令

  • nmcli connection show
  • nmcli connection show "连接名"
[root@liruilong ~]# nmcli connection show #显示网卡设备
[root@liruilong ~]# ifconfig | head -3 #查看网卡信息
[root@liruilong ~]# nmcli connection show ens33 #查看网卡的详细信息
[root@liruilong ~]# nmcli connection show
NAME             UUID                                  TYPE      DEVICE
System eth0      5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03  ethernet  eth0
br-3e7fae020360  9fbbc0c9-8da1-482e-b443-014900ac1ec0  bridge    br-3e7fae020360
[root@liruilong ~]# ifconfig | head -3
br-3e7fae020360: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.19.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        ether 02:42:65:a1:d1:61  txqueuelen 0  (Ethernet)
[root@liruilong ~]# nmcli connection show "System eth0"
connection.id:                          System eth0
connection.uuid:                        5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              eth0
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
。。。。。。。

2、修改网络连接配置

使用 modify 指令

nmcli connection modify "连接名" 参数1 值1 ....

#常用参数:
ipv4.method auo|manual
ipv4.addresses “IP地址/掩码长度”
ipv4.gateway 网关地址
connection.autoconnect yes | no

#给网卡ens33配置ip地址,子网掩码,网关,并配置开机自启动
[root@liruilong ~]# nmcli connection modify 'ens33' ipv4.method manual
ipv4.addresses 192.168.4.7/24 ipv4.gateway 192.168.4.254 connection.autoconnect
yes
[root@liruilong ~]# nmcli connection up 'ens33' #激活网卡
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@liruilong ~]# ifconfig | head -3 #查看网卡配置信息
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.4.7 netmask 255.255.255.0 broadcast 192.168.4.255
inet6 fe80::deea:10bb:4b70:a959 prefixlen 64 scopeid 0x20<link>
[root@liruilong ~]# route -n #查看网关
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.4.254 0.0.0.0 UG 100 0 0 ens33
192.168.4.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

3、激活/禁用网络连接

[root@liruilong ~]# nmcli connection up "ens33" #激活网卡ens33
[root@liruilong ~]# nmcli connection down "ens33" #取消激活网卡ens33

3.为本机指定 DNS 服务器

在配置文件配置,有时间小伙访问ip能够访问,但是访问域名却出了问题,这有可能是 DNS的问题,无法解析域名。

配置DNS服务器 在配置文件 /etc/resolv.conf 中,配置方式为nameserver DNS服务器地址

[root@liruilong ~]# vim /etc/resolv.conf
nameserver 172.25.254.254 #设置DNS服务器地址
[root@liruilong ~]# echo nameserver 192.168.4.7 > /etc/resolv.conf
[root@liruilong ~]# cat /etc/resolv.conf
nameserver 192.168.4.7

network.service 的配置方式

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE="ens33" #驱动名称,与ifconfig 看到的名称一致
ONBOOT="yes" #开机启动
NM_CONTROLLED="yes" #接受 NetworkManager 控制
TYPE="Ethernet" #类型
BOOTPROTO="static" #协议(dhcp|static|none)
IPADDR="192.168.4.7" #IP地址
NETMASK="255.255.255.0" #子网掩码
GATEWAY="192.168.4.254" #默认网关
DNS1="8.8.8.8" #DNS地址为可选内容,主要用于连接外网
DNS2="8.8.4.4"
[root@room9pc01 ~]# systemctl restart network #重启网络

后记

关于linux的网络配置就讲到这里,当然,还有其他的配置方式,我们这里没有讲到,感兴趣的小伙伴赶快尝试吧!

Logo

更多推荐