目录

前文列表

计算机网络基础 — 以太网

计算机网络基础 — 物理网络

计算机网络基础 — 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,如下:

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

Step 2. 启动 L3 agent service 进程,并检查是否运行正常。

Step 3. 创建虚拟路由器。

  1. 创建虚拟路由器,并添加网络接口



  2. 重复操作,添加两个 VLAN 网络到虚拟路由器,并在两个网络中分别创建一台虚拟机,拓扑效果如下:

  3. 验证虚拟机 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-<\router-id> 的 Network namespace,并在 namespace 里,将网段 192.168.1.0/24 的网关(默认是 x.x.x.1)配置在 qr-xxx 网卡上。

  • 查看 br-int 上的 Port qr-xxx

  • 查看 qrouter-<\router-id> namespace



  • 查看 namespace 中的网关配置信息

  • 查看 qrouter-<\router-id> namespace 路由

  • 查看虚拟机内部路由信息

NOTE:

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

总结

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

计算机网络基础 — Linux 虚拟路由器的更多相关文章

  1. 网络虚拟化之linux虚拟网络基础

    1 linux虚拟网络基础 1.1 Device 在linux里面devic(设备)与传统网络概念里的物理设备(如交换机.路由器)不同,Linux所说的设备,其背后指的是一个类似于数据结构.内核模块或 ...

  2. Linux虚拟网络:Docker网络知识之基础篇

    我们在工作中应用了docker容器化技术,服务的部署.维护和扩展都方便了很多.然而,近期在私有化部署过程中,由于不同服务器环境的复杂多变,常常遇到网络方面的问题,现象为容器服务运行正常,但宿主机.容器 ...

  3. 计算机网络基础之TCP/IP 协议栈

    计算机网络基础之TCP/IP 协议栈 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.TCP/IP 协议栈概述 1>.什么是TCP/IP协议栈 Transmission C ...

  4. 计算机网络基础之IP地址详解

    计算机网络基础之IP地址详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IP地址概述 1>.什么是IP地址 我们为什么要使用逻辑地址(IP地址)来标识网络设备,而不采 ...

  5. 计算机网络基础之OSI参考模型

    计算机网络基础之OSI参考模型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.OSI参考模型 OSI是Open System Interconnection的缩写,意为开放式系 ...

  6. VRRP(Virtual Router Redundancy Protocol) 虚拟路由器冗余协议简介

    因工作中使用Keepalived配置Nginx代理和MySQL代理的高可用,而Keepalived是VRRP协议在linux上的软件实现.因此了解了下VRRP的基础. 1. VRRP技术的引入 随着I ...

  7. 计算机网络基础(1): 拓扑结构/ OSI模型/ TCP/IP模型

    来自mooc <计算机网络基础及应用>南京理工大学. <计算机网络技术>宁波城市职业技术学院.来自网易云课堂<计算机网络工程基础>高骞. chapter1 导论 计 ...

  8. 计算机网络基础——OSI七层网络模型

    计算机网络基础——OSI七层网络模型 OSI的是什么: 开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称 ...

  9. Linux 虚拟文件系统概述

    转自:http://blog.csdn.net/u011373710/article/details/70198080 文章梗概 本文首先以“尽量不涉及源代码”的方式讨论Linux虚拟文件系统的存在的 ...

  10. 转帖--计算机网络基础知识大总汇 https://www.jianshu.com/p/674fb7ec1e2c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    计算机网络基础知识大总汇 龙猫小爷 关注 2016.09.14 23:01* 字数 12761 阅读 30639评论 35喜欢 720 一.什么是TCP/IP 网络和协议 1.     TCP/IP是 ...

随机推荐

  1. Java 编程实例:相加数字、计算单词数、字符串反转、元素求和、矩形面积及奇偶判断

    Java如何相加两个数字 相加两个数字 示例 int x = 5; int y = 6; int sum = x + y; System.out.println(sum); // 打印 x + y 的 ...

  2. 初学STM32 SDIO(一)

    1. SDIO协议简介 ​ SDIO全称是安全数字输入/输出接口 ,控制器对SD卡进行读写通信操作一般有两种通信接口可选,一种是SPI接口,另外一种就是SDIO接口. 多媒体卡(MMC).SD卡. S ...

  3. C语言 05 变量与常量

    变量 变量就像在数学中学习的 x,y 一样,可以直接声明一个变量,并利用这些变量进行基本的运算,声明变量的格式为: 数据类型 变量名称 = 初始值;(其中初始值可以不用在定义变量时设定) = 是赋值操 ...

  4. std::thread 二:互斥量(带超时的互斥量 timed_mutex())

    timed_mutex . try_lock_for . try_lock_until #include <iostream> #include <thread> #inclu ...

  5. win7系统部署django项目

        win7系统部署django项目,在Windows电脑上我使用的是  Apache + mod_wsgi 来部署的   # 背景 Python 3.8.3 Django 3.1.7 Apach ...

  6. Python基于Excel数据加以反距离加权空间插值并掩膜图层

      本文介绍基于Python中ArcPy模块,实现Excel数据读取并生成矢量图层,同时进行IDW插值与批量掩膜的方法. 1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有一个记录有 ...

  7. opengauss-jdbc问题整理

    opengauss-jdbc问题整理(更新中) 问题 1 jdbc 批量执行 insert 语句时返回结果不符合 Spring jpa 预期 问题描述: jdbc 执行查询时,可以使用prepares ...

  8. 树模型-CART树

    分类回归树CART CART树是后面所有模型的基础,也是核心树 在ID3算法中我们使用了信息增益来选择特征,信息增益大的优先选择.在C4.5算法中,采用了信息增益比来选择特征,以减少信息增益容易选择特 ...

  9. Android 开发入门(3)

    0x05 活动 Activity (1)启停活动页面 a. 启动和结束 从当前页面跳转至新页面 startActivity(new Intent(this, [targetPage].class)) ...

  10. 学Windows批处理第一天:使用批处理命令生成一个文件并写入内容

    脚本功能:1.生成一个文件,文件名格式为:yyyymmddhhmmss 2.文件中写入一段文本 操作步骤:1.新建一个文本文档(txt格式) 2.修改文件名为任意名称(我的叫create_file), ...