vxlan 是一种通过 udp 封装实现跨三层网络的二层通信技术,适合跨数据中心或大规模云环境下的虚拟二层连接。1. vxlan 的作用是将多个物理网络逻辑上连成一个二层网络,适用于虚拟机迁移、容器集群互通等场景;2. 配置步骤包括使用 iproute2 创建 vxlan 接口、绑定物理网卡、分配 ip 并启用接口;3. 注意事项包括开放 udp 4789 端口、调整 mtu、配置组播、持久化设置及性能考量;4. 验证方法包括 ping 测试、查看接口状态、arp 表和抓包分析 vxlan 数据流。
配置linux网络接口的VXLAN(虚拟扩展局域网)其实并不复杂,但需要对网络基础有一定了解。简单来说,VXLAN的作用是把多个物理网络通过UDP封装的方式“逻辑上”连成一个二层网络,适合跨数据中心或大规模云环境下的通信需求。
如果你有一台Linux服务器,并希望在不同主机之间建立虚拟二层连接,那么下面这些操作就是你需要的。
1. VXLAN 是什么?为什么用它?
VXLAN 的全称是 Virtual eXtensible Local Area Network,中文叫虚拟扩展局域网。它的核心思想是通过 UDP 封装,把一个二层以太网帧嵌套在一个三层 IP 报文中传输,从而实现跨越三层网络的二层通信。
使用场景包括:
- 跨机房或跨子网的虚拟机迁移
- 大规模容器集群之间的网络互通
- 模拟统一局域网环境,隐藏底层网络拓扑
你可以把它理解为一种“逻辑上的交换机”,只不过这个交换机可以横跨多个物理网络。
2. 基本配置步骤:创建 VXLAN 接口并绑定到物理网卡
要配置 VXLAN 接口,最常用的方法是使用 iproute2 工具集中的 ip link 和 ip addr 命令。
以下是一个简单的例子:
假设你有两台 Linux 主机 A 和 B:
- A 的 IP 是 192.168.1.10
- B 的 IP 是 192.168.1.11
你想在这两个主机之间建立 VXLAN 连接,使用的 VXLAN ID 是 100。
在主机 A 上执行:
# 创建 vxlan0 接口,指定远端地址为 B 的 IP ip link add vxlan0 type vxlan id 100 remote 192.168.1.11 dev eth0 # 给 vxlan0 分配 IP 地址 ip addr add 10.0.0.1/24 dev vxlan0 # 启动接口 ip link set vxlan0 up
在主机 B 上执行:
# 创建 vxlan0 接口,指定远端地址为 A 的 IP ip link add vxlan0 type vxlan id 100 remote 192.168.1.10 dev eth0 # 给 vxlan0 分配 IP 地址 ip addr add 10.0.0.2/24 dev vxlan0 # 启动接口 ip link set vxlan0 up
这样,A 和 B 的 vxlan0 接口就可以互相 ping 通了。
3. 注意事项和常见问题
- 确保 UDP 端口 4789 开放:这是 VXLAN 默认使用的端口,防火墙要允许该端口通信。
- 避免 MTU 不匹配:VXLAN 封装会增加包头大小,通常建议将 MTU 设置为 1500 – 50 = 1450 或更低,防止分片。
- 使用组播或多播时更复杂:上面的例子是单播点对点模式,如果要支持多节点广播,就需要配置组播路由(如使用 bridge-utils 和 IGMP snooping)。
- 持久化配置:上面的命令重启后会失效,可以用 networkmanager、systemd-networkd 或写入 /etc/network/interfaces 来保存配置。
- 性能考虑:VXLAN 有一定的封装开销,对延迟和吞吐量有一定影响,适合中大型部署,小规模可以直接使用桥接或 VLAN。
4. 验证 VXLAN 是否正常工作
你可以通过以下方式验证:
-
使用 ping 10.0.0.2(从 A 上)测试是否能通
-
查看接口状态:ip link show vxlan0
-
查看 ARP 表:arp -n
-
使用 tcpdump 抓包查看 VXLAN 封装数据:
tcpdump -i eth0 udp port 4789
如果能看到 VXLAN 标识符和 MAC 地址信息,说明已经成功运行。
基本上就这些。虽然看起来有点步骤,但只要按照顺序一步步来,就能顺利跑起来。关键是在于理解 VXLAN 的作用和基本原理,这样遇到问题也不容易慌。