计算机网络基础 — Linux 虚拟路由器

Valora ·
更新时间:2024-11-13
· 682 次阅读

目录 文章目录目录前文列表前言Neutron L3 agent 概述L3 agent的配置虚拟路由器实现原理总结 前文列表

《计算机网络基础 — 以太网》
《计算机网络基础 — 物理网络》
《计算机网络基础 — TCP/IP 网络模型》
《计算机网络基础 — Linux 内核网络协议栈》
《计算机网络基础 — 虚拟网络》
《计算机网络基础 — Linux 虚拟交换机》
《计算机网络基础 — Linux 路由器》

前言

本文通过 OpenStack Neutron L3 Agent 的实现原理来描述 Linux 虚拟路由器的实现。

Neutron L3 agent 概述

Neutron L3 agent 服务,运行在 OpenStack 的网络节点上,实现了 3 层路由和 NAT 功能。利用 Linux Network Namespaces,可以创建多个具有重合 IP 地址段的虚拟路由器,每个虚拟路由器都具有自己的 namespace。

L3 agent的配置

Step 1. 在网络节点上,编辑 l3_agent.ini。
在这里插入图片描述
其中 [DEFAULT] section 的 interface_driver 是最重要的配置选项,用来指定 mechanism driver。Neutron 支持三种 interface_driver,如下:

使用 openvswitch: interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver 使用 linuxbridge: interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver 使用 null: interface_driver = neutron.agent.linux.interface.NullDriver

Step 2. 启动 L3 agent service 进程,并检查是否运行正常。
在这里插入图片描述

Step 3. 创建虚拟路由器。

创建虚拟路由器,并添加网络接口
在这里插入图片描述
在这里插入图片描述

重复操作,添加两个 VLAN 网络到虚拟路由器,并在两个网络中分别创建一台虚拟机,拓扑效果如下:
在这里插入图片描述

验证虚拟机 test1 与 test2 的连通性。
在这里插入图片描述
虚拟机 test1:IP 192.168.1.10, 网段192.168.1.0/24, 网关192.168.1.1
虚拟机 test2:IP 192.168.2.12, 网段192.168.2.0/24, 网关192.168.2.1

虚拟路由器实现原理

创建虚拟路由器,并添加网络接口时,L3 agent 会在网络节点的 br-int 创建一个 Port qr-xxx,同时创建一个名为 qrouter- 的 Network namespace,并在 namespace 里,将网段 192.168.1.0/24 的网关(默认是 x.x.x.1)配置在 qr-xxx 网卡上。

查看 br-int 上的 Port qr-xxx
在这里插入图片描述

查看 qrouter- namespace
在这里插入图片描述
在这里插入图片描述

查看 namespace 中的网关配置信息
在这里插入图片描述

查看 qrouter- namespace 路由
在这里插入图片描述

查看虚拟机内部路由信息
在这里插入图片描述

NOTE:

Port qr-xxx 的命名使用的是 gateway_port 的 ID 的前 11 位 使用 namespace 是为了解决网络地址重叠的问题,从而达到虚拟的效果。 该网段的所有虚拟机上在启动时,都下发一条指向网关(默认是 x.x.x.1)的路由。 总结

可见,OpenStack Neutron L3 Agent 的虚拟路由器依旧是通过 Network namespace 来实现的,因为 Linux 本身就具有路由功能,再结合操作系统虚拟化技术,自然就可以虚拟出多个路由器了。例如:

在这里插入图片描述


作者:范桂飓



网络基础 Linux 计算机网络基础 路由器 路由 计算机网络

需要 登录 后方可回复, 如果你还没有账号请 注册新账号