Skip to content

网络管理

Linux 网络排查通常按下面的顺序进行:

text
网卡是否启用 → IP 是否正确 → 路由是否正确 → DNS 是否正常 → 端口是否监听 → 防火墙是否放行 → 抓包确认

查看网卡与 IP

ip 是 Linux 中管理网卡、IP、路由和邻居表的主要工具,通常由 iproute2 软件包提供。

查看网络状态

bash
# 简洁显示所有网卡及其 IP
ip -br addr

# 查看网卡状态
ip link show

# 查看指定网卡的详细信息
ip addr show dev eth0

# 查看收发包、丢包和错误统计
ip -s link show dev eth0

常见网卡状态:

状态说明
UP网卡已启用
DOWN网卡未启用
LOWER_UP物理链路已连接
NO-CARRIER未检测到物理链路,需检查网线、交换机或虚拟网卡

临时配置 IP

下面的配置重启后会失效,适合临时测试:

bash
# 启用网卡
sudo ip link set dev eth0 up

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

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

执行前应将 eth0 替换为实际网卡名,可通过 ip -br link 查看。


路由与邻居表

路由管理

bash
# 查看路由表
ip route show

# 查看访问目标地址时实际使用的网卡、网关和源 IP
ip route get 8.8.8.8

# 添加默认路由
sudo ip route add default via 192.168.1.1 dev eth0

# 添加静态路由
sudo ip route add 10.10.0.0/16 via 192.168.1.1 dev eth0

# 删除静态路由
sudo ip route del 10.10.0.0/16 via 192.168.1.1 dev eth0

不要在远程服务器上直接执行无范围限制的 ip route flush,否则可能删除 SSH 所依赖的路由。需要清理策略路由表时,应明确指定表:

bash
sudo ip route flush table 100

策略路由

bash
# 查看策略路由规则
ip rule show

# 让指定源地址使用路由表 100
sudo ip rule add from 192.168.1.100/32 table 100

# 在路由表 100 中添加默认路由
sudo ip route add default via 192.168.1.1 dev eth0 table 100

# 删除规则
sudo ip rule del from 192.168.1.100/32 table 100

ARP 与邻居表

ip neigh 同时用于查看 IPv4 ARP 缓存和 IPv6 邻居缓存。

bash
# 查看邻居表
ip neigh show

# 查看指定网卡的邻居表
ip neigh show dev eth0

# 删除异常缓存项,后续通信会重新学习
sudo ip neigh del 192.168.1.1 dev eth0

常见状态包括 REACHABLESTALEDELAYFAILED。大量 FAILED 通常表示二层链路、VLAN、地址或网关配置存在问题。

查看组播信息

bash
# 查看网卡加入的组播组
ip maddr show

# 查看组播路由缓存
ip mroute show

ip maddr add 管理的是链路层组播地址,不能用来让应用加入 239.0.0.0/8 这样的 IPv4 组播组。应用加入 IP 组播组通常由 Socket API 完成;组播路由则通常由 FRR 等路由软件管理。


查看端口与连接

ssnetstat 的常用替代工具,速度更快,也能显示连接所属进程。

参数说明
-n直接显示 IP 和端口,不进行名称解析
-a显示监听和非监听 Socket
-l只显示监听 Socket
-p显示使用 Socket 的进程
-t显示 TCP Socket
-u显示 UDP Socket
bash
# 查看所有监听中的 TCP、UDP 端口及所属进程
sudo ss -lntup

# 查看使用 8080 端口的 TCP 连接
sudo ss -ntp 'sport = :8080 or dport = :8080'

# 查看 TCP 连接统计
ss -s

普通用户可能无法看到其他用户进程的完整信息,因此排查端口占用时通常需要 sudo


连通性与 DNS 排查

目标命令关注点
检查本机协议栈ping -c 4 127.0.0.1本机 TCP/IP 是否正常
检查网关ping -c 4 192.168.1.1二层网络和默认网关是否正常
检查公网连通性ping -c 4 8.8.8.8路由和出口是否正常
检查 DNSdig example.comDNS 服务器、响应码和解析结果
查看路径tracepath example.comMTU 和经过的路由节点
测试 TCP 端口nc -vz 192.168.1.10 443目标端口是否可以建立连接

ping 不通不一定代表服务不可用,目标主机或中间设备可能禁止 ICMP。应继续使用 nccurl 或业务客户端验证目标端口。


下载文件

wget 常用于命令行下载文件:

参数说明
-O <file>将内容保存为指定文件名
--limit-rate=<rate>限制下载速度
-c从已有文件处继续下载
bash
wget -O package.tar.gz https://example.com/package.tar.gz
wget -c --limit-rate=2m https://example.com/large-file.iso

主机与端口扫描

nmap 用于主机发现和端口扫描。只应扫描自己拥有或已获得明确授权的目标。

参数说明
-sSTCP SYN 扫描,通常需要 root 权限
-sTTCP Connect 扫描,无原始报文权限时使用
-sn只进行主机发现,不扫描端口
-p指定单个端口、端口列表或端口范围
-n不进行 DNS 反向解析
-v显示更详细的扫描过程
bash
# 检查网段中存活的主机
nmap -sn 192.168.1.0/24

# 扫描指定主机的常用端口
nmap -n -p 22,80,443 192.168.1.10

使用 tcpdump 抓包

参数或表达式说明示例
-i <interface>指定监听网卡sudo tcpdump -i eth0
-i any监听所有网卡sudo tcpdump -i any
-s 0抓取完整数据包sudo tcpdump -s 0
-n不解析主机名和服务名sudo tcpdump -n
-A以 ASCII 显示报文载荷sudo tcpdump -A
-vvv输出更详细的报文信息sudo tcpdump -vvv
-w <file>将数据包写入 pcap 文件sudo tcpdump -w capture.pcap
-r <file>读取 pcap 文件tcpdump -r capture.pcap
host <ip>过滤源地址或目标地址host 192.168.1.100
tcp port <port>过滤指定 TCP 端口tcp port 443
bash
# 抓取所有网卡上的完整报文并保存
sudo tcpdump -i any -s 0 -w capture.pcap

# 从文件中读取指定主机的报文,不进行名称解析
tcpdump -r capture.pcap -n host 192.168.1.100

# 抓取与指定主机 443 端口相关的 TCP 报文
sudo tcpdump -i any -n 'host 192.168.1.100 and tcp port 443'

pcap 文件可能包含账号、Token 和业务数据,应限制文件权限并在分析后妥善清理。HTTPS 报文的应用层内容通常已加密,-A 无法直接显示明文。


使用 Netplan 配置网络

Ubuntu Server 通常使用 Netplan 管理持久化网络配置,配置文件位于 /etc/netplan/

主备 Bond

active-backup 模式提供网卡冗余,不要求交换机配置链路聚合:

yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens65f0:
      dhcp4: false
      optional: true
    ens65f1:
      dhcp4: false
      optional: true
  bonds:
    bond0:
      interfaces: [ens65f0, ens65f1]
      parameters:
        mode: active-backup
        mii-monitor-interval: 100
      addresses:
        - 172.29.101.173/24
      routes:
        - to: default
          via: 172.29.101.1
      nameservers:
        addresses:
          - 10.255.255.88
          - 10.255.254.88

LACP Bond

802.3ad 模式需要交换机端口预先配置到同一个 LACP 聚合组:

yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens5f0:
      dhcp4: false
    ens5f1:
      dhcp4: false
  bonds:
    bond0:
      interfaces: [ens5f0, ens5f1]
      parameters:
        mode: 802.3ad
        mii-monitor-interval: 100
        lacp-rate: fast
      mtu: 1500
      addresses:
        - 172.16.4.100/25
      routes:
        - to: default
          via: 172.16.4.126
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4

常见 Bond 模式

模式名称交换机要求负载均衡典型场景
0balance-rr通常需要静态链路聚合包级对吞吐要求高且网络设备已正确配置
1active-backup无特殊要求不支持以稳定和故障切换为主的服务器
2balance-xor通常需要静态链路聚合流级不使用 LACP 的静态聚合环境
3broadcast取决于网络设计不支持对报文冗余有特殊要求的场景
4802.3ad必须支持并配置 LACP流级企业机房、虚拟化和数据库服务器
5balance-tlb无特殊要求发送方向发送流量较大的场景
6balance-alb无特殊要求收发方向交换机不支持 LACP 的场景

单条 TCP 流通常只会使用一条物理链路,Bond 总带宽提升主要体现在多条并发流量上。

验证并应用配置

修改远程服务器网络前,应确保有带外管理或控制台可用于恢复:

bash
# 检查生成的后端配置
sudo netplan generate

# 限时试用,未确认时自动回滚
sudo netplan try

# 确认无误后应用
sudo netplan apply

# 查看 Bond 运行状态
cat /proc/net/bonding/bond0

防火墙

firewalld

bash
# 永久放行 TCP 6443 端口
sudo firewall-cmd --add-port=6443/tcp --permanent

# 重新加载永久配置
sudo firewall-cmd --reload

# 查看当前区域及其规则
sudo firewall-cmd --list-all

iptables

bash
# 查看规则、命中计数和规则序号
sudo iptables -L INPUT -n -v --line-numbers

# 将放行规则插入 INPUT 链首部
sudo iptables -I INPUT 1 -p tcp --dport 6443 -j ACCEPT

# 删除相同的规则
sudo iptables -D INPUT -p tcp --dport 6443 -j ACCEPT

iptables 命令修改的通常只是当前内存中的规则,重启后是否保留取决于发行版的持久化机制。使用 Docker 时,发布端口的流量不一定经过普通的 INPUT 链;需要限制容器流量时,应重点检查 DOCKER-USER 链:

bash
sudo iptables -L DOCKER-USER -n -v --line-numbers

较新的发行版可能由 nftables 后端实现 iptables 兼容命令,可通过下面的命令确认:

bash
iptables --version

常用排查清单

bash
# 1. 网卡与 IP
ip -br addr

# 2. 默认路由与实际选路
ip route show
ip route get 8.8.8.8

# 3. DNS
cat /etc/resolv.conf
dig example.com

# 4. 监听端口
sudo ss -lntup

# 5. 防火墙
sudo firewall-cmd --list-all
sudo iptables -L -n -v

# 6. 抓包
sudo tcpdump -i any -n 'host 192.168.1.100 and tcp port 443'