学习目标

  • 理解本节涉及的核心主题:Linux 网络管理、配置 DNS 服务器、网络工具与故障排除、ping - 测试网络连接。
  • 掌握重点命令或工具:pingtraceroutenetstatsscurlwget
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:Linux 网络管理、配置 DNS 服务器、网络工具与故障排除、ping - 测试网络连接、traceroute - 跟踪路由路径、netstat - 查看网络连接状态
  • 重点命令:pingtraceroutenetstatsscurlwgetscp
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 网络管理

配置 DNS 服务器

DNS(Domain Name System)服务器将域名解析为 IP 地址,使用户能够通过易记的域名访问网络资源。

编辑 /etc/resolv.conf 文件

/etc/resolv.conf 文件用于指定系统使用的 DNS 服务器。

步骤:

  1. 打开 /etc/resolv.conf 文件
    sudo nano /etc/resolv.conf
    
  2. 添加 DNS 服务器地址
    nameserver 8.8.8.8
    nameserver 8.8.4.4
    

说明:

  • nameserver:指定 DNS 服务器的 IP 地址。上述示例使用 Google 的公共 DNS 服务器。

注意事项:

  • 自动生成:在某些系统中,/etc/resolv.conf 可能由网络管理工具(如 NetworkManagersystemd-resolved)自动生成和管理,手动编辑可能被覆盖。
  • 持久配置:为实现永久配置,需在网络配置文件或网络管理工具中指定 DNS 服务器。
配置本地 DNS 缓存(如 dnsmasq, systemd-resolved

本地 DNS 缓存可以提高 DNS 查询的速度,减少网络延迟。

使用 dnsmasq 配置本地 DNS 缓存

  1. 安装 dnsmasq

    sudo apt-get install dnsmasq      # Debian/Ubuntu
    sudo yum install dnsmasq          # CentOS/RHEL
    sudo pacman -S dnsmasq            # Arch Linux
    
  2. 编辑配置文件

    sudo nano /etc/dnsmasq.conf
    

    添加或修改以下行:

    listen-address=127.0.0.1
    server=8.8.8.8
    server=8.8.4.4
    
  3. 重启 dnsmasq 服务

    sudo systemctl restart dnsmasq
    
  4. 更新 /etc/resolv.conf 指向本地 DNS 缓存

    nameserver 127.0.0.1
    

使用 systemd-resolved 配置 DNS

systemd-resolvedsystemd 提供的 DNS 解析服务,支持 DNS 缓存和多 DNS 服务器管理。

  1. 启用并启动 systemd-resolved 服务

    sudo systemctl enable systemd-resolved
    sudo systemctl start systemd-resolved
    
  2. 配置 DNS 服务器
    编辑 /etc/systemd/resolved.conf 文件:

    sudo nano /etc/systemd/resolved.conf
    

    添加或修改以下行:

    [Resolve]
    DNS=8.8.8.8 8.8.4.4
    
  3. 重启 systemd-resolved 服务

    sudo systemctl restart systemd-resolved
    
  4. 创建符号链接以使用 systemd-resolved /etc/resolv.conf

    sudo 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 的功能,但性能更优,支持更多的过滤选项。

优势:

  • 更快:相比 netstatss 处理大量连接时速度更快。
  • 更丰富的过滤选项:支持更复杂的过滤表达式,便于精确查找。
  • 实时统计:提供实时的套接字统计信息。

示例:使用 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 - 跟踪路由路径 展开。
  • 需要重点掌握的命令或工具包括:pingtraceroutenetstatsscurlwget
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

  • 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
  • 按原文示例至少手敲一遍典型命令,并观察输出变化。
  • 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
  • 可优先复习这些高频命令:pingtraceroutenetstatsscurlwget