🐧 第04课:网络配置

📚 核心概念

🎯 网络基础:从网线到应用

网络是DevOps的血脉。从部署应用到排查故障,90%的问题都和网络有关。理解TCP/IP协议栈、DNS解析、路由机制是必备技能。

🌐 TCP/IP协议栈

┌─────────────────────────────────────┐
│        应用层 (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 │
          └──────────┘

⌨️ 命令实操

⌨️ 实操命令

1. 网络接口配置 ✅

网络配置
# 查看网络接口
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

2. 网络诊断工具 ✅

网络诊断
# 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分析

3. 防火墙配置 ✅

防火墙
# 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

4. 网络命名空间与容器网络 ✅

容器网络
# 创建网络命名空间
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

🔧 故障排查

🔧 故障排查

❌ 问题1:curl: (7) Failed to connect

# 分层排查法
# 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状态

❌ 问题2:DNS解析失败

# 检查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的根基。