网络是DevOps的血脉。从部署应用到排查故障,90%的问题都和网络有关。理解TCP/IP协议栈、DNS解析、路由机制是必备技能。
┌─────────────────────────────────────┐ │ 应用层 (Application) │ │ HTTP DNS SSH FTP SMTP gRPC │ ├─────────────────────────────────────┤ │ 传输层 (Transport) │ │ TCP UDP │ │ (可靠传输) (快速传输) │ ├─────────────────────────────────────┤ │ 网络层 (Network) │ │ IP ICMP ARP │ ├─────────────────────────────────────┤ │ 链路层 (Link) │ │ Ethernet WiFi VLAN │ ├─────────────────────────────────────┤ │ 物理层 (Physical) │ │ 光纤 网线 无线电波 │ └─────────────────────────────────────┘
┌──────────────────────────────────────────┐
│ 互联网 │
└──────────────┬───────────────────────────┘
│
┌──────▼──────┐
│ CDN/WAF │ ← 内容分发+安全防护
└──────┬──────┘
│
┌──────▼──────┐
│ 负载均衡器 │ ← SLB/ALB/NLB
└──────┬──────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│ ECS-1 │ │ ECS-2 │ │ ECS-3 │ ← 后端服务器
│10.0.1.│ │10.0.1.│ │10.0.1.│
└───┬───┘ └───┬───┘ └───┬───┘
│ │ │
└─────────┼─────────┘
▼
┌──────────┐
│ RDS/DB │ ← 内网数据库
│10.0.2.10 │
└──────────┘
# 查看网络接口
ip addr show
ip -br addr show
# lo UNKNOWN 127.0.0.1/8
# eth0 UP 10.0.1.100/24
# 查看路由表
ip route show
# default via 10.0.1.1 dev eth0
# 10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.100
# 添加/删除IP地址
sudo ip addr add 10.0.1.101/24 dev eth0
sudo ip addr del 10.0.1.101/24 dev eth0
# 修改MTU
sudo ip link set eth0 mtu 9000 # 巨帧,提升内网性能
# Netplan配置(Ubuntu 18.04+)
cat /etc/netplan/01-netcfg.yaml
# network:
# version: 2
# ethernets:
# eth0:
# addresses: [10.0.1.100/24]
# gateway4: 10.0.1.1
# nameservers:
# addresses: [8.8.8.8, 8.8.4.4]
sudo netplan apply
# DNS查询
dig example.com A # 查A记录
dig example.com CNAME # 查CNAME
dig @8.8.8.8 example.com # 指定DNS服务器
nslookup example.com
# 追踪路由
traceroute example.com # UDP方式
mtr --report example.com # 持续诊断(更好用)
# 端口连通性
nc -zv 10.0.1.100 80 # TCP端口检测
nc -zvu 10.0.1.100 53 # UDP端口检测
telnet 10.0.1.100 22
# HTTP请求测试
curl -v https://api.example.com/health
curl -o /dev/null -s -w "%{http_code} %{time_total}s\n" https://example.com
# 200 0.152s
# 抓包分析
sudo tcpdump -i eth0 port 80 -c 10
sudo tcpdump -i eth0 -w capture.pcap # 保存为文件,用Wireshark分析
# ufw(Ubuntu简化防火墙)
sudo ufw allow 22/tcp # 允许SSH
sudo ufw allow 80/tcp # 允许HTTP
sudo ufw allow 443/tcp # 允许HTTPS
sudo ufw allow from 10.0.0.0/8 # 允许内网
sudo ufw enable
sudo ufw status verbose
# iptables(底层,更灵活)
sudo iptables -L -n -v
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -j DROP # 默认拒绝
# 保存规则
sudo apt install iptables-persistent
sudo netfilter-persistent save
# nftables(下一代防火墙,推荐)
sudo nft list ruleset
sudo nft add table ip filter
sudo nft add chain ip filter input {{ type filter hook input priority 0 \; policy drop \; }}
sudo nft add rule ip filter input tcp dport 22 accept
sudo nft add rule ip filter input tcp dport {{ 80, 443 }} accept
# 创建网络命名空间
sudo ip netns add ns1
sudo ip netns add ns2
# 创建veth对连接
sudo ip link add veth1 type veth peer name veth2
sudo ip link set veth2 netns ns1
# 配置IP
sudo ip addr add 172.16.0.1/24 dev veth1
sudo ip netns exec ns1 ip addr add 172.16.0.2/24 dev veth2
sudo ip link set veth1 up
sudo ip netns exec ns1 ip link set veth2 up
# 测试连通性
sudo ip netns exec ns1 ping 172.16.0.1
# 这就是Docker网络的基础原理!
# Docker使用netns + veth + bridge实现容器隔离
Internet
│
┌────────▼────────┐
│ 边界路由器 │
│ BGP/静态路由 │
└────────┬────────┘
│
┌────────▼────────┐
│ 核心交换机 │
│ L3 三层交换 │
└────┬───────┬────┘
│ │
┌──────────▼┐ ┌─▼──────────┐
│ DMZ区域 │ │ 内网区域 │
│ │ │ │
│ ┌────────┐ │ │ ┌────────┐ │
│ │ WAF │ │ │ │ NAS │ │
│ ├────────┤ │ │ ├────────┤ │
│ │ LB │ │ │ │ CI/CD │ │
│ ├────────┤ │ │ ├────────┤ │
│ │ Web │ │ │ │ DB │ │
│ ├────────┤ │ │ ├────────┤ │
│ │ API │ │ │ │ Cache │ │
│ └────────┘ │ │ └────────┘ │
└────────────┘ └─────────────┘
VLAN 100 VLAN 200
# 分层排查法
# Layer 1: 物理层 - 网线/网卡
ip link show eth0 # 检查状态是否UP
ethtool eth0 # 检查链路状态
# Layer 2: 链路层 - MAC/ARP
arp -an # 查看ARP表
tcpdump -i eth0 arp # 抓ARP包
# Layer 3: 网络层 - IP/路由
ping -c 3 target_ip # 测试IP连通
traceroute target_ip # 追踪路由
# Layer 4: 传输层 - 端口
nc -zv target port # 测试端口
nmap -p 80,443 target # 端口扫描
# 防火墙检查
sudo iptables -L -n # 查看规则
sudo ufw status # ufw状态
# 检查DNS配置
cat /etc/resolv.conf
# nameserver 8.8.8.8
# nameserver 8.8.4.4
# 测试DNS
dig example.com
host example.com
# 清除DNS缓存
sudo systemd-resolve --flush-caches # systemd-resolved
sudo rndc flush # BIND
# 临时指定DNS
dig @1.1.1.1 example.com
掌握TCP/IP协议栈、网络配置、防火墙、DNS、容器网络原理——网络是DevOps的根基。