第四章:虚拟网络实操
本章将通过一系列实践操作,加深对虚拟网络技术的理解。从基础的 Linux 网络命令,到 Open vSwitch (OVS) 的配置,再到 VPN 和 VXLAN 隧道的部署,旨在将理论知识转化为实践能力。
第1节:虚拟网络基础原理
在进行实操前,必须牢固掌握以下基础原理。
-
Linux 基础: 熟练使用 Linux 命令行是进行一切网络操作的前提。需要掌握:
- 文件系统导航 (
cd
,ls
,pwd
) - 文本编辑 (
vim
,nano
) - 权限管理 (
chmod
,chown
) - 进程查看 (
ps
,top
) - 网络配置命令,特别是
ip
命令族(如ip addr
,ip link
,ip route
)和传统的ifconfig
。
- 文件系统导航 (
-
OVS 原理: Open vSwitch (OVS) 是一个功能强大的虚拟交换机。其工作核心是流表 (Flow Table)。当一个数据包进入 OVS 时,OVS 会查询流表。如果找到匹配的流表项 (Flow Entry),则按照该表项定义的动作 (Action)(如转发到特定端口、修改报文、丢弃等)进行处理。如果未找到匹配项,OVS 可以将数据包发送到控制器(Controller)或执行默认的 Normal 动作(像普通二层交换机一样转发)。
-
VPN 原理: 虚拟专用网 (VPN) 的核心是隧道技术 (Tunneling)。它将原始的、私有的数据包(如内网IP报文)进行封装,添加一个新的、公网可路由的包头,然后通过公共网络(如互联网)发送。在隧道的另一端,接收方对数据包进行解封装,还原出原始数据包。为了保证安全,隧道中的数据通常会进行加密。PPTP (Point-to-Point Tunneling Protocol) 是一种较早的VPN协议,它使用 GRE (Generic Routing Encapsulation) 协议来封装数据。
-
抓包分析: 网络抓包是诊断网络问题的“X光机”。通过抓包工具(如
tcpdump
或图形化的 Wireshark),可以捕获网络接口上的所有数据包,并详细分析其协议、头部、载荷等信息。这对于理解VPN、VXLAN等技术的封装过程至关重要。 -
VXLAN 原理: VXLAN (Virtual eXtensible LAN) 是一种 Overlay 隧道技术。它将完整的二层以太网帧(L2 Frame)封装在一个 UDP 包中,再套上外部的 IP 头和以太网头,然后在三层网络(Underlay)上传输。其关键组件是 VTEP (VXLAN Tunnel End Point),它负责VXLAN报文的封装和解封装。每个VXLAN网络由一个唯一的 VNI (VXLAN Network Identifier) 来标识。
第2节:虚拟网络基础配置
-
Linux 网络操作: 能够使用
ip
命令完成以下操作:- 查看IP地址:
ip addr show
- 配置IP地址:
ip addr add 192.168.1.10/24 dev eth0
- 启用/禁用网卡:
ip link set eth0 up/down
- 查看路由表:
ip route show
- 添加静态路由:
ip route add 10.0.0.0/8 via 192.168.1.1
- 查看IP地址:
-
OVS 配置: 能够使用
ovs-vsctl
命令完成 OVS 的基本配置:- 创建网桥:
ovs-vsctl add-br br0
- 将物理或虚拟网卡添加到网桥:
ovs-vsctl add-port br0 eth0
- 查看网桥和端口状态:
ovs-vsctl show
- 查看流表:
ovs-ofctl dump-flows br0
- 创建网桥:
-
VPN 部署: 能够在一台 Linux 服务器上部署 PPTP VPN 服务端,并在另一台客户端(Linux 或 Windows)上配置连接,最终实现客户端通过 VPN 访问服务端所在内网的资源。
-
抓包分析: 能够使用 Wireshark 或
tcpdump
捕获 PPTP VPN 的通信数据包,并能从捕获的数据中识别出 GRE 封装和被封装的内部 IP 报文。
第3节:VXLAN 隧道部署实践
-
OVS 进阶: 能够在一台宿主机上创建多个 OVS 网桥,并将它们与不同的网络命名空间 (Namespace) 或虚拟机连接,模拟出隔离的控制平面和数据平面。
-
VXLAN 配置: 能够在两台或多台宿主机上,使用 OVS 命令创建 VXLAN 类型的端口,并配置相同的 VNI 和正确的对端 VTEP IP 地址。
示例命令:
# 在 Host A (192.168.100.10) 上
ovs-vsctl add-port br0 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=192.168.100.20 options:key=100
# 在 Host B (192.168.100.20) 上
ovs-vsctl add-port br0 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=192.168.100.10 options:key=100 -
跨网段通信:
- 相同网段通信: 部署完成后,连接在两台主机 OVS 网桥上的、属于同一VNI的虚拟机或容器应该能够像在同一个局域网中一样相互通信。
- 不同网段通信: 实现不同 VXLAN 网络(不同VNI)之间的通信,通常需要一个三层网关。这可以通过在 Linux 主机上开启路由功能,并配置相应的路由规则来实现,或者使用更高级的 SDN 控制器来实现分布式路由。
-
报文分析: 能够使用
tcpdump
在物理网卡上抓取 VXLAN 通信的流量,并分析其报文结构,清楚地识别出外部的以太网头、IP头、UDP头,以及内部被封装的原始以太网帧。