9.1 配置网卡服务

9.1.1 配置网卡参数

截至目前,大家已经完全可以利用当前所学的知识来管理Linux系统了。当然,大家的水平完全可以更进一步,当有朝一日登顶技术巅峰时,您一定会感谢现在正在努力学习的您。

我们接下来将学习如何在Linux系统上配置服务。但是在此之前,必须先保证主机之间能够顺畅地通信。如果网络不通,即便服务部署得再正确用户也无法顺利访问,所以,配置网络并确保网络的连通性是学习部署Linux服务之前的最后一个重要知识点。

在4.1.3小节讲解了如何使用Vim文本编辑器来配置网络参数,其实,在RHEL 7系统中有至少5种网络的配置方法,刘遄老师尽量在本书中为大家逐一演示。这里教给大家的是使用nmtui命令来配置网络,其具体的配置步骤如图9-1至图9-8所示。当遇到不容易理解的内容时,我们会额外进行解释说明。

9.1 配置网卡服务 - 图1

图9-1 执行nmtui命令运行网络配置工具

9.1 配置网卡服务 - 图2

图9-2 选中Edit a connection并按下回车键

在RHEL 5、RHEL 6系统及其他大多数早期的Linux系统中,网卡的名称一直都是eth0、eth1、eth2、……,但在RHEL 7中则变成了类似于eno16777736这样的名字。不过除了网卡的名称发生变化之外,其他几乎一切照旧,因此这里演示的网络配置实验完全可以适用于各种版本的Linux系统。

9.1 配置网卡服务 - 图3

图9-3 选中要编辑的网卡名称,然后按下Edit(编辑)按钮

9.1 配置网卡服务 - 图4

图9-4 把网络IPv4的配置方式改成Manual(手动)

再多提一句,我们的这本《Linux就该这么学》不仅学习门槛低、简单易懂,而且还有一个潜在的优势—书中所有的服务器主机IP地址均为192.168.10.10,而客户端主机均为192.168.10.20及192.168.10.30。这样的好处就是,在后面部署Linux服务的时候,不用每次都要考虑IP地址变化的问题,从而可以心无旁骛地关注配置细节。

9.1 配置网卡服务 - 图5

图9-5 按下Show(显示)按钮,显示信息配置框

现在,在服务器主机的网络配置信息中填写IP地址192.168.10.10/24。

9.1 配置网卡服务 - 图6

图9-6 填写IP地址

至此,在Linux系统中配置网络的步骤就结束了。

刘遄老师在培训时经常会发现,很多学员在安装RHEL 7系统时默认没有激活网卡。如果各位读者有同样的情况也不用担心,只需使用Vim编辑器将网卡配置文件中的ONBOOT参数修改成yes,这样在系统重启后网卡就被激活了。

9.1 配置网卡服务 - 图7

图9-7 单击OK按钮保存配置

9.1 配置网卡服务 - 图8

图9-8 单击Quit按钮退出

  1. [root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
  2. TYPE=Ethernet
  3. BOOTPROTO=none
  4. DEFROUTE=yes
  5. IPV4_FAILURE_FATAL=no
  6. IPV6INIT=yes
  7. IPV6_AUTOCONF=yes
  8. IPV6_DEFROUTE=yes
  9. IPV6_FAILURE_FATAL=no
  10. NAME=eno16777736
  11. UUID=ec77579b-2ced-481f-9c09-f562b321e268
  12. ONBOOT=yes
  13. IPADDR0=192.168.10.10
  14. HWADDR=00:0C:29:C4:A4:09
  15. PREFIX0=24
  16. IPV6_PEERDNS=yes
  17. IPV6_PEERROUTES=yes

当修改完Linux系统中的服务配置文件后,并不会对服务程序立即产生效果。要想让服务程序获取到最新的配置文件,需要手动重启相应的服务,之后就可以看到网络畅通了:

  1. [root@linuxprobe ~]# systemctl restart network
  2. [root@linuxprobe ~]# ping -c 4 192.168.10.10
  3. PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
  4. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.056 ms
  5. 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.099 ms
  6. 64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.095 ms
  7. 64 bytes from 192.168.10.10: icmp_seq=4 ttl=64 time=0.095 ms
  8.  
  9. --- 192.168.10.10 ping statistics ---
  10. 4 packets transmitted, 4 received, 0% packet loss, time 2999ms
  11. rtt min/avg/max/mdev = 0.056/0.086/0.099/0.018 ms

9.1.2 创建网络会话

RHEL和CentOS系统默认使用NetworkManager来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。可以使用nmcli命令来管理Network Manager服务。nmcli是一款基于命令行的网络配置工具,功能丰富,参数众多。它可以轻松地查看网络信息或网络状态:

  1. [root@linuxprobe ~]# nmcli connection show
  2. NAME UUID TYPE DEVICE
  3. eno16777736 ec77579b-2ced-481f-9c09-f562b321e268 802-3-ethernet eno16777736
  4. [root@linuxprobe ~]# nmcli con show eno16777736
  5. connection.id: eno16777736
  6. connection.uuid: ec77579b-2ced-481f-9c09-f562b321e268
  7. connection.interface-name: --
  8. connection.type: 802-3-ethernet
  9. connection.autoconnect: yes
  10. connection.timestamp: 1487348994
  11. connection.read-only: no
  12. connection.permissions:
  13. connection.zone: --
  14. connection.master: --
  15. connection.slave-type: --
  16. connection.secondaries:
  17. connection.gateway-ping-timeout: 0
  18. ………………省略部分输出信息………………

另外,RHEL7系统支持网络会话功能,允许用户在多个配置文件中快速切换(非常类似于firewalld防火墙服务中的区域技术)。如果我们在公司网络中使用笔记本电脑时需要手动指定网络的IP地址,而回到家中则是使用DHCP自动分配IP地址。这就需要麻烦地频繁修改IP地址,但是使用了网络会话功能后一切就简单多了—只需在不同的使用环境中激活相应的网络会话,就可以实现网络配置信息的自动切换了。

可以使用nmcli命令并按照“connection add con-name type ifname”的格式来创建网络会话。假设将公司网络中的网络会话称之为company,将家庭网络中的网络会话称之为house,现在依次创建各自的网络会话。

使用con-name参数指定公司所使用的网络会话名称company,然后依次用ifname参数指定本机的网卡名称(千万要以实际环境为准,不要照抄书上的eno16777736),用autoconnect no参数设置该网络会话默认不被自动激活,以及用ip4及gw4参数手动指定网络的IP地址:

  1. [root@linuxprobe ~]# nmcli connection add con-name company ifname eno16777736 autoconnect no type ethernet ip4 192.168.10.10/24 gw4 192.168.10.1
  2. Connection 'company' (86c71220-0057-419e-b615-38f4014cfdee) successfully added.

使用con-name参数指定家庭所使用的网络会话名称house。因为我们想从外部DHCP服务器自动获得IP地址,因此这里不需要进行手动指定。

  1. [root@linuxprobe ~]# nmcli connection add con-name house type ethernet ifname eno16777736
  2. Connection 'house' (44acf0a7-07e2-40b4-94ba-69ea973090fb) successfully added.

在成功创建网络会话后,可以使用nmcli命令查看创建的所有网络会话:

  1. [root@linuxprobe ~]# nmcli connection show
  2. NAME UUID TYPE DEVICE
  3. house 44acf0a7-07e2-40b4-94ba-69ea973090fb 802-3-ethernet --
  4. company 86c71220-0057-419e-b615-38f4014cfdee 802-3-ethernet --
  5. eno16777736 ec77579b-2ced-481f-9c09-f562b321e268 802-3-ethernet eno16777736

使用nmcli命令配置过的网络会话是永久生效的,这样当我们下班回家后,顺手启用house网络会话,网卡就能自动通过DHCP获取到IP地址了。

  1. [root@linuxprobe ~]# nmcli connection up house
  2. Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
  3. [root@linuxprobe ~]# ifconfig
  4. eno1677773628: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  5. inet 192.168.100.128 netmask 255.255.255.0 broadcast 192.168.100.255
  6. inet6 fe80::20c:29ff:fec4:a409 prefixlen 64 scopeid 0x20<link>
  7. ether 00:0c:29:c4:a4:09 txqueuelen 1000 (Ethernet)
  8. RX packets 42 bytes 4198 (4.0 KiB)
  9. RX errors 0 dropped 0 overruns 0 frame 0
  10. TX packets 75 bytes 10441 (10.1 KiB)
  11. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  12. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  13. inet 127.0.0.1 netmask 255.0.0.0
  14. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  15. loop txqueuelen 0 (Local Loopback)
  16. RX packets 518 bytes 44080 (43.0 KiB)
  17. RX errors 0 dropped 0 overruns 0 frame 0
  18. TX packets 518 bytes 44080 (43.0 KiB)
  19. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

如果大家使用的是虚拟机,请把虚拟机系统的网卡(网络适配器)切换成桥接模式,如图9-9所示。然后重启虚拟机系统即可。

9.1 配置网卡服务 - 图9

图9-9 设置虚拟机网卡的模式

9.1.3 绑定两块网卡

一般来讲,生产环境必须提供7×24小时的网络传输服务。借助于网卡绑定技术,不仅可以提高网络传输速度,更重要的是,还可以确保在其中一块网卡出现故障时,依然可以正常提供网络服务。假设我们对两块网卡实施了绑定技术,这样在正常工作中它们会共同传输数据,使得网络传输的速度变得更快;而且即使有一块网卡突然出现了故障,另外一块网卡便会立即自动顶替上去,保证数据传输不会中断。

下面我们来看一下如何绑定网卡。

第1步:在虚拟机系统中再添加一块网卡设备,请确保两块网卡都处在同一个网络连接中(即网卡模式相同),如图9-10和图9-11所示。处于相同模式的网卡设备才可以进行网卡绑定,否则这两块网卡无法互相传送数据。

编辑虚拟机设置,添加网络适配器。

图9-10 在虚拟机中再添加一块网卡设备

保证两块网卡的连接类型都是相同的

图9-11 确保两块网卡处在同一个网络连接中(即网卡模式相同)

第2步:使用Vim文本编辑器来配置网卡设备的绑定参数。网卡绑定的理论知识类似于前面学习的RAID硬盘组,我们需要对参与绑定的网卡设备逐个进行“初始设置”。需要注意的是,这些原本独立的网卡设备此时需要被配置成为一块“从属”网卡,服务于“主”网卡,不应该再有自己的IP地址等信息。在进行了初始设置之后,它们就可以支持网卡绑定。

  1. [root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
  2. TYPE=Ethernet
  3. BOOTPROTO=none
  4. ONBOOT=yes
  5. USERCTL=no
  6. DEVICE=eno16777736
  7. MASTER=bond0
  8. SLAVE=yes
  9. [root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-eno33554968
  10. TYPE=Ethernet
  11. BOOTPROTO=none
  12. ONBOOT=yes
  13. USERCTL=no
  14. DEVICE=eno33554968
  15. MASTER=bond0
  16. SLAVE=yes

还需要将绑定后的设备命名为bond0并把IP地址等信息填写进去,这样当用户访问相应服务的时候,实际上就是由这两块网卡设备在共同提供服务。

  1. [root@linuxprobe ~]# vim /etc/sysconfig/network-scripts/ifcfg-bond0
  2. TYPE=Ethernet
  3. BOOTPROTO=none
  4. ONBOOT=yes
  5. USERCTL=no
  6. DEVICE=bond0
  7. IPADDR=192.168.10.10
  8. PREFIX=24
  9. DNS=192.168.10.1
  10. NM_CONTROLLED=no

第3步:让Linux内核支持网卡绑定驱动。常见的网卡绑定驱动有三种模式—mode0、mode1和mode6。下面以绑定两块网卡为例,讲解使用的情景。

mode0(平衡负载模式):平时两块网卡均工作,且自动备援,但需要在与服务器本地网卡相连的交换机设备上进行端口聚合来支持绑定技术。

mode1(自动备援模式):平时只有一块网卡工作,在它故障后自动替换为另外的网卡。

mode6(平衡负载模式):平时两块网卡均工作,且自动备援,无须交换机设备提供辅助支持。

比如有一台用于提供NFS或者samba服务的文件服务器,它所能提供的最大网络传输速度为100Mbit/s,但是访问该服务器的用户数量特别多,那么它的访问压力一定很大。在生产环境中,网络的可靠性是极为重要的,而且网络的传输速度也必须得以保证。针对这样的情况,比较好的选择就是mode6网卡绑定驱动模式了。因为mode6能够让两块网卡同时一起工作,当其中一块网卡出现故障后能自动备援,且无需交换机设备支援,从而提供了可靠的网络传输保障。

下面使用Vim文本编辑器创建一个用于网卡绑定的驱动文件,使得绑定后的bond0网卡设备能够支持绑定技术(bonding);同时定义网卡以mode6模式进行绑定,且出现故障时自动切换的时间为100毫秒。

  1. [root@linuxprobe ~]# vim /etc/modprobe.d/bond.conf
  2. alias bond0 bonding
  3. options bond0 miimon=100 mode=6

第4步:重启网络服务后网卡绑定操作即可成功。正常情况下只有bond0网卡设备才会有IP地址等信息:

  1. [root@linuxprobe ~]# systemctl restart network
  2. [root@linuxprobe ~]# ifconfig
  3. bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
  4. inet 192.168.10.10 netmask 255.255.255.0 broadcast 192.168.10.255
  5. inet6 fe80::20c:29ff:fe9c:637d prefixlen 64 scopeid 0x20<link>
  6. ether 00:0c:29:9c:63:7d txqueuelen 0 (Ethernet)
  7. RX packets 700 bytes 82899 (80.9 KiB)
  8. RX errors 0 dropped 6 overruns 0 frame 0
  9. TX packets 588 bytes 40260 (39.3 KiB)
  10. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  11.  
  12. eno16777736: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
  13. ether 00:0c:29:9c:63:73 txqueuelen 1000 (Ethernet)
  14. RX packets 347 bytes 40112 (39.1 KiB)
  15. RX errors 0 dropped 6 overruns 0 frame 0
  16. TX packets 263 bytes 20682 (20.1 KiB)
  17. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  18.  
  19. eno33554968: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
  20. ether 00:0c:29:9c:63:7d txqueuelen 1000 (Ethernet)
  21. RX packets 353 bytes 42787 (41.7 KiB)
  22. RX errors 0 dropped 0 overruns 0 frame 0
  23. TX packets 325 bytes 19578 (19.1 KiB)
  24. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

可以在本地主机执行ping 192.168.10.10命令检查网络的连通性。为了检验网卡绑定技术的自动备援功能,我们突然在虚拟机硬件配置中随机移除一块网卡设备,可以非常清晰地看到网卡切换的过程(一般只有1个数据丢包)。然后另外一块网卡会继续为用户提供服务。

  1. [root@linuxprobe ~]# ping 192.168.10.10
  2. PING 192.168.10.10 (192.168.10.10) 56(84) bytes of data.
  3. 64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.109 ms
  4. 64 bytes from 192.168.10.10: icmp_seq=2 ttl=64 time=0.102 ms
  5. 64 bytes from 192.168.10.10: icmp_seq=3 ttl=64 time=0.066 ms
  6. ping: sendmsg: Network is unreachable
  7. 64 bytes from 192.168.10.10: icmp_seq=5 ttl=64 time=0.065 ms
  8. 64 bytes from 192.168.10.10: icmp_seq=6 ttl=64 time=0.048 ms
  9. 64 bytes from 192.168.10.10: icmp_seq=7 ttl=64 time=0.042 ms
  10. 64 bytes from 192.168.10.10: icmp_seq=8 ttl=64 time=0.079 ms
  11. ^C
  12. --- 192.168.10.10 ping statistics ---
  13. 8 packets transmitted, 7 received, 12% packet loss, time 7006ms
  14. rtt min/avg/max/mdev = 0.042/0.073/0.109/0.023 ms

出现问题?大胆提问!

因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群

*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。