网络配置

网络配置是Linux系统管理的重要技能,掌握网络配置可以帮助您搭建服务器、排查网络故障。本章将详细介绍Linux网络配置的各个方面。


一、网络基础概念

1.1 网络接口

1.1.1 网络接口类型

网络接口:网络设备在操作系统中的抽象表示。

常见接口类型

接口类型 说明 示例
eth0 以太网接口 eth0、ens33
wlan0 无线网卡接口 wlan0、wlp2s0
lo 本地回环接口 127.0.0.1
docker0 Docker网桥接口 172.17.0.1
virbr0 虚拟网桥接口 192.168.122.1
tun0 VPN隧道接口 tun0

东巴文理解:网络接口就像计算机的门,数据通过不同的门进出。

1.1.2 接口命名规则

传统命名

  • eth0、eth1:以太网接口
  • wlan0、wlan1:无线接口

新式命名(systemd)

  • eno1:板载以太网
  • ens33:PCI-E以太网
  • enp0s3:PCI以太网
  • wlp2s0:PCI无线网卡

东巴文提示:新式命名规则更稳定,不会因硬件变化而改变接口名。

1.2 IP地址

1.2.1 IP地址分类

IPv4地址:32位地址,点分十进制表示。

IP地址分类

类别 地址范围 私有地址范围 默认子网掩码
A类 1.0.0.0-126.255.255.255 10.0.0.0/8 255.0.0.0
B类 128.0.0.0-191.255.255.255 172.16.0.0/12 255.255.0.0
C类 192.0.0.0-223.255.255.255 192.168.0.0/16 255.255.255.0

特殊IP地址

地址 说明
127.0.0.1 本地回环地址
0.0.0.0 所有网络接口
255.255.255.255 广播地址
169.254.0.0/16 自动专用IP(APIPA)

东巴文理解:IP地址就像家庭住址,用于在网络中定位设备。

1.2.2 子网掩码

子网掩码:用于划分网络地址和主机地址。

CIDR表示法

  • 192.168.1.0/24
  • 10.0.0.0/8
  • 172.16.0.0/12

子网掩码计算

# 计算子网掩码
ipcalc 192.168.1.0/24

# 输出示例:
# Address:   192.168.1.0
# Netmask:   255.255.255.0 = 24
# Wildcard:  0.0.0.255
# =>
# Network:   192.168.1.0/24
# HostMin:   192.168.1.1
# HostMax:   192.168.1.254
# Broadcast: 192.168.1.255
# Hosts/Net: 254

1.2.3 IPv6地址

IPv6地址:128位地址,冒号十六进制表示。

IPv6地址格式

  • 完整格式:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 压缩格式:2001:db8:85a3::8a2e:370:7334

IPv6特殊地址

地址 说明
::1 本地回环地址
:: 所有网络接口
fe80::/10 链路本地地址
fc00::/7 唯一本地地址

东巴文观点:IPv6是未来趋势,地址空间更大,配置更简单。

1.3 网关与路由

1.3.1 默认网关

默认网关:连接不同网络的出口。

网关作用

  • 连接本地网络和外部网络
  • 路由数据包到目标网络
  • 提供网络地址转换(NAT)

东巴文理解:网关就像小区的大门,所有进出小区的数据都要经过这里。

1.3.2 路由表

路由表:决定数据包转发路径的规则表。

路由表组成

  • 目标网络
  • 子网掩码
  • 网关
  • 接口
  • 跃点数

二、网络配置工具

2.1 ip命令

2.1.1 ip命令概述

ip命令:Linux新一代网络配置工具,属于iproute2软件包。

ip命令优势

  • 功能强大
  • 支持IPv4和IPv6
  • 替代多个传统命令

ip命令子命令

子命令 说明 替代命令
ip addr 地址管理 ifconfig
ip link 接口管理 ifconfig
ip route 路由管理 route
ip neigh ARP表管理 arp

2.1.2 查看网络接口

# 查看所有网络接口
ip addr show

# 输出示例:
# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
#     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
#     inet 127.0.0.1/8 scope host lo
#        valid_lft forever preferred_lft forever
#     inet6 ::1/128 scope host
#        valid_lft forever preferred_lft forever
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
#     link/ether 00:0c:29:12:34:56 brd ff:ff:ff:ff:ff:ff
#     inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
#        valid_lft 86398sec preferred_lft 86398sec
#     inet6 fe80::20c:29ff:fe12:3456/64 scope link
#        valid_lft forever preferred_lft forever

# 查看指定接口
ip addr show eth0

# 简写形式
ip a
ip a s eth0

# 查看接口统计信息
ip -s link show eth0

# 输出示例:
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
#     link/ether 00:0c:29:12:34:56 brd ff:ff:ff:ff:ff:ff
#     RX: bytes  packets  errors  dropped overrun mcast
#     1.2M       1500     0       0       0       0
#     TX: bytes  packets  errors  dropped carrier collsns
#     500K       800      0       0       0       0

2.1.3 配置IP地址

# 添加IP地址
sudo ip addr add 192.168.1.100/24 dev eth0

# 添加多个IP地址
sudo ip addr add 192.168.1.101/24 dev eth0

# 删除IP地址
sudo ip addr del 192.168.1.100/24 dev eth0

# 清空所有IP地址
sudo ip addr flush dev eth0

# 启用接口
sudo ip link set eth0 up

# 禁用接口
sudo ip link set eth0 down

# 修改MAC地址
sudo ip link set eth0 address 00:11:22:33:44:55

# 修改MTU
sudo ip link set eth0 mtu 9000

# 简写形式
sudo ip a add 192.168.1.100/24 dev eth0
sudo ip a del 192.168.1.100/24 dev eth0

东巴文最佳实践:使用ip命令配置的网络信息在重启后会丢失,需要持久化配置。

2.1.4 配置路由

# 查看路由表
ip route show

# 输出示例:
# default via 192.168.1.1 dev eth0 proto dhcp metric 100
# 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100

# 添加默认网关
sudo ip route add default via 192.168.1.1

# 添加静态路由
sudo ip route add 10.0.0.0/8 via 192.168.1.254

# 添加路由到指定接口
sudo ip route add 192.168.2.0/24 dev eth0

# 删除路由
sudo ip route del default via 192.168.1.1

# 删除所有路由
sudo ip route flush

# 简写形式
ip r
sudo ip r add default via 192.168.1.1

2.2 ifconfig命令

2.2.1 ifconfig基础

ifconfig:传统网络配置工具,属于net-tools软件包。

东巴文提示:ifconfig已被ip命令取代,但仍在广泛使用。

# 安装net-tools(如果未安装)
sudo apt install net-tools  # Debian/Ubuntu
sudo dnf install net-tools  # CentOS/RHEL

# 查看所有网络接口
ifconfig

# 输出示例:
# eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
#         inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
#         inet6 fe80::20c:29ff:fe12:3456  prefixlen 64  scopeid 0x20<link>
#         ether 00:0c:29:12:34:56  txqueuelen 1000  (Ethernet)
#         RX packets 1500  bytes 1200000 (1.2 MB)
#         RX errors 0  dropped 0  overruns 0  frame 0
#         TX packets 800  bytes 500000 (500.0 KB)
#         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 查看指定接口
ifconfig eth0

# 启用接口
sudo ifconfig eth0 up

# 禁用接口
sudo ifconfig eth0 down

# 配置IP地址
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0

# 配置IP地址和广播地址
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255

# 添加虚拟IP
sudo ifconfig eth0:0 192.168.1.101 netmask 255.255.255.0

# 修改MAC地址
sudo ifconfig eth0 hw ether 00:11:22:33:44:55

# 启用混杂模式
sudo ifconfig eth0 promisc

# 禁用混杂模式
sudo ifconfig eth0 -promisc

2.2.2 route命令

# 查看路由表
route -n

# 输出示例:
# Kernel IP routing table
# Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
# 0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
# 192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

# 添加默认网关
sudo route add default gw 192.168.1.1

# 删除默认网关
sudo route del default gw 192.168.1.1

# 添加静态路由
sudo route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.1.254

# 删除静态路由
sudo route del -net 10.0.0.0 netmask 255.0.0.0

2.3 NetworkManager

2.3.1 NetworkManager简介

NetworkManager:Linux桌面和服务器的网络管理服务。

NetworkManager特点

  • 自动检测和配置网络
  • 支持多种网络类型
  • 提供图形界面和命令行工具
  • 支持VPN连接

东巴文理解:NetworkManager是现代Linux系统的网络管理管家。

2.3.2 nmcli命令

nmcli:NetworkManager的命令行工具。

# 查看网络设备状态
nmcli device status

# 输出示例:
# DEVICE  TYPE      STATE      CONNECTION
# eth0    ethernet  connected  Wired connection 1
# lo      loopback  unmanaged  --

# 查看连接
nmcli connection show

# 输出示例:
# NAME                UUID                                  TYPE      DEVICE
# Wired connection 1  12345678-1234-1234-1234-123456789012  ethernet  eth0

# 查看连接详情
nmcli connection show "Wired connection 1"

# 创建新连接(DHCP)
sudo nmcli connection add type ethernet con-name "eth0-dhcp" ifname eth0

# 创建新连接(静态IP)
sudo nmcli connection add type ethernet con-name "eth0-static" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1

# 修改连接
sudo nmcli connection modify "eth0-static" ipv4.addresses 192.168.1.101/24

# 修改DNS
sudo nmcli connection modify "eth0-static" ipv4.dns "8.8.8.8 8.8.4.4"

# 启用连接
sudo nmcli connection up "eth0-static"

# 禁用连接
sudo nmcli connection down "eth0-static"

# 删除连接
sudo nmcli connection delete "eth0-static"

# 重新加载配置
sudo nmcli connection reload

# 查看设备详情
nmcli device show eth0

2.3.3 nmtui命令

nmtui:NetworkManager的文本界面工具。

# 启动nmtui
nmtui

nmtui功能

  • 编辑连接
  • 激活连接
  • 设置系统主机名

东巴文提示:nmtui提供了友好的文本界面,适合不熟悉命令行的用户。


三、网络配置文件

3.1 Debian/Ubuntu配置文件

3.1.1 /etc/network/interfaces

传统配置文件/etc/network/interfaces

DHCP配置

# The primary network interface
auto eth0
iface eth0 inet dhcp

静态IP配置

# The primary network interface
auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 8.8.4.4

多IP配置

auto eth0
iface eth0 inet static
    address 192.168.1.100
    netmask 255.255.255.0
    gateway 192.168.1.1

auto eth0:1
iface eth0:1 inet static
    address 192.168.1.101
    netmask 255.255.255.0

配置说明

配置项 说明
auto 开机自动启用
iface 接口配置
address IP地址
netmask 子网掩码
gateway 默认网关
dns-nameservers DNS服务器

东巴文提示:Ubuntu 18.04+默认使用Netplan,不再使用此配置文件。

3.1.2 Netplan配置

Netplan配置目录/etc/netplan/

配置文件示例/etc/netplan/01-netcfg.yaml

DHCP配置

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: true

静态IP配置

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

多接口配置

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
    eth1:
      addresses:
        - 10.0.0.100/24

应用配置

# 验证配置
sudo netplan try

# 应用配置
sudo netplan apply

# 调试模式
sudo netplan --debug apply

东巴文最佳实践:Netplan配置文件使用YAML格式,注意缩进。

3.2 CentOS/RHEL配置文件

3.2.1 ifcfg配置文件

配置文件目录/etc/sysconfig/network-scripts/

配置文件命名ifcfg-<接口名>

DHCP配置

TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes

静态IP配置

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4

配置项说明

配置项 说明
TYPE 接口类型
BOOTPROTO 启动协议(dhcp/static)
DEFROUTE 是否为默认路由
NAME 连接名称
DEVICE 设备名称
ONBOOT 开机是否启用
IPADDR IP地址
NETMASK 子网掩码
GATEWAY 默认网关
DNS1/DNS2 DNS服务器

重启网络服务

# CentOS 7
sudo systemctl restart network

# CentOS 8+/RHEL 8+
sudo nmcli connection reload
sudo nmcli connection up eth0

东巴文提示:CentOS 8+推荐使用nmcli管理网络。

3.3 DNS配置

3.3.1 /etc/resolv.conf

DNS配置文件/etc/resolv.conf

配置示例

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com
options timeout:2 attempts:3

配置项说明

配置项 说明
nameserver DNS服务器地址
search 搜索域名
options 选项(超时、重试次数等)

东巴文提示:现代Linux系统会自动管理此文件,手动修改可能被覆盖。

3.3.2 systemd-resolved

systemd-resolved:systemd提供的DNS解析服务。

# 查看状态
systemctl status systemd-resolved

# 配置文件
sudo vim /etc/systemd/resolved.conf

# 配置示例:
[Resolve]
DNS=8.8.8.8 8.8.4.4
FallbackDNS=1.1.1.1
Domains=~.
LLMNR=no
DNSSEC=no

# 重启服务
sudo systemctl restart systemd-resolved

# 创建软链接
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

四、网络诊断工具

4.1 连通性测试

4.1.1 ping命令

ping:测试网络连通性。

# 测试连通性
ping 8.8.8.8

# 输出示例:
# PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
# 64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=10.5 ms
# 64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=10.3 ms
# 64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=10.4 ms
# ^C
# --- 8.8.8.8 ping statistics ---
# 3 packets transmitted, 3 received, 0% packet loss, time 2003ms
# rtt min/avg/max/mdev = 10.326/10.411/10.526/10.079 ms

# 指定次数
ping -c 4 8.8.8.8

# 指定间隔
ping -i 0.5 8.8.8.8

# 指定包大小
ping -s 1000 8.8.8.8

# 测试域名
ping google.com

# 持续ping(Ctrl+C停止)
ping 8.8.8.8

东巴文理解:ping就像敲门,确认对方是否在家。

4.1.2 ping6命令

ping6:测试IPv6连通性。

# 测试IPv6连通性
ping6 ::1

# 测试IPv6地址
ping6 2001:4860:4860::8888

# 指定接口
ping6 -I eth0 fe80::1

4.2 路由追踪

4.2.1 traceroute命令

traceroute:追踪数据包路由路径。

# 安装traceroute
sudo apt install traceroute  # Debian/Ubuntu
sudo dnf install traceroute  # CentOS/RHEL

# 追踪路由
traceroute google.com

# 输出示例:
# traceroute to google.com (142.250.189.238), 30 hops max, 60 byte packets
#  1  _gateway (192.168.1.1)  1.234 ms  1.123 ms  1.012 ms
#  2  10.0.0.1 (10.0.0.1)  5.678 ms  5.567 ms  5.456 ms
#  3  172.16.0.1 (172.16.0.1)  10.123 ms  10.012 ms  9.901 ms
#  4  * * *
#  5  142.250.189.238 (142.250.189.238)  15.678 ms  15.567 ms  15.456 ms

# 使用ICMP协议
traceroute -I google.com

# 使用TCP协议
traceroute -T google.com

# 指定端口
traceroute -p 80 google.com

# IPv6路由追踪
traceroute6 google.com

东巴文理解:traceroute就像快递追踪,显示包裹经过的每个站点。

4.2.2 tracepath命令

tracepath:追踪路径MTU。

# 追踪路径
tracepath google.com

# 输出示例:
#  1?: [LOCALHOST]                      pmtu 1500
#  1:  _gateway                                            1.234ms
#  1:  _gateway                                            1.123ms
#  2:  10.0.0.1                                            5.678ms
#  3:  172.16.0.1                                         10.123ms
#  4:  no reply
#  5:  142.250.189.238                                    15.678ms
#      Resume: pmtu 1500 hops 5 back 5

4.3 DNS查询

4.3.1 nslookup命令

nslookup:查询DNS记录。

# 查询域名
nslookup google.com

# 输出示例:
# Server:     8.8.8.8
# Address:    8.8.8.8#53
#
# Non-authoritative answer:
# Name:   google.com
# Address: 142.250.189.238
# Name:   google.com
# Address: 2607:f8b0:4004:800::200e

# 指定DNS服务器
nslookup google.com 8.8.8.8

# 查询MX记录
nslookup -query=mx gmail.com

# 查询NS记录
nslookup -query=ns google.com

# 查询所有记录
nslookup -query=any google.com

# 反向查询
nslookup 8.8.8.8

4.3.2 dig命令

dig:DNS查询工具。

# 查询域名
dig google.com

# 输出示例:
# ; <<>> DiG 9.16.1-Ubuntu <<>> google.com
# ;; global options: +cmd
# ;; Got answer:
# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
# ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
#
# ;; OPT PSEUDOSECTION:
# ; EDNS: version: 0, flags:; udp: 512
# ;; QUESTION SECTION:
# ;google.com.            IN  A
#
# ;; ANSWER SECTION:
# google.com.     299 IN  A   142.250.189.238
#
# ;; Query time: 15 msec
# ;; SERVER: 8.8.8.8#53(8.8.8.8)
# ;; WHEN: Mon Jan 01 10:00:00 CST 2024
# ;; MSG SIZE  rcvd: 55

# 简短输出
dig +short google.com

# 指定DNS服务器
dig @8.8.8.8 google.com

# 查询MX记录
dig google.com MX

# 查询NS记录
dig google.com NS

# 查询SOA记录
dig google.com SOA

# 查询TXT记录
dig google.com TXT

# 反向查询
dig -x 8.8.8.8

# 追踪DNS解析过程
dig +trace google.com

东巴文提示:dig命令功能更强大,适合DNS故障排查。

4.3.3 host命令

host:简单的DNS查询工具。

# 查询域名
host google.com

# 输出示例:
# google.com has address 142.250.189.238
# google.com has IPv6 address 2607:f8b0:4004:800::200e
# google.com mail is handled by 10 smtp.google.com.

# 查询MX记录
host -t mx google.com

# 查询NS记录
host -t ns google.com

# 反向查询
host 8.8.8.8

4.4 网络统计

4.4.1 netstat命令

netstat:网络统计信息。

# 查看所有连接
netstat -a

# 查看TCP连接
netstat -t

# 查看UDP连接
netstat -u

# 查看监听端口
netstat -l

# 查看端口号和PID
netstat -tulpn

# 输出示例:
# 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      1234/sshd
# tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      5678/mysqld
# tcp6       0      0 :::80                   :::*                    LISTEN      9012/nginx

# 查看路由表
netstat -r

# 查看网络统计
netstat -i

# 查看接口统计
netstat -ie

# 持续监控
netstat -c

东巴文提示:netstat已被ss命令取代,但仍在广泛使用。

4.4.2 ss命令

ss:socket统计工具。

# 查看所有连接
ss -a

# 查看TCP连接
ss -t

# 查看UDP连接
ss -u

# 查看监听端口
ss -l

# 查看端口号和PID
ss -tulpn

# 输出示例:
# 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=1234,fd=3))
# tcp   LISTEN 0      80          127.0.0.1:3306        0.0.0.0:*     users:(("mysqld",pid=5678,fd=33))
# tcp   LISTEN 0      128                 *:80                *:*     users:(("nginx",pid=9012,fd=6))

# 查看已建立的连接
ss -tu

# 查看进程信息
ss -p

# 查看内存使用
ss -m

# 查看统计信息
ss -s

# 输出示例:
# Total: 1234 (kernel 2345)
# TCP:   567 (estab 345, closed 123, orphaned 0, synrecv 0, timewait 89/0), ports 0
#
# Transport Total     IP        IPv6
# *         2345      -         -
# RAW       1         0         1
# UDP       12        6         6
# TCP       444       222       222
# INET      457       228       229
# FRAG      0         0         0

4.4.3 lsof命令

lsof:列出打开的文件。

# 查看端口占用
sudo lsof -i :80

# 输出示例:
# COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
# nginx   9012 root    6u  IPv4  12345      0t0  TCP *:http (LISTEN)

# 查看所有网络连接
sudo lsof -i

# 查看TCP连接
sudo lsof -i TCP

# 查看UDP连接
sudo lsof -i UDP

# 查看指定进程的网络连接
sudo lsof -i -a -p 1234

# 查看指定用户的网络连接
sudo lsof -i -u nginx

4.5 网络抓包

4.5.1 tcpdump命令

tcpdump:网络抓包工具。

# 安装tcpdump
sudo apt install tcpdump  # Debian/Ubuntu
sudo dnf install tcpdump  # CentOS/RHEL

# 抓取所有数据包
sudo tcpdump

# 抓取指定接口
sudo tcpdump -i eth0

# 抓取指定主机
sudo tcpdump host 192.168.1.100

# 抓取指定端口
sudo tcpdump port 80

# 抓取TCP数据包
sudo tcpdump tcp

# 抓取UDP数据包
sudo tcpdump udp

# 抓取ICMP数据包
sudo tcpdump icmp

# 抓取指定数量的包
sudo tcpdump -c 100

# 保存到文件
sudo tcpdump -w capture.pcap

# 从文件读取
sudo tcpdump -r capture.pcap

# 显示详细信息
sudo tcpdump -v

# 显示ASCII内容
sudo tcpdump -A

# 显示十六进制内容
sudo tcpdump -X

# 组合条件
sudo tcpdump -i eth0 -nn -vvv 'tcp and port 80 and host 192.168.1.100'

东巴文理解:tcpdump就像网络摄像头,记录所有经过的数据包。

4.5.2 Wireshark

Wireshark:图形化网络分析工具。

# 安装Wireshark
sudo apt install wireshark  # Debian/Ubuntu
sudo dnf install wireshark  # CentOS/RHEL

# 启动Wireshark
sudo wireshark

# 命令行工具tshark
sudo tshark -i eth0

五、网络故障排查

5.1 故障排查流程

5.1.1 网络故障排查步骤

标准排查流程

  1. 检查物理连接
  2. 检查网络接口状态
  3. 检查IP地址配置
  4. 检查路由配置
  5. 检查DNS配置
  6. 检查防火墙规则
  7. 检查服务状态

东巴文最佳实践:按照从底层到高层的顺序排查网络问题。

5.1.2 常见网络问题

问题1:无法连接网络

# 1. 检查接口状态
ip link show

# 2. 检查IP地址
ip addr show

# 3. 测试本地回环
ping 127.0.0.1

# 4. 测试网关
ping 192.168.1.1

# 5. 测试外网IP
ping 8.8.8.8

# 6. 测试DNS
ping google.com

问题2:DNS解析失败

# 1. 检查DNS配置
cat /etc/resolv.conf

# 2. 测试DNS服务器
nslookup google.com 8.8.8.8

# 3. 检查DNS服务
systemctl status systemd-resolved

# 4. 手动配置DNS
sudo vim /etc/resolv.conf

问题3:网络速度慢

# 1. 检查网络接口速率
ethtool eth0

# 2. 检查网络延迟
ping -c 10 google.com

# 3. 检查带宽
speedtest-cli

# 4. 检查网络拥塞
traceroute google.com

5.2 网络配置案例

5.2.1 配置静态IP

Ubuntu 20.04+ (Netplan)

# 编辑配置文件
sudo vim /etc/netplan/00-installer-config.yaml

# 配置内容
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

# 应用配置
sudo netplan apply

CentOS 8+ (nmcli)

# 创建连接
sudo nmcli connection add type ethernet con-name "eth0-static" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1

# 配置DNS
sudo nmcli connection modify "eth0-static" ipv4.dns "8.8.8.8 8.8.4.4"

# 启用连接
sudo nmcli connection up "eth0-static"

5.2.2 配置双网卡

场景:一个网卡连接外网,一个网卡连接内网。

# Netplan配置
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:  # 外网网卡
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
    eth1:  # 内网网卡
      addresses:
        - 10.0.0.100/24
      # 不配置网关,避免路由冲突

添加静态路由

# 添加内网路由
sudo ip route add 10.0.0.0/8 via 10.0.0.1 dev eth1

# 持久化路由(Netplan)
network:
  version: 2
  renderer: networkd
  ethernets:
    eth1:
      addresses:
        - 10.0.0.100/24
      routes:
        - to: 10.0.0.0/8
          via: 10.0.0.1

5.2.3 配置网络桥接

创建网桥

# Ubuntu (Netplan)
network:
  version: 2
  renderer: networkd
  bridges:
    br0:
      interfaces: [eth0]
      addresses:
        - 192.168.1.100/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8

# 应用配置
sudo netplan apply

CentOS (nmcli)

# 创建网桥
sudo nmcli connection add type bridge con-name br0 ifname br0

# 配置IP地址
sudo nmcli connection modify br0 ipv4.addresses 192.168.1.100/24
sudo nmcli connection modify br0 ipv4.gateway 192.168.1.1
sudo nmcli connection modify br0 ipv4.dns "8.8.8.8"
sudo nmcli connection modify br0 ipv4.method manual

# 添加接口到网桥
sudo nmcli connection add type bridge-slave con-name br0-port0 ifname eth0 master br0

# 启用网桥
sudo nmcli connection up br0

六、本章小结

6.1 核心要点

✅ 理解网络基础概念 ✅ 掌握ip和nmcli命令 ✅ 学会配置网络文件 ✅ 掌握网络诊断工具 ✅ 能够排查网络故障

6.2 验证清单

完成本章学习后,请确认您能够:

  • 使用ip命令配置网络接口
  • 配置静态IP和DNS
  • 使用ping、traceroute诊断网络
  • 使用netstat、ss查看网络连接
  • 排查常见网络问题

东巴文(db-w.cn) - 让Linux学习更简单