本文通过linux网络虚拟化的基础功能NameSpace、veth pair、bridge、tap实现一个路由器的最小模型,从而实现云计算环境下处于不同网段的虚拟机可以跨网段互通。

虚拟网卡Tun/tap驱动是一个开源项目,tap表示虚拟的是以太网设备,在 Linux 中通常使用 tap设备来实现虚拟网卡,使用 Linux Bridge 来实现虚拟交换机。

Network NameSpace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,每个 Network Namespace 有自己独立的网卡、路由表、ARP 表、iptables 等和网络相关的资源。

一个网络设备只能位于一个Network NameSpace中,而位于不同NameSpace中的设备可以通过veth pair进行通讯,veth pair 就是一对的虚拟设备,从一 端进入的数据包都将从另一端出来,通常在两个NameSpace 之间充当桥梁作用。

在实践之前先基于物理网卡创建一个网桥,这里取网桥名为br_mgmt。

创建一个Namespace

# ip netns add ns_router

创建一对veth pair的tap设备,并把一端放入ns_router中,把另一端加入网桥br_mgmt

创建tap0_router和tap0_peer

# ip link add tap0_router type veth peer name tap0_peer

把tap0_router放入ns_router

# ip link set tap0_router netns ns_router

把tap0_peer加入网桥

# brctl addif br_mgmt tap0_peer

创建另一对veth pair的tap设备,并把一端放入ns_router中,把另一端加入网桥br_mgmt

创建tap1_router和tap1_peer

# ip link add tap1_router type veth peer name tap1_peer

把tap1_router放入ns_router

# ip link set tap1_router netns ns_router

把tap1_peer加入网桥

# brctl addif br_mgmt tap1_peer

将四个tap设备UP

# ifconfig tap0_peer up

# ifconfig tap1_peer up

# ip netns exec ns_router ifconfig tap0_router up

# ip netns exec ns_router ifconfig tap1_router up

在ns_router中设置ip作为两个网段的网关

# ip netns exec ns_router ip addr add local 192.168.0.1/24 dev tap0_router

# ip netns exec ns_router ip addr add local 192.168.1.1/24 dev tap1_router

后面虚拟机使用192.168.0.1/24这个网段和192.168.1.1/24这个网段,并把192.168.0.1和192.168.1.1作为各自网段的网关。在网桥br_mgmt上创建虚拟机,在上面192.168.0.1/24和192.168.1.1/24这两个网段内的虚拟机可以跨网段通信。

整个系统的网络拓扑图如下:

这里虚拟机192.168.0.88和虚拟机192.168.1.88之间是可以相互通讯的。

查看ns_router内部的路由表:

# ip netns exec ns_router route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 tap0_router

192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 tap1_router

可以看到NameSpace ns_router充当了两个网段的路由角色。但是这个架构还不能实现VLAN网络隔离和内网路由到外网以及分布式路由的功能。


关注本公众号,了解更多关于云计算虚拟化的知识

如何实现一个虚拟路由器相关推荐

  1. 如何实现一个虚拟路由器(2)

    在<如何实现一个虚拟路由器>中描述了如何通过linux网络虚拟化的基础功能NameSpace.veth pair.bridge.tap实现一个路由器的最小模型,从而实现云计算环境下处于不同 ...

  2. 虚拟路由器冗余协议-VRRP

    虚拟路由器冗余协议 (VRRP:Virtual Router Redundancy Protocol) 虚拟路由器冗余协议(VRRP)是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 ...

  3. 虚拟路由器冗余协议VRRP原理详解!

    虚拟路由器冗余协议VRRP原理详解! https://virtual.51cto.com/art/201905/596666.htm?pc 我们知道,为了实现不同子网之间的设备通信,需要配置路由.目前 ...

  4. H3C之虚拟路由器冗余协议(VRRP)的原理及应用

    VRRP简介:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ...

  5. 虚拟路由器冗余协议(VRRP)

    简介 虚拟路由器冗余协议(VRRP)是一种LAN接入设备备份协议.一个局域网络内的所有主机都设置缺省网关,这样主机发出的目的地址不在本网段的报文将被通过缺省网关发往三层交换机,从而实现了主机和外部网络 ...

  6. 网络基础之虚拟路由器冗余协议(VRRP)理论基础及华为ENSP基础配置

    一. VRRP的引入 局域网中的用户终端通常采用配置一个默认网关的形式访问外部网络,如果此时默认网关设备发生故障,将中断所有用户终端的网络访问,这很可能会给用户带来不可预计的损失,所以可以通过部署多个 ...

  7. ovn 通过网关虚拟路由器连接外部网络

    本文实验如何通过ovn的网关逻辑路由器将ovn网络连接到外部网络. 前面讲过ovn的逻辑路由器是分布式的,这意味着它没有绑定到某个节点上,而是存在于所有节点上的,同时它是通过每个节点的openflow ...

  8. 学习VRRP虚拟路由器冗余协议与项目实例

    目录 VRRP定义 VRRP目的 VRRP作用: VRRP好处: VRRP两组重要概念 VRRP的工作原理 VRRP的工作过程: 怎么让路由器成为主路由器? VRRP配置的总结 VRRP项目实例 总结 ...

  9. VRRP(虚拟路由器冗余协议)

    文章目录 一.vrrp 基本概述 二.vrrp主备份过程 三.主备路由器切换过程 3.1 master发生故障,主备切换过程 3.2 原有的注路由器恢复 实际操作 一.vrrp 基本概述 Virtua ...

最新文章

  1. ecliplse 调试android 断点,如何在Github maven项目上开始调试
  2. Android四大组之ContentProvider
  3. python实战经典例子_Python基础之列表常见操作经典实例详解
  4. LeetCode 1450. 在既定时间做作业的学生人数
  5. android shpe 三角形_绘制三角形背景的android
  6. Mysql数据库常用分库和分表方式
  7. python源码库安装_Python第三方库安装及常见问题
  8. iOS xcode8提交 iOS10 “此构建版本无效” (已解决)(调用 私有api问题)
  9. grdraw用法 lisp_AutoCAD 2000 Visual LISP开发
  10. vue+echarts绘制中国地图,动态配置省份颜色和城市标点
  11. 《华为研发》阅读 - 11 (中研部组织结构)
  12. VLDB 历年最佳论文汇总
  13. 教你快速将多个TXT文档合并成一个多方法 手工方法无需软件
  14. Java读取Excel,03版本和07版本
  15. 采集HTTP与HTTPS
  16. 王道书 P360 T03(计数排序)
  17. Excel:一维表和二维表 互转
  18. 分层抽样不按比例如何加权_分层抽样的公式怎么计?
  19. SpringBoot打成jar包时访问templates下的html出错或访问不到
  20. Python编曲实践(一):通过Mido和PyGame来编写和播放单轨MIDI文件

热门文章

  1. 飞书接入ChatGPT - 将ChatGPT集成到飞书机器人,直接拉满效率 【飞书ChatGPT机器人】
  2. Facebook、Twitter、LinkedIn分享
  3. ESP8266 分区表介绍
  4. 港股香港上市的方式都有哪些
  5. 我爱天文 - 你知道几种天文望远镜?
  6. Top22:RHEL学习札记-5-用户身份与管理权限
  7. java匿名启动线程_使用匿名内部类:来创建线程的两种方式
  8. 做出让人爱不释手的基础软件:可观测性和可交互性
  9. 怎样查询一只股票的历史行情详细数据?超详细步骤讲解
  10. Android资源之String (四): plurals