学习目标
- 理解本节涉及的核心主题:Linux 网络管理、配置 DNS 服务器、网络工具与故障排除、
ping- 测试网络连接。 - 掌握重点命令或工具:
ping、traceroute、netstat、ss、curl、wget。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 网络管理、配置 DNS 服务器、网络工具与故障排除、
ping- 测试网络连接、traceroute- 跟踪路由路径、netstat- 查看网络连接状态 - 重点命令:
ping、traceroute、netstat、ss、curl、wget、scp - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
Linux 网络管理
配置 DNS 服务器
DNS(Domain Name System)服务器将域名解析为 IP 地址,使用户能够通过易记的域名访问网络资源。
编辑 /etc/resolv.conf 文件
/etc/resolv.conf 文件用于指定系统使用的 DNS 服务器。
步骤:
- 打开
/etc/resolv.conf文件sudo nano /etc/resolv.conf - 添加 DNS 服务器地址
nameserver 8.8.8.8 nameserver 8.8.4.4
说明:
- nameserver:指定 DNS 服务器的 IP 地址。上述示例使用 Google 的公共 DNS 服务器。
注意事项:
- 自动生成:在某些系统中,
/etc/resolv.conf可能由网络管理工具(如NetworkManager、systemd-resolved)自动生成和管理,手动编辑可能被覆盖。 - 持久配置:为实现永久配置,需在网络配置文件或网络管理工具中指定 DNS 服务器。
配置本地 DNS 缓存(如 dnsmasq, systemd-resolved)
本地 DNS 缓存可以提高 DNS 查询的速度,减少网络延迟。
使用 dnsmasq 配置本地 DNS 缓存
-
安装
dnsmasqsudo apt-get install dnsmasq # Debian/Ubuntu sudo yum install dnsmasq # CentOS/RHEL sudo pacman -S dnsmasq # Arch Linux -
编辑配置文件
sudo nano /etc/dnsmasq.conf添加或修改以下行:
listen-address=127.0.0.1 server=8.8.8.8 server=8.8.4.4 -
重启
dnsmasq服务sudo systemctl restart dnsmasq -
更新
/etc/resolv.conf指向本地 DNS 缓存nameserver 127.0.0.1
使用 systemd-resolved 配置 DNS
systemd-resolved 是 systemd 提供的 DNS 解析服务,支持 DNS 缓存和多 DNS 服务器管理。
-
启用并启动
systemd-resolved服务sudo systemctl enable systemd-resolved sudo systemctl start systemd-resolved -
配置 DNS 服务器
编辑/etc/systemd/resolved.conf文件:sudo nano /etc/systemd/resolved.conf添加或修改以下行:
[Resolve] DNS=8.8.8.8 8.8.4.4 -
重启
systemd-resolved服务sudo systemctl restart systemd-resolved -
创建符号链接以使用
systemd-resolved的/etc/resolv.confsudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
使用网络管理工具配置 DNS(如 NetworkManager)
使用 nmcli 命令配置 DNS
nmcli 是 NetworkManager 的命令行工具,允许用户配置网络设置,包括 DNS 服务器。
示例:为 eth0 接口设置 DNS 服务器
sudo nmcli device modify eth0 ipv4.dns "8.8.8.8 8.8.4.4"
sudo nmcli connection up eth0
说明:
- ipv4.dns:指定 IPv4 的 DNS 服务器。
- connection up eth0:重新激活
eth0连接以应用更改。
使用图形化工具
在桌面环境中,可以使用图形化的网络管理工具(如 GNOME 的网络设置)配置 DNS 服务器。
网络工具与故障排除
网络故障排除是系统管理中的重要任务,涉及使用各种工具来诊断和解决网络连接问题。以下介绍常用的网络工具及其使用方法。
ping - 测试网络连接
ping 命令用于测试与目标主机之间的网络连通性,通过发送 ICMP 回显请求并等待回显应答。
基本用法
ping [选项] 目标主机
示例:
ping google.com
输出示例:
PING google.com (142.250.190.78) 56(84) bytes of data.
64 bytes from lga34s10-in-f14.1e100.net (142.250.190.78): icmp_seq=1 ttl=117 time=10.2 ms
64 bytes from lga34s10-in-f14.1e100.net (142.250.190.78): icmp_seq=2 ttl=117 time=10.1 ms
常用选项
-c:指定发送的回显请求次数。
示例:ping -c 4 google.com-i:设置发送请求的间隔时间(秒)。
示例:ping -i 2 google.com-t:设置 TTL(Time To Live)值。
示例:ping -t 64 google.com
实例与应用场景
实例 1:测试本地回环接口
ping -c 4 127.0.0.1
输出示例:
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.030 ms
应用场景:
- 验证网络接口是否正常工作。
- 测试与远程主机的连通性。
- 测量网络延迟和丢包率。
实例 2:持续监控网络连接
ping google.com
说明:
- 默认情况下,
ping会持续发送请求,直到用户手动中断(Ctrl+C)。 - 适用于实时监控网络连接的稳定性。
traceroute - 跟踪路由路径
traceroute 命令用于跟踪数据包从源主机到目标主机经过的路由路径,显示每一跳的延迟时间。
安装与基本用法
安装 traceroute
- Debian/Ubuntu
sudo apt-get install dnsmasq # Debian/Ubuntu sudo yum install dnsmasq # CentOS/RHEL sudo pacman -S dnsmasq # Arch Linux - CentOS/RHEL
nameserver 8.8.8.8 nameserver 8.8.4.4 - Arch Linux
sudo pacman -S traceroute
基本用法:
traceroute [选项] 目标主机
示例:
traceroute google.com
输出示例:
traceroute to google.com (142.250.190.78), 30 hops max, 60 byte packets
1 router.local (192.168.1.1) 1.123 ms 0.945 ms 0.873 ms
2 10.0.0.1 (10.0.0.1) 10.234 ms 9.876 ms 10.123 ms
3 isp.gateway (203.0.113.1) 20.456 ms 19.789 ms 20.123 ms
4 * * *
5 google.com (142.250.190.78) 30.567 ms 29.890 ms 30.123 ms
常用选项
-m:设置最大跳数。
示例:traceroute -m 15 google.com-n:以数字形式显示 IP 地址,避免 DNS 反解析,提高速度。
示例:traceroute -n google.com-w:设置等待每个响应的超时时间(秒)。
示例:traceroute -w 2 google.com
实例与应用场景
实例 1:跟踪到目标主机的路由路径
traceroute example.com
输出示例:
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.123 ms 0.945 ms 0.873 ms
2 10.0.0.1 (10.0.0.1) 10.234 ms 9.876 ms 10.123 ms
3 203.0.113.1 (203.0.113.1) 20.456 ms 19.789 ms 20.123 ms
4 * * *
5 93.184.216.34 (93.184.216.34) 30.567 ms 29.890 ms 30.123 ms
应用场景:
- 诊断网络瓶颈:识别网络路径中的延迟较高的跳点。
- 检测路由问题:发现数据包在某一跳处丢失或受阻。
- 了解网络拓扑:获取从源主机到目标主机的路由路径信息。
实例 2:使用数字形式显示路由路径
traceroute -n google.com
输出示例:
traceroute to google.com (142.250.190.78), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 1.123 ms 0.945 ms 0.873 ms
2 10.0.0.1 (10.0.0.1) 10.234 ms 9.876 ms 10.123 ms
3 203.0.113.1 (203.0.113.1) 20.456 ms 19.789 ms 20.123 ms
4 * * *
5 142.250.190.78 (142.250.190.78) 30.567 ms 29.890 ms 30.123 ms
说明:
-n:避免 DNS 反解析,直接显示 IP 地址。
netstat - 查看网络连接状态
netstat(network statistics)命令用于显示网络连接、路由表、接口统计等信息。虽然功能强大,但在现代 Linux 系统中,ss 命令被视为更高效的替代工具。
基本用法
netstat [选项]
示例:显示所有活动的 TCP 连接
netstat -at
输出示例:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 192.168.1.10:22 203.0.113.5:54321 ESTABLISHED
常用选项
-t:显示 TCP 连接。-u:显示 UDP 连接。-l:仅显示监听的套接字。-n:以数字形式显示地址和端口,避免 DNS 解析。-p:显示哪个进程在使用该套接字。
组合示例:显示所有监听的 TCP 和 UDP 端口,带进程信息
netstat -tulnp
输出示例:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1320/sshd
tcp6 0 0 :::80 :::* LISTEN 2001/nginx
udp 0 0 0.0.0.0:68 0.0.0.0:* 1234/dhclient
与 ss 命令的比较
ss(socket statistics)是一个更现代和高效的工具,提供类似于 netstat 的功能,但性能更优,支持更多的过滤选项。
优势:
- 更快:相比
netstat,ss处理大量连接时速度更快。 - 更丰富的过滤选项:支持更复杂的过滤表达式,便于精确查找。
- 实时统计:提供实时的套接字统计信息。
示例:使用 ss 显示所有监听的 TCP 端口
ss -tuln
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 100 127.0.0.1:631 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:*
ss - 高效查看网络连接
ss(socket statistics)是一个现代化的网络工具,用于查看系统中的套接字统计信息,功能类似于 netstat,但性能更优。
基本用法
ss [选项]
示例:显示所有 TCP 连接
ss -t
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.10:22 203.0.113.5:54321
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
常用选项
-t:显示 TCP 连接。-u:显示 UDP 连接。-l:仅显示监听的套接字。-n:以数字形式显示地址和端口,避免 DNS 解析。-p:显示哪个进程在使用该套接字。-a:显示所有套接字(监听和非监听)。-r:显示路由信息。
组合示例:显示所有监听的 TCP 和 UDP 套接字,带进程信息
ss -tulnp
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1320,fd=3))
tcp LISTEN 0 100 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=1500,fd=7))
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=1234,fd=6))
实例与应用场景
实例 1:查看所有活动的 TCP 连接
ss -at
输出示例:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.10:22 203.0.113.5:54321
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp ESTAB 0 0 192.168.1.10:22 198.51.100.10:54322
应用场景:
- 监控系统连接:实时查看系统中所有的 TCP 连接,了解当前活跃的网络通信。
- 诊断连接问题:识别异常或不需要的连接,进行进一步的故障排除。
- 安全审计:检查开放的端口和监听的服务,确保系统不暴露不必要的网络接口。
实例 2:查看特定端口的监听状态
示例:查看 SSH 服务是否在监听端口 22
ss -tuln | grep ':22'
输出示例:
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 100 127.0.0.1:631 0.0.0.0:*
说明:
- *tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0: "sshd"**:SSH 服务正在监听所有网络接口的 22 端口。
应用场景:
- 验证服务配置:确保网络服务(如 SSH、HTTP、FTP 等)已正确配置并在预期端口上监听。
- 安全检查:确认只有必要的端口被开放,避免潜在的安全漏洞。
curl - 传输数据
curl 是一个强大的命令行工具,用于在网络上进行数据传输,支持多种协议(如 HTTP、HTTPS、FTP、SFTP 等)。它常用于测试和调试网络服务,以及在脚本中自动化数据传输任务。
基本用法
curl [选项] URL
示例:获取网页内容
curl https://www.example.com
输出示例:
<!doctype html>
<html>
<head>
<title>Example Domain</title>
</head>
<body>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples...</p>
</body>
</html>
常用选项
-O:将远程文件保存为本地文件,文件名与远程文件相同。
示例:curl -O https://www.example.com/index.html-I:仅获取 HTTP 头信息。
示例:curl -I https://www.example.com-d:发送数据到服务器,通常与 POST 请求一起使用。
示例:curl -d "username=alice&password=secret" https://www.example.com/login-X:指定 HTTP 请求方法。
示例:curl -X DELETE https://www.example.com/resource/1
与 wget 的比较
| 特性 | curl |
wget |
|---|---|---|
| 主要用途 | 数据传输,支持多种协议 | 文件下载,支持递归下载 |
| 支持的协议 | HTTP, HTTPS, FTP, SFTP, SMTP, etc. | HTTP, HTTPS, FTP, FTPS |
| 下载功能 | 不支持递归下载,适合 API 请求和数据传输 | 支持递归下载,适合镜像站点和批量下载 |
| 灵活性 | 更适合复杂的请求和数据传输 | 更适合简单的文件下载任务 |
| 输出方式 | 可以输出到标准输出或文件 | 默认下载到文件,支持后台下载 |
选择建议:
- 使用
curl:当需要发送复杂的 HTTP 请求、处理 API 接口或进行数据传输时。 - 使用
wget:当需要下载单个文件或递归下载整个网站时。
wget - 下载文件
wget 是一个用于从网络上下载文件的命令行工具,支持 HTTP、HTTPS 和 FTP 协议。它特别适用于下载大型文件、递归下载网站内容以及在后台执行下载任务。
基本用法
wget [选项] URL
示例:下载一个文件
wget https://www.example.com/file.zip
输出示例:
--2024-04-27 12:00:00-- https://www.example.com/file.zip
Resolving www.example.com (www.example.com)... 93.184.216.34
Connecting to www.example.com (www.example.com)|93.184.216.34|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1048576 (1.0M) [application/zip]
Saving to: ‘file.zip’
file.zip 100%[===================>] 1.00M 1.00MB/s in 1s
2024-04-27 12:00:01 (1.00 MB/s) - ‘file.zip’ saved [1048576/1048576]
常用选项
-c:继续下载已中断的文件。
示例:wget -c https://www.example.com/file.zip-r:递归下载,适用于镜像网站。
示例:wget -r https://www.example.com/-l:设置递归下载的深度。
示例:wget -r -l 2 https://www.example.com/-p:下载网页所需的所有资源(图片、CSS、JS 等)。
示例:wget -p https://www.example.com/
实例与应用场景
实例 1:下载单个文件并保存为特定名称
wget -O myfile.zip https://www.example.com/file.zip
说明:
-O myfile.zip:将下载的文件保存为myfile.zip。
实例 2:递归下载整个网站
wget -r -l 5 -p -k https://www.example.com/
说明:
-r:递归下载。-l 5:递归深度为 5。-p:下载网页所需的所有资源。-k:转换链接,使其在本地浏览时有效。
应用场景:
- 备份网站内容:使用
wget递归下载整个网站,用于备份或离线查看。 - 下载大文件:使用
wget -c继续中断的下载,确保完整性。 - 自动化脚本:在脚本中使用
wget下载所需文件,便于批量处理。
scp - 远程复制文件
scp(secure copy)命令用于在本地主机和远程主机之间复制文件和目录,基于 SSH 协议,确保数据传输的安全性。
基本用法
scp [选项] 源路径 目标路径
示例:从本地主机复制文件到远程主机
scp /home/alice/file.txt bob@remotehost:/home/bob/
说明:
- /home/alice/file.txt:本地源文件路径。
- bob@remotehost:/home/bob/:远程主机上的目标路径,
bob为远程用户名,remotehost为远程主机名或 IP 地址。
常用选项
-r:递归复制目录及其内容。
示例:scp -r /home/alice/project bob@remotehost:/home/bob/-P:指定 SSH 连接的端口(注意是大写P)。
示例:scp -P 2222 /home/alice/file.txt bob@remotehost:/home/bob/-i:指定使用的私钥文件进行认证。
示例:scp -i ~/.ssh/id_rsa /home/alice/file.txt bob@remotehost:/home/bob/
实例与应用场景
实例 1:从远程主机复制文件到本地主机
scp bob@remotehost:/home/bob/file.txt /home/alice/
说明:
- bob@remotehost:/home/bob/file.txt:远程主机上的源文件路径。
- /home/alice/:本地主机上的目标路径。
实例 2:递归复制整个目录到远程主机
scp -r /home/alice/project bob@remotehost:/home/bob/
说明:
-r:递归复制整个project目录及其子目录和文件。
应用场景:
- 备份数据:定期将本地重要文件和目录复制到远程备份服务器。
- 部署应用:将应用代码从开发环境复制到生产环境。
- 文件共享:在不同服务器之间快速、安全地传输文件。
本节总结
- 本节主要围绕 Linux 网络管理、配置 DNS 服务器、网络工具与故障排除、
ping- 测试网络连接、traceroute- 跟踪路由路径 展开。 - 需要重点掌握的命令或工具包括:
ping、traceroute、netstat、ss、curl、wget。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
ping、traceroute、netstat、ss、curl、wget。