实现网络¶
在本章中,您将学习如何处理和管理网络。
目标:在本章中,您将学会如何
配置工作站使用 DHCP;
配置工作站使用静态配置;
配置工作站使用网关;
配置工作站使用 DNS 服务器;
故障排除工作站的网络。
网络,Linux,IP
知识:
复杂度:
阅读时间: 30 分钟
概述¶
为了说明本章内容,我们将使用以下架构。
这将使我们能够考虑
- 局域网(Local Area Network)集成;
- 配置网关以连接远程服务器;
- 配置 DNS 服务器并实现名称解析。
为机器定义的最低参数为
- 机器名称;
- IP 地址;
- 子网掩码。
示例
pc-rocky
;192.168.1.10
;255.255.255.0
.
称为 CIDR 的表示法越来越常见:192.168.1.10/24
IP 地址用于正确地路由消息(数据包)。它们分为两部分
- 网络位 - 子网掩码二进制表示中连续“1”对应的部分
- 主机位 - 子网掩码二进制表示中连续“0”对应的部分
|<- host bits ->|
|<-- network bits -->|
192.168.1.10 ==> 11000000.10101000.00000001.00001010
255.255.255.0 ==> 11111111.11111111.11111111.00000000
子网掩码用于定义 IP 地址的网络位和主机位。通过使用子网掩码,我们可以确定当前的 IP 地址
- 网络地址(NetID 或 SubnetID),通过对 IP 地址和掩码进行按位逻辑与运算;
- 主机地址(HostID),通过对 IP 地址和掩码的补码进行按位逻辑与运算。
192.168.1.10 ==> 11000000.10101000.00000001.00001010
255.255.255.0 ==> 11111111.11111111.11111111.00000000
NetID 11000000.10101000.00000001.00000000
192 . 168 . 1 . 0
HostID 00000000.00000000.00000000.00001010
0 . 0 . 0 . 10
有效的子网掩码 - 从左到右,连续的 1 可以定义为有效的子网掩码。
legitimate 11111111.11111111.11111111.00000000
illegitimate 11001001.11111111.11111111.00000000
技巧
IP 地址和子网掩码必须成对出现,这是由网络通信基本原理决定的。
网络中还有一些特殊的地址,需要识别。范围内的第一个地址和最后一个地址都有特殊的角色
-
范围内的第一个地址是网络地址。它用于标识网络并将信息从一个网络路由到另一个网络。可以通过逻辑运算获得此地址。
192.168.1.10 ==> 11000000.10101000.00000001.00001010 255.255.255.0 ==> 11111111.11111111.11111111.00000000 network address 11000000.10101000.00000001.00000000 192 . 168 . 1 . 0
逻辑运算 - 当两者都为真(1)时,结果为真(1);否则为假(0)。
-
范围内的最后一个地址是广播地址。它用于将信息广播到网络中的所有机器。保持网络位不变,并将所有主机位设置为 1 以获得此地址。
192.168.1.10 ==> 11000000.10101000.00000001.00001010 255.255.255.0 ==> 11111111.11111111.11111111.00000000 broadcast address 11000000.10101000.00000001.11111111 192 . 168 . 1 . 255
技巧
这两个具有特殊角色的地址不能分配给终端机器使用。
MAC 地址和 IP 地址¶
MAC 地址是出厂时写入设备的物理标识符。有时也称为硬件地址。它由 6 个字节组成,通常以十六进制形式给出(例如 5E:FF:56:A2:AF:15)。
这 6 个字节分别代表
- 前三个字节代表制造商标识符。此标识符称为 OUI(组织唯一标识符)。
- 后三个字节代表制造商分配的序列号。
警告
MAC 地址在硬件出厂时就被硬编码了。有两种主要方法可以修改它
- 固件级修改(永久):需要高级工具,可以直接重写网卡 ROM 中的 MAC 地址。这些工具通常仅供硬件制造商使用。
- 软件级欺骗(临时):修改 MAC 地址对操作系统的显示方式。这些更改通常在系统重启后重置。虚拟机中虚拟网卡的 MAC 地址也通过欺骗来实现。
Internet 协议 (IP) 地址是连接到使用 Internet 协议的计算机网络的每台设备上永久或临时分配的标识号。IP 地址和子网掩码必须成对出现,这是由网络通信基本原理决定的。通过子网掩码,我们可以知道当前的 IP 地址
- 网络位和主机位
- NetID 或 SubnetID
- HostID
- 网络地址
- 广播地址
根据数据包中的版本字段,IP 地址的分类如下
-
IPv4 - (4 位,0100)。IPv4 的可用数量为 232(从 IPv4 数据包的源和目标地址字段得知)。具体分为
- A 类地址。其范围为0.0.0.0至127.255.255.255
- B 类地址。其范围为128.0.0.0至191.255.255.255
- C 类地址。其范围为192.0.0.0至223.255.255.255
- D 类地址。其范围为224.0.0.0至239.255.255.255
- E 类地址。其范围为240.0.0.0至255.255.255.255
其中,A 类地址、B 类地址和 C 类地址都有其私有地址范围。0.0.0.0 是保留地址,不分配给主机。D 类地址用于多播通信,不分配给主机。E 类地址是保留的,不用于常规网络。
-
IPv6 - (4 位,0110)。IPv6 的可用数量为 2128(从 IPv6 数据包的源和目标地址字段得知)。具体分为
- 单播地址。包括链路本地单播地址(LLA)、唯一本地地址(ULA)、全局单播地址(GUA)、回环地址、未指定地址
- 任播地址
- 多播地址
128 位 IPv6 的书写格式说明
-
首选书写格式 - X:X:X:X:X:X:X:X。在此书写格式中,128 位 IPv6 地址被分成 8 组,每组由 4 个十六进制值(0-9,A-F)表示,组之间用冒号 (
:
) 分隔。每个“X”代表一组十六进制值。例如2001:0db8:130F:0000:0000:09C0:876A:130B。- 省略前导零 - 为了书写方便,每组的前导“0”可以省略,因此上述地址可以缩写为2001:db8:130F:0:0:9C0:876A:130B。
- 使用双冒号 - 如果地址包含两个或多个连续的全为 0 的组,则可以使用双冒号代替。因此,上述地址可以进一步缩写为2001:db8:130F::9C0:876A:130B。注意!一个 IPv6 地址中只能出现一个双冒号。
-
兼容书写格式 - X:X:X:X:X:X:d.d.d.d。在混合网络环境中,此格式可确保 IPv6 节点与 IPv4 节点之间的兼容性。例如0:0:0:0:0:ffff:192.1.56.10和::ffff:192.1.56.10/96。
在 Web 地址或 URL(统一资源定位符)中,IP 地址后面可以跟一个冒号和端口地址(指示数据要发送到的应用程序)。另外,为了避免在 URL 中产生混淆,IPv6 地址会写在方括号中(例如[2001:db8:130F::9C0:876A:130B]:443
)。
如前所述,子网掩码将 IPv4 地址分成两部分:网络位和主机位。在 IPv6 中,子网掩码也有相同的功能,但名称已更改(“n”代表子网掩码占用的位数)
- 网络前缀 - 它相当于 IPv4 地址中的网络位。根据子网掩码,占用“n”位。
- 接口 ID - 它相当于 IPv4 地址中的主机位。根据子网掩码,占用“128-n”位。
例如2001:0db8:130F:0000:0000:09C0:876A:130B/64:
Network prefix
|<- 64 bits ->|
Interface ID
|<- 64 bits ->|
2001:0db8:130F:0000 : 0000:09C0:876A:130B
在同一网络中,IP 地址必须唯一,这是网络通信的基本规则。在同一个局域网(Local Area Network)中,MAC 地址也必须是唯一的。
IPv4 数据包结构¶
IPv4 数据包包含头部和数据部分
版本:帮助路由器识别协议版本。对于 IPv4,此处的值为 0100(二进制 0100 等于十进制 4)。
IHL:用于控制头部长度的字段。当不包含“选项”字段时,最小值为 5(即二进制 0101),此时头部占用 20 字节。最大值为 15(即二进制 1111),头部长度为 60 字节。
The actual length of IPv4 header = The value of the IHL field * 4
服务类型:此字段用于定义数据包的 QoS(服务质量)和优先级。此字段现在主要用于 DSCP(区分服务代码点)和 ECN(显式拥塞通知)。
总长度:表示整个 IPv4 数据报(IPv4 数据包)的总长度(字节)。
注意
IP 数据包和 IP 数据报在技术上是同一概念的不同表达方式,都指网络层传输的数据单元。
标识:标识 IPv4 数据报的所有片段。来自同一原始数据报的所有片段共享相同的标识值,以实现正确重组。
标志:用于控制 IPv4 数据报分段的行为。从左到右
- 第一个比特 - 未使用,值为 0
- 第二个比特 - DF(禁止分段)。如果 DF=1,表示 IPv4 数据报必须完整传输。如果超过 MTU,则会将其丢弃并返回 ICMP 错误(例如“需要分段”)。如果 DF=0,路由器会将 IPv4 数据报分成多个片段,每个片段都带有相同的识别字段值。
- 第三个比特 - MF(更多片段)。如果 MF=1,表示当前片段不是最后一个,还有其他片段;如果 MF=0,表示这是最后一个片段。
片段偏移:以 8 字节为单位指示片段在原始 IPv4 数据报中的相对位置。此字段主要用于片段重组。
TTL(生存时间):此字段用于限制数据报在网络中的最大存活时间或最大跳数。初始值由发送方确定,TTL 每经过一个路由器减少 1。当 TTL=0 时,数据报被丢弃。
协议:指示此数据报中携带的数据所使用的协议类型。其值范围为 0-255。例如,TCP 的协议号为 6,UDP 的为 17,ICMP 的为 1。
头部校验和:每次数据报经过路由器时,此字段都会重新计算,主要是因为 TTL 字段的减少会导致头部发生变化。此字段仅验证头部(不包括数据部分)。如果其他字段保持不变,仅 TTL 发生变化,校验和将被更新为新值(非零),以确保头部在传输过程中未被篡改或损坏。
源地址:数据报发送方的 IPv4 地址。
目标地址:数据报接收方的 IPv4 地址。
选项:可选字段,长度范围为 0-40 字节。仅当 IHL 大于 5 时使用。此字段的长度必须是 4 字节的整数倍(如果长度小于 4 字节,则使用填充字段进行填充)。
技巧
比特有两个含义。在信息论中,它指的是信息的基本单位,表示一个二元选择(0 或 1)。在计算机科学中,它是最小的数据存储单位,通常 8 比特等于 1 字节,除非另有说明。
IPv6 数据包结构¶
IPv6 数据报由三部分组成
- 基本头部
- 扩展头部
- 上层协议数据单元
在一些书中,扩展头部和上层协议数据单元合称为有效载荷。
基本头部的固定长度为 40 字节,固定为 8 个字段
版本:帮助路由器识别协议版本。对于 IPv6,此处的值为 0110(二进制 0110 等于十进制 6)。
流量类别:相当于 IPv4 数据报中的 TOS(服务类型)字段。此字段用于定义数据包的 QOS(服务质量)和优先级。
流标签:这个新的 IPv6 字段用于控制数据包流。此字段中的非零值表示数据包应被特殊处理;即,数据包不应通过不同路径到达目的地,而应使用同一路径。这样做的好处是接收端不必重新排序数据包,从而加快了处理速度。此字段有助于避免数据包重新排序,专为流媒体/实时媒体设计。
有效载荷长度:表示有效载荷的大小。此字段最多只能表示 65535 字节的有效载荷。如果有效载荷的长度大于 65535 字节,则将有效载荷长度字段设置为 0,并在逐跳选项扩展头部中使用巨型有效载荷选项。
下一个头部:用于指示基本头部之后的数据包头部的类型。如果存在第一个扩展头部,则表示第一个扩展头部的类型。否则,它表示上层使用的协议类型,例如 6(TCP)和 17(UDP)。
跳数限制:此字段相当于 IPv4 数据报中的生存时间(TTL)。
源地址:此字段表示 IPv6 数据报发送方的地址。
目标地址:此字段表示 IPv6 数据报接收方的地址。
在 IPv4 数据报中,IPv4 头部包含可选字段,如选项,其中包括安全、时间戳、记录路由等。这些选项可以将 IPv4 头部长度从 20 字节扩展到 60 字节。在转发过程中,处理带有这些选项的 IPv4 数据报会消耗大量的设备资源,因此在实际应用中很少使用。
IPv6 将这些选项从 IPv6 基本头部中移除,并将其放入扩展头部,该扩展头部位于 IPv6 基本头部和上层协议数据单元之间。
一个 IPv6 数据包可以包含 0、1 或多个扩展头部,仅当设备或目标节点需要特殊处理时,发送方才会添加它们。
与 IPv4 选项字段(可以扩展到 40 字节并需要连续存储)不同,IPv6 扩展头部采用链式结构,没有固定的长度限制,使其未来更具可扩展性。其 8 字节对齐机制通过下一个头部字段实现,确保了处理效率并避免了分段开销。
下一个头部:此字段的功能与基本头部中的下一个头部字段相同。
扩展头部长度:表示扩展头部的长度(不包括下一个头部的长度)。
扩展头部数据:扩展头部的内容是由一系列选项字段和填充字段组合而成。
目前,RFC 定义了以下类型的扩展头部
- 逐跳选项头部(下一个头部字段值为 0)- 必须由路径中的所有路由器处理。
- 目标选项头部(下一个头部字段值为 60)- 仅由目标节点处理。
- 路由头部(下一个头部字段值为 43)- 此扩展头部类似于 IPv4 中的松散源和记录路由选项。
- 片段头部(下一个头部字段值为 44)- 与 IPv4 数据包一样,要转发的 IPv6 数据包的长度不能超过最大传输单元(MTU)。当数据包长度超过 MTU 时,需要对数据包进行分段。在 IPv6 中,片段头部由 IPv6 源节点用于发送大于 MTU 的数据包。
- 认证头部(下一个头部字段值为 51)- IPSec 使用此头部提供数据源认证、数据完整性检查和数据包防重放功能。它还保护 IPv6 基本头部中的某些字段。
- 封装安全载荷头部(下一个头部字段值为 50)- 此头部提供与认证头部相同的功能,并增加了 IPv6 数据包加密。
RFC 规定,当同一数据报中使用多个扩展头部时,建议这些头部按以下顺序出现
- IPv6 基本头部
- 逐跳选项头部
- 目标选项头部
- 路由头部
- 片段头部
- 认证头部
- 封装安全载荷头部
- 目标选项头部
- 上层协议头部
目标选项头部可能会出现一次或两次(一次在路由扩展头部之前,一次在上层协议头部之前),而其他所有扩展头部只能出现一次。
DNS 域名¶
客户端机器可以是 DNS(域名系统,例如 mydomain.lan
)域的一部分。
完全限定的机器名称(FQDN)将变为 pc-rocky.mydomain.lan
。
一组计算机可以分组为一个逻辑的、名称解析的集合,称为 DNS 域。当然,DNS 域不限于单个物理网络。
为了使计算机成为 DNS 域的一部分,必须为其分配 DNS 后缀(此处为 mydomain.lan
)以及它可以查询的服务器。
OSI 模型回顾¶
助记符
要记住 OSI 模型各层的顺序,请记住以下句子:请勿触摸史蒂文的宠物鳄鱼。
层 | 协议 |
---|---|
7 - 应用层 | POP, IMAP, SMTP, SSH, SNMP, HTTP, FTP, ... |
6 - 表示层 | ASCII, MIME, ... |
5 - 会话层 | TLS, SSL, NetBIOS, ... |
4 - 传输层 | TLS, SSL, TCP, UDP, ... |
3 - 网络层 | IPv4, IPv6, ARP, ... |
2 - 数据链路层 | Ethernet, WiFi, Token Ring, ... |
1 - 物理层 | 电缆、光纤、无线电波、... |
第 1 层(物理层)支持通过通信通道(Wifi、光纤、RJ 网线等)进行传输。单位:比特。
第 2 层(数据链路层)支持网络拓扑(令牌环、星型、总线型等)、数据分段和传输错误。单位:帧。
第 3 层(网络层)支持端到端数据传输(IP 路由 = 网关)。单位:数据包。
第 4 层(传输层)支持服务类型(面向连接或无连接)、加密和流量控制。单位:段或数据报。
第 5 层(会话层)支持两台计算机之间的通信。
第 6 层(表示层)代表与应用层数据无关的区域。本质上,此层在网络格式和应用程序格式之间进行转换,或在应用程序格式和网络格式之间进行转换。
第 7 层(应用层)代表与用户的接触。它提供网络提供的服务:http、dns、ftp、imap、pop、smtp 等。
接口命名¶
lo 是“回环”接口,它允许 TCP/IP 程序在不离开本地机器的情况下相互通信。这使得可以测试系统网络模块是否正常工作,并且还允许 ping 本地主机。所有进入本地主机的包都从本地主机出去。收到的包就是发送的包。
Linux 内核根据类型为接口名称分配特定的前缀。传统上,所有以太网接口,例如,都以eth开头。前缀后面跟着一个数字,第一个是 0(eth0、eth1、eth2...)。WiFi 接口被赋予了 wlan 前缀。
在 Rocky8 Linux 发行版上,systemd 将使用以下新策略命名接口,其中“X”代表一个数字
enoX
:板载设备ensX
:PCI Express 热插拔插槽enpXsX
:连接器的物理/地理位置- ...
使用 ip
命令¶
忘记旧的 ifconfig
命令吧!记住 ip
!
注意
给老 Linux 系统的管理员的注释
历史网络管理命令是 ifconfig
。此命令已被 ip
命令取代,网络管理员已熟知此命令。
ip
命令是管理IP 地址、ARP、路由等的唯一命令。
Rocky8 中默认不再安装 ifconfig
命令。
现在养成良好的习惯很重要。
主机名¶
hostname
命令显示或设置系统的名称
hostname [-f] [hostname]
选项 | 描述 |
---|---|
-f |
显示 FQDN |
-i |
显示系统的 IP 地址信息 |
技巧
各种网络程序使用此命令来识别机器。
要分配主机名,可以使用 hostname
命令,但更改不会在下次启动时保留。不带参数的命令显示主机名。
要设置主机名,必须修改文件 /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=pc-rocky.mondomaine.lan
RedHat 启动脚本还会检查 /etc/hosts
文件来解析系统的主机名。
当系统启动时,Linux 会评估 /etc/sysconfig/network
文件中的 HOSTNAME
值。
然后它使用 /etc/hosts
文件来评估服务器的主 IP 地址及其主机名。它会推断出 DNS 域名。
因此,在配置任何网络服务之前,填写这两个文件至关重要。
技巧
要了解此配置是否正确,hostname
和 hostname -f
命令应返回预期的值。
/etc/hosts 文件¶
/etc/hosts
文件是一个静态主机名映射表,其格式如下
@IP <hostname> [alias] [# comment]
/etc/hosts
文件示例
127.0.0.1 localhost localhost.localdomain
::1 localhost localhost.localdomain
192.168.1.10 rockstar.rockylinux.lan rockstar
系统仍然使用 /etc/hosts
文件,尤其是在启动时确定系统 FQDN 时。
技巧
RedHat 建议至少填写一行包含系统名称。
如果DNS(Domain Name Service)服务未到位,您必须在 hosts 文件中填写所有机器的所有名称。
/etc/hosts
文件每行包含一个条目,依次为 IP 地址、FQDN,然后是主机名(按此顺序),以及一系列别名(alias1 alias2 ...)。别名是可选的。
/etc/nsswitch.conf 文件¶
NSS(Name Service Switch)允许使用一个或多个集中数据库替换配置文件(例如 /etc/passwd
、/etc/group
、/etc/hosts
)。
/etc/nsswitch.conf
文件用于配置名称服务数据库。
passwd: files
shadow: files
group: files
hosts: files dns
在这种情况下,Linux 将首先在 /etc/hosts
文件(files
值)中查找主机名匹配项(hosts:
行),然后再查询 DNS(dns
值)!可以通过编辑 /etc/nsswitch.conf
文件来更改此行为。
当然,可以通过配置名称服务来响应系统对主机、用户、组等的需求,从而想象查询 LDAP、MySQL 或其他服务器。
名称服务的解析可以使用我们将在本课程后面介绍的 getent
命令进行测试。
/etc/resolv.conf 文件¶
/etc/resolv.conf
文件包含 DNS 名称解析配置。
#Generated by NetworkManager
domain mondomaine.lan
search mondomaine.lan
nameserver 192.168.1.254
技巧
此文件是历史性的。它不再直接填写!
较新一代的发行版通常集成了 NetworkManager
服务。此服务允许您以图形或控制台模式更有效地管理配置。
它允许从网络接口的配置文件中添加 DNS 服务器。然后它动态填充 /etc/resolv.conf
文件,该文件永远不应直接编辑,否则下次启动网络服务时配置更改将丢失。
ip 命令¶
来自 iproute2
包的 ip
命令允许您配置接口及其路由表。
显示接口
[root]# ip link
显示接口信息
[root]# ip addr show
显示接口信息
[root]# ip addr show eth0
显示 ARP 表
[root]# ip neigh
所有历史网络管理命令都已合并到 ip
命令下,网络管理员对此非常熟悉。
DHCP 配置¶
DHCP协议(Dynamic Host Control Protocol)允许您通过网络获取完整的 IP 配置。这是 Rocky Linux 中网络接口的默认配置模式,这解释了为什么连接到 Internet 路由器网络的系统可以正常工作而无需额外配置。
Rocky Linux 中的接口配置在 /etc/sysconfig/network-scripts/
文件夹中完成。
对于每个以太网接口,ifcfg-ethX
文件允许配置关联的接口。
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
HWADDR=00:0c:29:96:32:e3
- 接口名称:(必须在文件名中)
DEVICE=eth0
- 自动启动接口
ONBOOT=yes
- 接口启动时发出 DHCP 请求
BOOTPROTO=dhcp
- 指定 MAC 地址(可选但有用,当有多个接口时)
HWADDR=00:0c:29:96:32:e3
技巧
如果安装了 NetworkManager,更改会自动生效。如果没有,您必须重启网络服务。
- 重启网络服务
[root]# systemctl restart NetworkManager
静态配置¶
静态配置至少需要
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.10
NETMASK=255.255.255.0
- 在这里我们将“dhcp”替换为“none”,这相当于静态配置
BOOTPROTO=none
- IP 地址
IPADDR=192.168.1.10
- 子网掩码
NETMASK=255.255.255.0
- 掩码可以用前缀指定
PREFIX=24
警告
您必须使用 NETMASK 或 PREFIX - 不要两者都用!
路由¶
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:0c:29:96:32:e3
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
ip route 命令
[root]# ip route show
192.168.1.0/24 dev eth0 […] src 192.168.1.10 metric 1
default via 192.168.1.254 dev eth0 proto static
了解如何读取路由表是个好主意,尤其是在有多个网络接口的环境中。
-
在上面显示的示例中,
192.168.1.0/24
网络可以直接从eth0
设备访问,因此度量值为1
(不经过路由器)。 -
除上述网络之外的所有其他网络都将从
eth0
设备访问,但这次数据包将发送到192.168.1.254
网关。路由协议是静态协议(尽管可以在 Linux 中添加到动态分配地址的路由)。
名称解析¶
系统需要解析
- FQDN 到 IP 地址
www.free.fr = 212.27.48.10
- IP 地址到名称
212.27.48.10 = www.free.fr
- 或获取有关区域的信息
MX de free.fr = 10 mx1.free.fr + 20 mx2.free.fr
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:0c:29:96:32:e3
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=172.16.1.2
DNS2=172.16.1.3
DOMAIN=rockylinux.lan
在这种情况下,要访问 DNS,您必须通过网关。
#Generated by NetworkManager
domain mondomaine.lan
search mondomaine.lan
nameserver 172.16.1.2
nameserver 172.16.1.3
文件已由 NetworkManager 更新。
故障排除¶
ping
命令向另一台机器发送数据报并等待响应。
它是测试网络的基本命令,因为它检查您的网络接口与其他接口之间的连接性。
ping
命令语法
ping [-c numerical] destination
-c
(count)选项允许您在倒计时结束后停止命令(以秒为单位)。
示例
[root]# ping –c 4 localhost
技巧
从近到远验证连接
-
验证 TCP/IP 软件层
[root]# ping localhost
ping 本地回环(localhost)无法检测到网络接口的硬件故障。它只是确定 IP 软件配置是否正确。
-
验证网卡
[root]# ping 192.168.1.10
要确定网卡的功能,我们必须 ping 它的 IP 地址。如果网线未连接到网卡,它应该处于“down”状态。
如果 ping 不起作用,请首先检查连接到网络交换机的网线并重新组装接口(请参阅
if up
命令),然后检查接口本身。 -
验证网关连接性
[root]# ping 192.168.1.254
-
验证远程服务器连接性
[root]# ping 172.16.1.2
-
验证 DNS 服务
[root]# ping www.free.fr
dig 命令¶
dig
命令用于查询 DNS 服务器。
dig
命令语法
dig [-t type] [+short] [name]
示例
[root]# dig +short rockylinux.org
76.223.126.88
[root]# dig -t MX +short rockylinux.org ✔
5 alt1.aspmx.l.google.com.
...
dig
命令用于查询 DNS 服务器。默认情况下它很详细,但 +short
选项可以改变这种行为。
还可以指定要解析的 DNS记录类型,例如 MX类型以获取有关域的邮件交换器信息。
getent 命令¶
getent
(get entry)命令获取 NSSwitch 条目(hosts
+ dns
)。
getent
命令语法
getent hosts name
示例
[root]# getent hosts rockylinux.org
76.223.126.88 rockylinux.org
仅查询 DNS 服务器可能会返回错误结果,而不考虑 hosts
文件内容,尽管如今这种情况应该很少见。
为了考虑到 /etc/hosts
文件,必须查询 NSSwitch 名称服务,它将处理任何 DNS 解析。
ipcalc 命令¶
ipcalc
(ip calculation)命令根据 IP 地址和掩码计算网络或广播的地址。
ipcalc 命令语法
ipcalc [options] IP <netmask>
示例
[root]# ipcalc –b 172.16.66.203 255.255.240.0
BROADCAST=172.16.79.255
技巧
此命令很有用,后面跟着一个重定向,用于自动填充接口的配置文件。
[root]# ipcalc –b 172.16.66.203 255.255.240.0 >> /etc/sysconfig/network-scripts/ifcfg-eth0
选项 | 描述 |
---|---|
-b |
显示广播地址。 |
-n |
显示网络地址和掩码。 |
ipcalc
是计算主机 IP 信息的一种简单方法。各种选项指示 ipcalc
应在标准输出上显示哪些信息。您可以指定多个选项。必须指定一个 IP 地址进行操作。大多数操作还需要网络掩码或 CIDR 前缀。
选项短 | 选项长 | 描述 |
---|---|---|
-b |
--broadcast |
显示给定 IP 地址和网络掩码的广播地址。 |
-h |
--hostname |
通过 DNS 显示给定 IP 地址的主机名。 |
-n |
--netmask |
计算给定 IP 地址的网络掩码。假定 IP 地址是完整的 A、B 或 C 类网络的一部分。许多网络不使用默认网络掩码,在这种情况下会返回错误的值。 |
-p |
--prefix |
指示掩码/IP 地址的前缀。 |
-n |
--network |
指示给定 IP 地址和掩码的网络地址。 |
-s |
--silent |
不显示任何错误消息。 |
ss 命令¶
ss
(socket statistics)命令显示网络上的监听端口。
ss 命令语法
ss [-tuna]
示例
[root]# ss –tuna
tcp LISTEN 0 128 *:22 *:*
ss
和 netstat
(稍后介绍)命令在您以后的 Linux 生涯中将非常重要。
在实现网络服务时,通常会使用这两个命令中的一个来检查服务是否正在监听预期的端口。
netstat 命令¶
警告
netstat
命令现已弃用,在 Rocky Linux 上不再默认安装。您可能仍然会发现一些安装了它的 Linux 版本,但最好还是将其用途全部改为使用 ss
。
netstat
命令(network statistics)显示网络上的监听端口。
netstat 命令语法
netstat -tapn
示例
[root]# netstat –tapn
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2161/sshd
IP 或 MAC 地址冲突¶
配置错误可能导致多个接口使用相同的 IP 地址。当网络有多个 DHCP 服务器时,或者手动分配了相同的 IP 地址多次时,可能会发生这种情况。
当网络出现故障,并且 IP 地址冲突可能是原因时,可以使用 arp-scan
软件(需要 EPEL 存储库)。
dnf install arp-scan
示例
$ arp-scan -I eth0 -l
172.16.1.104 00:01:02:03:04:05 3COM CORPORATION
172.16.1.107 00:0c:29:1b:eb:97 VMware, Inc.
172.16.1.250 00:26:ab:b1:b7:f6 (Unknown)
172.16.1.252 00:50:56:a9:6a:ed VMWare, Inc.
172.16.1.253 00:50:56:b6:78:ec VMWare, Inc.
172.16.1.253 00:50:56:b6:78:ec VMWare, Inc. (DUP: 2)
172.16.1.253 00:50:56:b6:78:ec VMWare, Inc. (DUP: 3)
172.16.1.253 00:50:56:b6:78:ec VMWare, Inc. (DUP: 4)
172.16.1.232 88:51:fb:5e:fa:b3 (Unknown) (DUP: 2)
技巧
如上面的示例所示,MAC 地址冲突是可能的!虚拟化技术和虚拟机复制会导致这些问题。
热配置¶
ip
命令可以热添加 IP 地址到接口。
ip addr add @IP dev DEVICE
示例
[root]# ip addr add 192.168.2.10 dev eth1
ip
命令允许激活或停用接口
ip link set DEVICE up
ip link set DEVICE down
示例
[root]# ip link set eth1 up
[root]# ip link set eth1 down
ip
命令添加路由
ip route add [default|netaddr] via @IP [dev device]
示例
[root]# ip route add default via 192.168.1.254
[root]# ip route add 192.168.100.0/24 via 192.168.2.254 dev eth1
总结¶
本章使用的文件有
一个完整的接口配置可以是这样的(文件 /etc/sysconfig/network-scripts/ifcfg-eth0
)
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:0c:29:96:32:e3
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=172.16.1.1
DNS2=172.16.1.2
DOMAIN=rockylinux.lan
故障排除方法应从近到远
- ping localhost(软件测试)
- ping IP 地址(硬件测试)
- ping 网关(连接性测试)
- ping 远程服务器(路由测试)
- DNS 查询(dig 或 ping)