主题
网络配置
网络是服务器和外界沟通的唯一通道。网络不通,服务再健康也没用。本篇覆盖从基本配置到高级诊断的完整流程。
ip 命令(替代 ifconfig)
ifconfig 和 netstat 已过时,现代 Linux 用 ip 和 ss 替代。
bash
# 查看所有网络接口及其 IP
ip addr show
ip a # 简写
# 查看特定接口
ip addr show eth0
# 激活/关闭网络接口
sudo ip link set eth0 up
sudo ip link set eth0 down
# 查看路由表
ip route show
ip r # 简写
# 添加/删除路由
sudo ip route add 10.0.0.0/24 via 192.168.1.1
sudo ip route del 10.0.0.0/24
sudo ip route add default via 192.168.1.1 # 加默认网关
# 查看 ARP 表
ip neighss(替代 netstat)
bash
# 查看所有监听端口
ss -tlnp
# -t: TCP -l: listening -n: 数字格式 -p: 显示进程
# 查看所有连接(包括已建立的)
ss -tanp
# 按状态过滤
ss -tanp state established
ss -tanp state time-wait
# 统计连接数(排查 TIME_WAIT 堆积)
ss -s
# 等价 netstat 命令对照
# netstat -tlnp → ss -tlnp
# netstat -anp → ss -anpNetplan(Ubuntu 18.04+)
bash
# 查看或编辑网络配置
ls /etc/netplan/
sudo vim /etc/netplan/00-installer-config.yaml静态 IP 示例:
Netplan YAML 缩进必须用空格
YAML 对缩进极其敏感,必须用空格缩进(推荐 2 空格),绝不能混用 Tab。用 Tab 会导致 netplan apply 报错或静默失败。大部分编辑器可以设置「将 Tab 转换为空格」。
yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.1.100/24
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 8.8.8.8
- 8.8.4.4bash
# 应用配置
sudo netplan apply
# 如果语法有问题,先试运行
sudo netplan try # 有 120 秒超时,网络不通会自动回滚NetworkManager(桌面/部分服务器)
bash
# 两种管理工具:nmcli(命令行)和 nmtui(文本界面)
# 查看所有连接
nmcli connection show
# 修改 ens33 为静态 IP
nmcli con mod ens33 ipv4.addresses 192.168.1.100/24
nmcli con mod ens33 ipv4.gateway 192.168.1.1
nmcli con mod ens33 ipv4.dns "8.8.8.8 8.8.4.4"
nmcli con mod ens33 ipv4.method manual
nmcli con up ens33
# 或使用交互式文本界面
sudo nmtuiDNS 配置
bash
# 传统方式(会被 DHCP 覆盖,RHEL6/7)
cat /etc/resolv.conf
# nameserver 8.8.8.8
# systemd-resolved(现代 Ubuntu/Debian)
systemd-resolve --status
resolvectl status # 更新版命令
resolvectl dns eth0 8.8.8.8 1.1.1.1
# 测试 DNS 解析
nslookup google.com
dig google.com
dig google.com +short # 只显示 IP
dig @8.8.8.8 google.com # 指定 DNS 服务器网卡绑定(Bonding)
生产环境中常用 bonding 组多网卡,提高带宽和容错。
bash
# /etc/netplan/01-bond.yaml
network:
version: 2
bonds:
bond0:
interfaces:
- eth0
- eth1
parameters:
mode: 802.3ad # LACP 模式,需要交换机支持
# mode: active-backup # 主备模式,不需要交换机配合
mii-monitor-interval: 100
addresses:
- 10.0.0.10/24
routes:
- to: default
via: 10.0.0.1网络诊断工具包
链路层:ping / traceroute / mtr
bash
ping -c 4 8.8.8.8 # 4 个包
ping -c 100 -i 0.2 8.8.8.8 # 快速 ping,测试丢包
traceroute 8.8.8.8 # 看经过哪些跳
# 星号 * 表示该跳不响应 ICMP,不是故障
mtr 8.8.8.8 # ping + traceroute 合体,实时刷新
mtr -r -c 10 8.8.8.8 # 生成 10 轮报告接口层:tcpdump
bash
# 抓取经过 eth0 的所有流量(Ctrl+C 停止)
sudo tcpdump -i eth0
# 只看端口 80
sudo tcpdump -i eth0 port 80
# 只看来自某 IP 的流量
sudo tcpdump -i eth0 src host 192.168.1.100
# 写文件(wireshark 可打开分析)
sudo tcpdump -i eth0 -w capture.pcap
# 读文件
sudo tcpdump -r capture.pcap
# 实用组合:抓 HTTP 请求
sudo tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'端口测试:nc(netcat)
bash
# 测试端口是否通
nc -zv 10.0.0.5 3306 # 测试 MySQL 端口
nc -zv 10.0.0.5 22 # 测试 SSH 端口
# 启动临时 TCP 服务(测试用)
nc -l -p 8080 # 在 8080 端口监听
# 端口扫描
nc -zv 10.0.0.5 20-100 # 扫描 20-100 端口诊断网络不通三步法
步骤1:本地网卡 → ip a 看网卡状态、IP 是否配了
步骤2:网关可达 → ping 网关 IP、ip route 看路由
步骤3:外部连通 → ping 8.8.8.8(IP 通但域名不通 = DNS 问题)bash
# === 快速诊断脚本 ===
echo "=== 1. 网卡状态 ==="
ip a | grep -E "^\d:|inet "
echo "=== 2. 默认网关 ==="
ip route | grep default
GATEWAY=$(ip route | grep default | awk '{print $3}')
echo "=== 3. Ping 网关 ($GATEWAY) ==="
ping -c 2 -W 1 "$GATEWAY" 2>/dev/null && echo "网关: OK" || echo "网关: FAIL"
echo "=== 4. Ping 外网 IP ==="
ping -c 2 -W 1 8.8.8.8 2>/dev/null && echo "外网(IP): OK" || echo "外网(IP): FAIL"
echo "=== 5. DNS 解析 ==="
nslookup baidu.com >/dev/null 2>&1 && echo "DNS: OK" || echo "DNS: FAIL"
echo "=== 6. 连接统计 ==="
ss -s常见坑
坑 1:改了 resolv.conf 被覆盖
bash
# 现代 Ubuntu 使用 systemd-resolved 管理 DNS
# 直接编辑 /etc/resolv.conf 改完就会被覆盖
# 正确方式:改 netplan 或 NetworkManager 的 DNS 配置
# 或修改 resolved 配置:
sudo vim /etc/systemd/resolved.conf
# DNS=8.8.8.8 1.1.1.1
sudo systemctl restart systemd-resolved坑 2:端口监听但外部访问不了
bash
# 99% 是防火墙或安全组
sudo ufw status # Ubuntu 本地防火墙
sudo firewall-cmd --list-all # RHEL 防火墙
sudo iptables -L -n # 直接看 iptables 规则
# 云服务器别忘了安全组/防火墙规则也要放行坑 3:no route to host vs connection refused
- no route to host:到不了目标(路由问题、防火墙 DROP)
- connection refused:到了但端口没监听(服务没启动、端口不对)
生产环境经验
- 网络配置用配置管理:netplan / NetworkManager / systemd-networkd 选一个,别混用
- DNS 冗余:至少配两个 DNS 服务器
- 监控 SLA:监控丢包率、延迟、连接数,别等到用户投诉才知道网络有问题
- MTU 问题:云环境/VPN 中常见,
ping -M do -s 1472 8.8.8.8测试路径 MTU - tcpdump 是网络问题终极武器:能抓到的都能分析
🎯 本章要点
ip addr替代 ifconfig,ss -tlnp查看监听端口- DNS 出问题先用
dig +short测试解析 - MTU 问题在云/VPN 环境常见,用 ping 测试路径
加载练习题中...