RHEL8/CentOS网络管理精讲
随着Linux系统内核和套件的不断升级更新,新旧版本Linux套件的部分操作命令也进行了更新,虽然很多常用管理命令任然被新版保留下来,但部分需要安装对于工具包后才能使用;Linux套件被广泛于网络服务器,网络管理是最常见的系统管理功能之一,部分旧版命令已无法完美的跟新版套件契合,在这里基于RHEL8/CentOS精要介绍基本的网络管理方法。
——Simon肖
Linux网络概念
为了便于初学者更好的理解本文内容,需要简单介绍一下跟Linux网络管理相关的概念及信息。
传输
传输协议有TCP和UDP。TCP是可靠连接导向型通信,而UDP属于无连接数据报协议。应用协议使用TCP或UDP端口。/etc/services文件中可以找到常用和已注册的端口列表。
当数据包在网络上发送时,服务端口和IP地址组合形成套接字。每个数据包具有一个源套接字和目标套接字。此信息可以在监控和过滤时使用。
定义接口名称
系统上的每个网络端囗都有一个名称,您可以使用该名称来配置和识别它。
旧版红帽企业Linux将eth0、eth1和eth2等名称用于各个网络接口。名称eth0是操作系统检测到的第一个网络端口,eth1则是第二个,以此类推。但是,随着设备的添加和移除,检测设备并给它们命名的机制可能会改变哪个接口获得哪个名称。此外,PCle标准无法保证在启动时检测PCle设备的顺序;鉴于设备或系统启动期间的变化,这可能会意外改变设备命名。
较新版本的红帽企业Linux采用另一种命名体系。系统将基于固件信息、PCI总线拓扑及网络设备的类型来分配网络接口名称,而非基于检测顺序。
网络接口名称以接口类型开头:
·以太网接口以en开头
·WLAN接口以wl开头·
WWAN接口以ww开头
在类型之后,接口名称的其余部分将基于服务器固件所提供的信息,或由PCI拓扑中设备的位置确定。
- ·oN表示这是一个板载设备,且服务器的固件提供设备的索引编号N。因此,eno1代表板载以太网设备1。许多服务器不提供此信息。
- ·sN表示该设备位于PCI热插拔插槽N中。因此,ens3代表PCI热插拔插槽3中的以太网卡。
- ·pMSN表示这是一个位于插槽N中总线M上的PCI设备。因此,wlp4s0代表位于插槽0中PCI总线4上的WLAN卡。如果该卡是一个多功能设备(可能是有多个端口的以太网卡,或是具有以太网外加其他一些功能的设备),设备名称中就可能会添加fN。因此,enpes1f0代表插槽1中总线0上的以太网卡的功能0。可能还有一个名为enpes1f1的接口,它代表了同一设备的功能1。
持久性命名意味着一旦您知道系统上网络接口的名称,也就知道它以后不会再发生改变。您要权衡的是不能认为有一个接口的系统就会将该接口命名为ethe。
主机名和IP地址
如果您总是必须使用IP地址连接您的服务器,这会很不方便。人们通常更愿意使用名称而不是一长串难记的数字。因此,Linux有多种机制可以将主机名映射到IP地址,统称为名称解析。
一种方法是在各个系统上的/etc/hosts文件中为每个名称设置一个静态条目。这需要您手动更新每台服务器的文件副本。
对于大多数主机,您可以借助称为域名系统(DNS)的网络服务,从主机名查找地址(或从地址查找主机名)。DNS是提供主机名到IP地址映射的分布式服务器网络。为使名称服务起作用,主机需要指向某一个名称服务器。该名称服务器无需与主机位于同一子网上,只需可供主机访问即可。这通常通过DHCP或名为/etc/resolv.conf文件中的静态设置来配置。本章后续小节将讨论如何配置名称解析。
系统帮助查询参考汇总
services(5)、ping(8)、biosdevname(1)和udev(7)man page
验证网络配置
识别网络接口ip
ip link命令将列出系统上可用的所有网络接口:
[user@host-]$ ip link show
使用ip命令来查看设备和地址信息。单个网络接口可以具有多个IPv4或IPV6地址。
[user@host ~]$ ip addr show ens3
显示性能统计信息ip -s link show
ip命令也可用于显示关于网络性能的统计信息。每个网络接口的计数器可用于识别网络问题的存在。计时器记录的统计信息包括收到(RX)和传出(TX)的数据包数、数据包错误数,以及丢弃的数据
[user@host~]$ ip -s link show ens3
显示路由表ip route
使用ip命令及route选项来显示路由信息。
[user@host-]$ ip route
追踪流量采用的路由tracepath
若要追踪网络流量通过多个路由器到达远程主机而采用的路径,可使用traceroute或tracepath。这可以识别您的某个路由器或中间路由器是否存在问题。默认情况下,两个命令都使用UDP数据包来追踪路径;但是,许多网络阻止UDP和ICMP流量。traceroute命令拥有可以跟踪UDP(默认)、ICMP(-I)或TCP(-T)数据包路径的选项。不过,默认情况下通常不安装traceroute命令。
[user@host~]$ tracepath access.redhat.com
tracepath输出中的每一行表示数据包在来源和最终目标位置之间所经过的路由器或跃点。也提供了其他信息,如往返用时(RTT)和最大传输单元(MTU)大小中的任何变化等。asymm表示流量使用了不同的(非对称)路由到达该路由器的流量和从该路由器返回。显示的路由器是用于出站流量的路由器,而不是返回流量。
tracepath6和traceroute-6命令等效于IPv6版本的tracepath和traceroute。
[user@host-]$ tracepath6 2001:db8:0:2::451
端口和服务故障排除
TCP服务使用套接字作为通信的端点,其由IP地址、协议和端口号组成。服务通常侦听标准端口,而客户端则使用随机的可用端口。/etc/services文件中列出了标准端口的常用名称。
ss命令可用于显示套接字统计信息。ss命令旨在替换net-tools软件包中所含的较旧工具netstat(这个工具可能更为某些系统管理员所熟知,但未必始终安装在系统中)。
[user@host-]$ss -ta
ss和netstat的选项
系统帮助查询参考汇总
ip-link(8)、ip-address(8)、ip-route(8)、ip(8)、ping(8)、tracepath(8)、traceroute(8)、ss(8)和netstat(8)man page
从命令行配置网络(nmcli)
NETWORKMANAGER 概念
NetworkManager是监控和管理网络设置的守护进程。除了该守护进程外,还有一个提供网络状态信息的GNOME通知区域小程序。命令行和图形工具与NetworkManager通信,并将配置文件保存在/etc/sysconfig/network-scripts目录中。
·设备是网络接口。
·连接是可以为设备配置的设置的集合。
·对于任何一个设备,在同一时间只能有一个连接处于活动状态。可能存在多个连接,以供不同设备使用或者以便为同一设备更改配置。如果需要临时更改网络设置,而不是更改连接的配置,您可以更改设备的哪个连接处于活动状态。例如,膝上型计算机上无线网络接口的设备可以针对工作站点和家中的无线网络上使用不同的连接。
·每个连接具有一个用于标识自身的名称或ID。
·nmcli实用程序可用于从命令行创建和编辑连接文件。
查看联网信息nmcli
nmcli dev status命令可显示所有网络设备的状态:
[user@host~]$ nmcli dev status
nmcli con show命令可显示所有连接的列表。要仅列出活动的连接,可使用--active选项。
[user@host~]$ nmcli con show
添加网络连接nmcli con add
nmcli con add命令用于添加新的网络连接。随后的示例nmcli con add命令假定正在添加的网络连接的名称尚未在使用中。
以下命令将为接口eno2添加一个新连接eno2,此连接将使用DHCP获取IPv4联网信息并在系统启动后自动连接。此命令还将通过侦听本地链路上的路由器播发来获取IPv6联网设置。配置文件的名称基于的con-name选项的值eno2,并保存到/etc/sysconfig/network-scripts/ifcfg-eno2文件。
下一个示例使用静态IPv4地址为eno2设备创建eno2连接,且使用IPv4地址和网络前缀192.168.0.5/24及默认网关192.168.0.254,但是仍在启动时自动连接并将其配置保存到相同文件中。由于屏幕大小的限制,请使用shell\转义符终止第一行并在下一行完成命令。
最后一个示例使用静态IPv6和IPv4地址为eno2设备创建eno2连接,且使用IPv6地址和网络前缀2001:db8:0:1::c000:207/64及默认IPv6网关2001:db8:0:1::1,以及IPv4地址和网络前缀192.0.2.7/24及默认IPv4网关192.0.2.1,但是仍在启动时自动连接,并将其配置保存到/etc/sysconfig/network-scripts/ifcfg-eno2。由于屏幕大小的限制,请使用 shell\转义符终止第一行并在下一行完成命令。
控制网络连接
nmcli con up name命令将在其绑定到的网络接口上激活name连接。请注意,命令采用连接的名称,而非网络接口的名称。切记,nmcli con show命令显示所有可用连接的名称。
[root@host~]#nmcli con up static-ens3
nmcli dev disconnect device命令将断开与网络接口device的连接并将其关闭。此命令可以缩写为nmcli dev dis device:
[root@host~]#nmcli dev dis ens3
重要
使用nmcli dev dis device可停用网络接口。
nmcli con down name命令通常并非是停用网络接口的最佳方法,因为它会关闭连接。但在默认情况下,大部分有线系统连接是在启用了autoconnect的情况下配置的。这将在其网络接口可用后立即激活连接。由于连接的网络接口仍可用,因此nmcli con down name将关闭接口,但是NetworkManager会立即将其重新开启,除非连接完全与接口断开。
修改网络连接设置nmcli con mod
NetworkManager连接具有两种类型的设置。有静态连接属性,它们是由管理员配置并存储在/etc/sysconfig/network-scripts/ifcfq-*中的配置文件中。还可能有活动连接数据,这些数据是连接从DHCP服务器获取的,不会持久存储。
要列出某个连接的当前设置,请运行nmcli con show name命令,其中name是连接的名称。小写的设置是静态属性,管理员可以更改全大写的设置是活动设置,临时用于此连接实例。
nmcli con mod name命令可用于更改连接的设置。这些更改还将保存在连接的/etc/sysconfig/network-scripts/ifcfg-name文件中。nm-settings(5)man page中记录了可用的设置。
要针对static-ens3连接将IPv4地址设置为192.0.2.254并将默认网关设置为192.0.2.254:
要针对static-ens3连接将IPv6地址设置为2001:db8:0:1::a00:1/64并将默认网关设置为2001:db8:0:1::1:
重要
如果某个连接之前通过DHCPv4服务器获取其IPv4信息,而现在更改为仅通过静态配置文件来获取,那么设置ipv4.method也应从auto更改为manual。
同样,如果某个连接之前通过SLAAC或DHCPv6服务器获取其IPV6信息,而现在更改为仅通过静态配置文件来获取,那么ipv6.method设置也应从auto或dhcp更改为manual。
否则,连接在激活后可能挂起或者无法成功完成,或者除了静态地址外还从DHCP获取IPv4地址或从SLAAC或DHCPv6获取IPv6地址。
很多设置可能具有多个值。通过向设置名称的开头添加+或-符号,可以在列表中添加或从列表中删除特定值。
删除网络连接nmcli con del
nmcli con del name命令将从系统中删除名为name的连接,同时断开它与设备的连接并删除文件/etc/sysconfig/network-scripts/ifcfg-name。
[root@host-]#nmcli con del static-ens3
谁可以修改网络设置nmcli gen permissions
root用户可以使用nmcli对网络配置进行任何必要的更改。
但是,在本地控制台上登录的普通用户也可以对系统进行多项网络配置更改。要获得此控制权,他们必须在系统键盘上登录基于文本的虚拟控制台或图形桌面环境。这背后的逻辑是:如果某人实际出现在计算机控制台上,就说明该计算机可能被用作工作站或笔记本电脑,因此他们可能需要随意配置、激活和停用无线或有线网络接口。反之,如果系统是数据中心中的服务器,则通常以本地方式登录到计算机本身的用户只能是管理员。
使用ssh登录的普通用户在成为root之前无权更改网络权限。
您可以使用nmcli gen permissions命令来查看自己的当前权限。
命令摘要
下表是此部分中讨论的关键nmcli命令的列表。
系统帮助查询参考汇总
NetworkManager(8)、nmcli(1)、nmcli-examples(5)、nm-settings(5)、hostnamectl(1)、resolv.conf(5)、hostname(5)、ip(8)和ip-address(8)man page
编辑网络配置文件
描述连接配置文件
默认情况下,通过nmcli con mod name进行的更改会自动保存到/etc/sysconfig/network-scripts/ifcfg-name。还可以使用文本编辑器手动编辑此文件。执行此操作后,运行nmcli con reload以便NetworkManager 读取配置更改。出于向后兼容性的原因,此文件中保存的指令具有不同于nm-settings(5)名称的名称和语法。下表将部分关键设置名称映射到ifcfg-*指令。
nm-settings与ifcfg-*指令的比较
修改网络配置
也可以通过直接编辑连接配置文件来配置网络。连接配置文件控制单个网络设备的软件接口。这些文件通常命名为/etc/sysconfig/network-scripts/ifcfg-name,其中name是指配置文件控制的设备或连接的名称。以下是在用于静态或动态IPv4配置的文件中找到的标准变量。
ifcfg文件的IPV4配置选项
在静态设置中,IP地址、前缀和网关等变量的未尾都是数字。这允许将多组值指定到该接口。DNS变量也有一个数字,用于在指定了多个服务器时指定查询的顺序。
在修改了配置文件后,请运行nmcli con reload使NetworkManager 读取配置更改。接口依然需要重新启动,以便更改生效。
[root@host ~]#nmcli con reload
[root@host ~]#nmcli con down"static-ens3"
[root@host ~]#nmcli con up"static-ens3"
系统帮助查询参考汇总
nmcli(1)man page
配置主机名和名称解析
更改系统主机名
hostname命令显示或临时修改系统的完全限定主机名。
[root@host~]#hostname
可以在/etc/hostname文件中指定静态主机名。hostnamectl命令用于修改此文件,也可用于查看系统的完全限定主机名的状态。如果此文件不存在,则主机名在接口被分配了IP地址时由反向DNS查询设定。
重要
在RHEL7及更高版本中,静态主机名存储在/etc/hostname中。红帽企业Linux6和更早版本将主机名存储为/etc/sysconfig/network文件中的变量。
配置名称解析
根解析器用于将主机名称转换为IP地址,反之亦可。它将根据/etc/nsswitch.conf文件的配置来确定查找位置。默认情况下,先检查/etc/hosts文件的内容。
可以通过 getent hosts hostname命令,利用/etc/hosts文件测试主机名解析。
查找class的IP地址
如果在/etc/hosts文件中未找到条目,默认情况下,根解析器会尝试使用DNS名称服务器来查询主机名。/etc/resolv.conf文件控制如何执行这一查询:
·search:对于较短主机名尝试搜索的域名列表。不应在同一文件中设置此参数和domain,如果在同一文件中设置它们,将使用最后一个实例。有关详细信息,请参见resolv.conf(5)。
·nameserver:要查询的名称服务器的IP地址。可以指定最多三个名称服务器指令,以在其中一个名称服务器停机时提供备用名称服务器。
NetworkManager 将使用连接配置文件中的DNS设置更新/etc/resolv.conf文件。使用nmcli修改连接。
[root@host~]#nmcli con mod ID ipv4.dns IP
[root@host~]#nmcli con down ID
[root@host~]#nmcli con up ID
nmcli con mod ID ipv4.dns IP的默认行为是将任何旧的DNS设置替换为提供的新IP列表。ipv4.dns参数前面的+或-符号可添加或删除个别条目。
[root@host~]#nmcli con mod ID+ipv4.dns IP
要将IPv6地址为2001:4860:4860::8888的DNS服务器添加到要与static-ens3连接一起使用的名称服务器的列表:
[root@host-]#nmcli con mod static-ens3 +ipv6.dns 2001:4860:4860::8888
注意
静态IPv4和IPV6DNS最后都成为/etc/resolv.conf中的nameserver指令。您应确保至少列出一个可访问的IPv4名称服务器(假设是双栈系统)。最好至少有一个使用IPv4的名称服务器以及使用IPV6的第二服务器,以免您的IPv4或IPv6网络发生网络问题。
测试DNS名称解析
可以使用host HOSTNAME命令测试DNS服务器连接。
[root@host ~]#host classroom.example.com
classroom.example.com has address 172.25.254.254
[root@host ~]#host 172.25.254.254
254.254.25.172.in-addr.arpa domain name pointer classroom.example.com.
重要
DHCP会在接口启动时自动重写/etc/resolv.conf文件,除非您在相关的接口配置文件中指定了PEERDNS=no。使用nmcli命令设置此项。
[root@host-]#nmcli con mod "static-ens3"ipv4.ignore-auto-dns yes
系统帮助查询参考汇总
nmcli(1)、hostnamectl(1)、hosts(5)、getent(1)、host(1)和resolv.conf(5)man page