实现网络¶
在本章中,您将学习如何使用和管理网络。
目标: 在本章中,您将学习如何
配置工作站以使用 DHCP;
配置工作站以使用静态配置;
配置工作站以使用网关;
配置工作站以使用 DNS 服务器;
对工作站的网络进行故障排除。
网络、linux、ip
知识:
复杂性:
阅读时间: 30 分钟
概论¶
为了说明本章,我们将使用以下架构。
这将使我们能够考虑
- 集成到 LAN(局域网)中;
- 配置网关以访问远程服务器;
- 配置 DNS 服务器和实现名称解析。
要为机器定义的最小参数是
- 机器名称;
- IP 地址;
- 子网掩码。
示例
pc-rocky
;192.168.1.10
;255.255.255.0
.
称为 CIDR 的表示法越来越频繁:192.168.1.10/24
IP 地址用于正确路由消息(数据包)。它们分为两个部分
- 固定部分,标识网络;
- 网络中主机标识符。
子网掩码是一组4 个字节,旨在隔离
- 网络地址(NetID 或SubnetID)通过对 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:21e0321b: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 域名。
因此,在配置任何网络服务之前,必须填写这两个文件。
提示
要了解此配置是否正确完成,hostname
和 hostname -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
文件¶
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
值)中查找 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 - 不要同时使用两者!
路由¶
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
提示
验证从近到远的连接性
验证 TCP/IP 软件层
[root]# ping localhost
“Pinging”内部循环不会检测到网络接口上的硬件故障。它只确定 IP 软件配置是否正确。
验证网卡
[root]# ping 192.168.1.10
要确定网卡的功能,必须 ping 其 IP 地址。如果网线没有连接到网卡,它应该处于“关闭”状态。
如果 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
(获取条目)命令获取 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 *:*
ss
和 netstat
(将在后面介绍)命令在您未来的 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
总结¶
本章使用的文件为
完整的接口配置可以是这样的(文件 /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)