第31周:Linux 网络虚拟化基础
目标:掌握 Linux 网络虚拟化核心概念(netns、veth、bridge、macvlan),能够构建容器网络原型。
1. Linux 网络虚拟化全景
1.1 容器网络架构
1 | ┌──────────────────────────────────────────────────────────┐ |
1.2 核心技术
| 技术 | 作用 | Docker 用法 |
|---|---|---|
| netns | 网络协议栈隔离 | 每个容器一个 netns |
| veth pair | 连接 netns 与主机 | 容器 eth0 ↔ 主机 vethxxx |
| bridge | L2 转发 | docker0 网桥 |
| iptables | NAT、过滤 | 端口映射、SNAT |
| vlan | L2 隔离 | - |
| macvlan/ipvlan | 多个 MAC/IP 共享物理网卡 | macvlan 网络 |
| 路由 | L3 转发 | 自定义网络 |
2. 网络命名空间(netns)
2.1 基本操作
1 | # === 创建/删除 === |
2.2 完整示例:模拟两个容器
1 |
|
2.3 netns 内部都隔离了什么
1 | # 查看 ns1 隔离了什么 |
3. veth pair
3.1 工作原理
1 | veth pair = 一对虚拟网卡,一端发的包,另一端收到 |
3.2 配置命令
1 | # 创建 veth pair |
3.3 抓包观察
1 | # 在 veth-A 上抓包(双向) |
4. Linux Bridge(网桥)
4.1 工作原理
1 | 网桥:L2 交换机,转发 MAC 帧 |
4.2 配置 bridge
1 | # === 创建 bridge === |
4.3 完整示例:网桥连接两个 netns
1 |
|
5. macvlan / ipvlan
5.1 macvlan
1 | macvlan:在一个物理网卡上虚拟出多个 MAC 地址 |
1 | # === macvlan 配置 === |
5.2 ipvlan
1 | ipvlan:共享 MAC(与 macvlan 不同) |
1 | # ipvlan 配置 |
6. 主机端口映射(Docker 风格)
6.1 iptables 端口映射
1 | # 容器内运行服务 |
6.2 完整示例:模拟容器端口映射
1 |
|
7. 抓包分析
7.1 观察 veth pair
1 | # 在一端发包,在另一端抓 |
7.2 观察 bridge
1 | # bridge 上的 MAC 学习 |
7.3 观察 NAT
1 | # 观察 NAT 转换 |
8. TUN/TAP 设备
1 | TUN/TAP = 用户态网络设备 |
1 | # 创建 TUN |
9. 实践:完整容器网络
1 |
|
10. 常见问题
10.1 netns 之间无法通信
1 | # 1. 检查 veth pair 状态 |
10.2 性能问题
1 | # 1. 启用 GRO/GSO |
10.3 macvlan 模式选择
1 | - bridge: 子接口互通(默认),适合 Pod 网络 |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/06/06/第31周:Linux 网络虚拟化基础/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!