跳至内容

实现网络

在本章中,您将学习如何使用和管理网络。


目标: 在本章中,您将学习如何

✔ 配置工作站以使用 DHCP;
✔ 配置工作站以使用静态配置;
✔ 配置工作站以使用网关;
✔ 配置工作站以使用 DNS 服务器;
✔ 对工作站的网络进行故障排除。

🏁 网络linuxip

知识: ⭐ ⭐
复杂性: ⭐ ⭐

阅读时间: 30 分钟


概论

为了说明本章,我们将使用以下架构。

Illustration of our network architecture

这将使我们能够考虑

  • 集成到 LAN(局域网)中;
  • 配置网关以访问远程服务器;
  • 配置 DNS 服务器和实现名称解析。

要为机器定义的最小参数是

  • 机器名称;
  • IP 地址;
  • 子网掩码。

示例

  • pc-rocky;
  • 192.168.1.10;
  • 255.255.255.0.

称为 CIDR 的表示法越来越频繁:192.168.1.10/24

IP 地址用于正确路由消息(数据包)。它们分为两个部分

  • 固定部分,标识网络;
  • 网络中主机标识符。

子网掩码是一组4 个字节,旨在隔离

  • 网络地址(NetIDSubnetID)通过对 IP 地址和掩码执行按位逻辑与运算;
  • 主机地址(HostID)通过对 IP 地址和掩码的补码执行按位逻辑与运算。

网络中还有一些特定的地址,必须识别这些地址。范围内的第一个地址和最后一个地址具有特定作用

  • 范围内的第一个地址是网络地址。它用于标识网络并路由网络间信息。

  • 范围内的最后一个地址是广播地址。它用于将信息广播到网络上的所有机器。

MAC 地址/IP 地址

MAC 地址是工厂在设备上写入的物理标识符。这有时被称为硬件地址。它由 6 个字节组成,通常以十六进制形式给出(例如 5E:FF:56:A2:AF:15)。它由以下组成:3 个字节的制造商标识符和 3 个字节的序列号。

警告

随着虚拟化的出现,最后一条陈述现在不太准确。还有一些软件解决方案可用于更改 MAC 地址。

Internet 协议 (IP) 地址是永久或临时分配给使用 Internet 协议连接到计算机网络的每个设备的标识号。一部分定义网络地址(NetID 或 SubnetID,具体取决于情况),另一部分定义网络中主机的地址(HostID)。每个部分的相对大小根据网络(子)掩码而异。

IPv4 地址定义了 4 个字节的地址。由于可用地址的数量接近饱和,因此创建了一个新的标准,即定义在 16 个字节上的 IPv6。

IPv6 通常由 8 组 2 个字节表示,字节组之间用冒号分隔。可以省略不重要的零,一个或多个连续的四个零组可以用双冒号替换。

子网掩码具有 0 到 128 位。(例如 21ac:0000:0000:0611:21e0:00ba:321b:54da/64 或 21ac::611:21e0🇧🇦321b:54da/64)

在网页地址或 URL(统一资源定位符)中,IP 地址后面可以跟着冒号和端口地址(表示数据的目标应用程序)。为了避免在 URL 中造成混淆,IPv6 地址要用方括号 [ ] 包裹,冒号,端口地址。

IP 地址和 MAC 地址在网络中必须是唯一的!

DNS 域名

客户端机器可以是 DNS(域名系统,例如:mydomain.lan)域的一部分。

完全限定的机器名(FQDN)将变成 pc-rocky.mydomain.lan

一组计算机可以被分组到一个逻辑的、可解析名称的集合中,称为 DNS 域名。当然,DNS 域名并不局限于单个物理网络。

为了让一台计算机成为 DNS 域的一部分,它必须被赋予一个 DNS 后缀(这里为 mydomain.lan),以及可以查询的服务器。

OSI 模型回顾

记忆辅助

为了记住 OSI 模型各层的顺序,请记住以下句子:Please Do Not Touch Steven's Pet Alligator

协议
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 - 数据链路以太网、WiFi、令牌环、…
1 - 物理电缆、光纤、无线电波、…

第 1 层(物理层)支持通过通信通道(Wifi、光纤、RJ 电缆等)进行传输。单位:比特。

第 2 层(数据链路层)支持网络拓扑(令牌环、星型、总线型等)、数据分割和传输错误。单位:帧。

第 3 层(网络层)支持端到端数据传输(IP 路由 = 网关)。单位:数据包。

第 4 层(传输层)支持服务类型(连接或非连接)、加密和流量控制。单位:段或数据报。

第 5 层(会话层)支持两台计算机之间的通信。

第 6 层(表示层)代表与应用层数据无关的区域。本质上,该层将网络格式转换为应用程序格式,或将应用程序格式转换为网络格式。

第 7 层(应用层)代表与用户的联系。它提供网络提供的服务:http、dns、ftp、imap、pop、smtp 等。

接口命名

lo 是“回环”接口,它允许 TCP/IP 程序相互通信,而无需离开本地机器。这使得测试系统网络模块是否正常工作成为可能,也允许 ping 本地主机。所有通过 localhost 进入的数据包都通过 localhost 离开。接收到的数据包就是发送的数据包。

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、路由等的唯一命令。

ifconfig 命令不再默认安装在 Rocky8 中。

现在养成良好的习惯很重要。

主机名

hostname 命令显示或设置系统的 hostname

hostname [-f] [hostname]
选项描述
-f显示 FQDN
-i显示系统的 IP 地址信息

提示

此命令被各种网络程序用来识别机器。

要分配 hostname,可以使用 hostname 命令,但更改将在下次启动时不会保留。不带参数的命令显示 hostname。

要设置 hostname,必须修改 /etc/sysconfig/network 文件

NETWORKING=yes
HOSTNAME=pc-rocky.mondomaine.lan

RedHat 启动脚本还查询 /etc/hosts 文件以解析系统的 hostname。

系统启动时,Linux 会评估 /etc/sysconfig/network 文件中的 HOSTNAME 值。

然后,它使用 /etc/hosts 文件来评估服务器的主 IP 地址及其 hostname。它推导出 DNS 域名。

因此,在配置任何网络服务之前,必须填写这两个文件。

提示

要了解此配置是否正确完成,hostnamehostname -f 命令必须以预期值进行响应。

/etc/hosts 文件

/etc/hosts 文件是一个静态 hostname 映射表,它遵循以下格式

@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、然后是 hostname(按此顺序)以及一系列别名(alias1 alias2 …)。别名是可选的。

/etc/nsswitch.conf 文件

NSSName Service Switch)允许将配置文件(例如:/etc/passwd/etc/group/etc/hosts)替换为一个或多个集中式数据库。

/etc/nsswitch.conf 文件用于配置名称服务数据库。

passwd: files
shadow: files
group: files

hosts: files dns

在这种情况下,Linux 将首先在 /etc/hosts 文件(files 值)中查找 hostname 匹配项(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 下网络接口的默认配置模式,这解释了为什么连接到互联网路由器网络的系统可以在没有额外配置的情况下运行。

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
  • 这里我们用“none”替换了“dhcp”,这等于静态配置
BOOTPROTO=none
  • IP 地址
IPADDR=192.168.1.10
  • 子网掩码
NETMASK=255.255.255.0
  • 掩码可以使用前缀指定
PREFIX=24

警告

您必须使用 NETMASK 或 PREFIX - 不要同时使用两者!

路由

Network architecture with a gateway

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(计数)选项允许您在倒计时结束后停止命令。

示例

[root]# ping –c 4 localhost

提示

验证从近到远的连接性

  1. 验证 TCP/IP 软件层

    [root]# ping localhost
    

    “Pinging”内部循环不会检测到网络接口上的硬件故障。它只确定 IP 软件配置是否正确。

  2. 验证网卡

    [root]# ping 192.168.1.10
    

    要确定网卡的功能,必须 ping 其 IP 地址。如果网线没有连接到网卡,它应该处于“关闭”状态。

    如果 ping 不起作用,首先检查连接到网络交换机的网线并重新组装接口(参见 if up 命令),然后检查接口本身。

  3. 验证网关的连通性

    [root]# ping 192.168.1.254
    
  4. 验证远程服务器的连通性

    [root]# ping 172.16.1.2
    
  5. 验证 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(获取条目)命令获取 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 计算**)命令根据 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 前缀。

选项 short选项 long描述
-b--broadcast显示给定 IP 地址和网络掩码的广播地址。
-h--hostname显示通过 DNS 给定的 IP 地址的主机名。
-n--netmask计算给定 IP 地址的网络掩码。假设 IP 地址是完整 A 类、B 类或 C 类网络的一部分。许多网络不使用默认网络掩码,在这种情况下将返回不正确的值。
-p--prefix指示掩码/IP 地址的前缀。
-n--network指示给定 IP 地址和掩码的网络地址。
-s--silent不显示任何错误消息。

ss 命令

ss(**套接字统计信息**)命令显示网络上的监听端口。

ss 命令的语法

ss [-tuna]

示例

[root]# ss –tuna
tcp   LISTEN   0   128   *:22   *:*

ssnetstat(将在后面介绍)命令在您未来的 Linux 生涯中非常重要。

在实现网络服务时,通常会使用这两个命令中的一个来检查服务是否在预期的端口上监听。

netstat 命令

警告

netstat 命令现在已弃用,并且 Rocky Linux 默认情况下不再安装它。您仍然可能会在某些 Linux 版本上找到已安装的 netstat 命令,但最好开始使用 ss 命令来完成所有原本使用 netstat 命令完成的任务。

netstat 命令(**网络统计信息**)显示网络上的监听端口。

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

总结

本章使用的文件为

Synthesis of the files implemented in the network part

完整的接口配置可以是这样的(文件 /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

故障排除方法应从最近到最远

  1. ping localhost(软件测试)
  2. ping IP 地址(硬件测试)
  3. ping 网关(连接测试)
  4. ping 远程服务器(路由测试)
  5. DNS 查询(dig 或 ping)

Method of troubleshooting or network validation