转载:https://blog.kghost.info/2013/03/01/linux-network-emulator/

笔者现在在做云计算的网络设计,涉及到上百台服务器与交换机,在实测前必须进行原型测试,但是我只有一个工作用开发机,本文介绍一种方法,使用这一台机器模拟数十台服务器以及路由器的网络环境。

Linux的网络虚拟化是LXC项目中的一个子项目,LXC包括文件系统虚拟化,进程空间虚拟化,用户虚拟化,网络虚拟化,等等 [1],这里使用LXC的网络虚拟化来模拟多个网络环境。

创建虚拟网络环境

使用命令

$ ip netns add net0

可以创建一个完全隔离的新网络环境,这个环境包括一个独立的网卡空间,路由表,ARP表,ip地址表,iptables,ebtables,等等。总之,与网络有关的组件都是独立的。

ip命令需要root权限的,但是由于本文大量使用ip命令,于是笔者给ip命令添加了capability,使普通用户也能使用ip命令

使用命令

$ ip netns list
net0

可以看到我们刚才创建的网络环境

进入虚拟网络环境

使用命令

$ ip netns exec net0 `command`

我们可以在 net0 虚拟环境中运行任何命令

$ ip netns exec net0 bash
$ ip ad
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

这样我们可以在新的网络环境中打开一个shell,可以看到,新的网络环境里面只有一个lo设备,并且这个lo设备与外面的lo设备是不同的,之间不能互相通讯。

连接两个网络环境

新的网络环境里面没有任何网络设备,并且也无法和外部通讯,就是一个孤岛,通过下面介绍的这个方法可以把两个网络环境连起来,简单的说,就是在两个网络环境之间拉一根网线

$ ip netns add net1

先创建另一个网络环境net1,我们的目标是把net0与net1连起来

$ ip link add type veth
$ ip ad
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
81: veth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000link/ether 12:39:09:81:3a:dd brd ff:ff:ff:ff:ff:ff
82: veth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000link/ether 32:4f:fd:cc:79:1b brd ff:ff:ff:ff:ff:ff

这里创建连一对veth虚拟网卡,类似pipe,发给veth0的数据包veth1那边会收到,发给veth1的数据包veth0会收到。就相当于给机器安装了两个网卡,并且之间用网线连接起来了

$ ip link set veth0 netns net0
$ ip link set veth1 netns net1

这两条命令的意思就是把veth0移动到net0环境里面,把veth1移动到net1环境里面,我们看看结果

$ ip ad
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
$ ip netns exec net0 ip ad
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
81: veth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000link/ether 12:39:09:81:3a:dd brd ff:ff:ff:ff:ff:ff
$ ip netns exec net1 ip ad
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
82: veth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000link/ether 32:4f:fd:cc:79:1b brd ff:ff:ff:ff:ff:ff

veth0 veth1已经在我们的环境里面消失了,并且分别出现在net0与net1里面。下面我们简单测试一下net0与net1的联通性

$ ip netns exec net0 ip link set veth0 up
$ ip netns exec net0 ip address add 10.0.1.1/24 dev veth0
$ ip netns exec net1 ip link set veth1 up
$ ip netns exec net1 ip address add 10.0.1.2/24 dev veth1

分别配置好两个设备,然后用ping测试一下联通性:

$ ip netns exec net0 ping -c 3 10.0.1.2
PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.
64 bytes from 10.0.1.2: icmp_req=1 ttl=64 time=0.101 ms
64 bytes from 10.0.1.2: icmp_req=2 ttl=64 time=0.057 ms
64 bytes from 10.0.1.2: icmp_req=3 ttl=64 time=0.048 ms--- 10.0.1.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.048/0.068/0.101/0.025 ms

一个稍微复杂的网络环境

创建虚拟网络环境并且连接网线

ip netns add net0
ip netns add net1
ip netns add bridge
ip link add type veth
ip link set dev veth0 name net0-bridge netns net0
ip link set dev veth1 name bridge-net0 netns bridge
ip link add type veth
ip link set dev veth0 name net1-bridge netns net1
ip link set dev veth1 name bridge-net1 netns bridge

在bridge中创建并且设置br设备

ip netns exec bridge brctl addbr br
ip netns exec bridge ip link set dev br up
ip netns exec bridge ip link set dev bridge-net0 up
ip netns exec bridge ip link set dev bridge-net1 up
ip netns exec bridge brctl addif br bridge-net0
ip netns exec bridge brctl addif br bridge-net1

然后配置两个虚拟环境的网卡

ip netns exec net0 ip link set dev net0-bridge up
ip netns exec net0 ip address add 10.0.1.1/24 dev net0-bridge
ip netns exec net1 ip link set dev net1-bridge up
ip netns exec net1 ip address add 10.0.1.2/24 dev net1-bridge

测试

$ ip netns exec net0 ping -c 3 10.0.1.2
PING 10.0.1.2 (10.0.1.2) 56(84) bytes of data.
64 bytes from 10.0.1.2: icmp_req=1 ttl=64 time=0.121 ms
64 bytes from 10.0.1.2: icmp_req=2 ttl=64 time=0.072 ms
64 bytes from 10.0.1.2: icmp_req=3 ttl=64 time=0.069 ms--- 10.0.1.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.069/0.087/0.121/0.025 ms

配置lldpd检查线路链接情况

随着虚拟网络环境增加,环境中网卡数量也在不断增加,经常会忘记环境中哪些网卡连接到哪里,通过 lldp [2] 协议,我们可以清楚看到每个网卡连接到了哪些环境中的哪个网卡。

github 上有一个 lldp 在 linux 下的开源实现 [3],通过在每个环境中起一个 lldp daemon,我们就可以实时查看每个网卡的连接情况

Bridge 上 lldp 的数据

$ lldpcli show neighborsLLDP neighbors:Interface:    bridge-net0, via: LLDP, RID: 2, Time: 0 day, 00:06:53Chassis:ChassisID:    mac 82:be:2a:ec:70:69SysName:      localhostSysDescr:     net0Capability:   Bridge, offCapability:   Router, offCapability:   Wlan, offPort:PortID:       mac 82:be:2a:ec:70:69PortDescr:    net0-bridgeInterface:    bridge-net1, via: LLDP, RID: 1, Time: 0 day, 00:06:53Chassis:ChassisID:    mac b2:34:28:b1:be:49SysName:      localhostSysDescr:     net1Capability:   Bridge, offCapability:   Router, offCapability:   Wlan, offPort:PortID:       mac b2:34:28:b1:be:49PortDescr:    net1-bridge

网络虚拟化技术(一): Linux网络虚拟化相关推荐

  1. 网络虚拟化技术(一): linux网络虚拟化,网络虚拟化技术(一): Linux网络虚拟化...

    网络虚拟化技术(一): Linux网络虚拟化 2018-12-11 01 March 2013 笔者现在在做云计算的网络设计,涉及到上百台服务器与交换机,在实测前必须进行原型测试,但是我只有一个工作用 ...

  2. 天翼云从业认证(1.6)虚拟化技术基础、服务器虚拟化、存储虚拟化和网络虚拟化技术;

    虚拟化技术基础.服务器虚拟化 常见虚拟化技术:vmware.xen.kvm. 虚拟化技术特征:分区.隔离.封装.相对于硬件独立. 全虚拟化:抽象VM具有完全的物理机特征,操作系统在其上运行,不需要任何 ...

  3. 浅析IRF虚拟化技术增强企业网络架构的弹性

    浅析IRF虚拟化技术增强企业网络架构的弹性  [摘要]随着"云"时代到来和各种虚拟化技术日趋成熟,对传统企业网络架构提出新挑战.例如:在不破坏企业原有网络架构和资产投入情况下,可以 ...

  4. 虚拟化技术在企业网络中的应用

    2019-11-试题二 虚拟化技术在企业网络中的应用 虚拟化技术已经广泛应用于各类应用中,结合自己参与设计的系统加以评估,写出一篇有自己特色的论文.请围绕"虚拟化技术在企业网络中的应用&qu ...

  5. linux虚拟化技术 教程,Linux上实现虚拟化技术的优势

    何晓龙:Linux上实现虚拟化技术,和Windows实现虚拟化技术相比有哪些优势? 金林钢:省钱.技术层面Windows是微软自己开发的,Linux是全世界所有开源的人一起开发的.我们Linux用的是 ...

  6. 2018-2019-2 网络对抗技术 20165237 Exp7 网络欺诈防范

    2018-2019-2 网络对抗技术 20165237 Exp7 网络欺诈防范 实验目标 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1)简单应用SET工 ...

  7. 2018-2019-2 20165235《网络对抗技术》Exp7 网络欺诈防范

    2018-2019-2 20165235<网络对抗技术>Exp7 网络欺诈防范 实验目的 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法 实验内容 (1)简单应 ...

  8. 2018-2019-2 20165312《网络攻防技术》Exp7 网络欺诈防范

    2018-2019-2 20165312<网络攻防技术>Exp7 网络欺诈防范 目录 一.相关知识点总结 二.实验内容 三.实验步骤 四.实验总结及问题回答 五.实验中遇到的问题及解决方法 ...

  9. 2018-2019-2 网络对抗技术 20165334 Exp7 网络欺诈防范

    2018-2019-2 网络对抗技术 20165334 Exp7 网络欺诈防范 1. 实践内容(3.5分) 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 (1 ...

  10. 2018-2019-2 20165315《网络对抗技术》Exp7 网络欺诈防范

    2018-2019-2 20165315<网络对抗技术>Exp7 网络欺诈防范 一.实验内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体实践有 简单应 ...

最新文章

  1. 机器学习模型越来越大,开发者应该如何部署?
  2. Intel汇编语言程序设计学习-第六章 条件处理-上
  3. 日常技术分享 : 一定要注意replcaceAll方法,有时候会如你所不愿!
  4. 满二叉树及完全二叉树的相关性质证明
  5. java中操作时间的常用工具类
  6. 目的入口(dst_entry)
  7. 设置日志不记录指定类型的文件,日志文件的切割,配置静态元素过期时间
  8. 力扣-897 递增顺序搜索树
  9. poj1990两个树状数组
  10. 随手记录: 扩展M.2硬盘,从1T换到2T 硬盘clone ubuntu设置等注意事项
  11. 汉语拼音大全(竖排版)
  12. 谷歌浏览器linux,windows下载
  13. Java分页处理的三种方式
  14. vue虚拟DOM原理
  15. VBA-循环语句总结
  16. MATLAB教室人数统计开源代码(包含 GUI 注释 课题分析)
  17. MongoDB——分页排序聚合操作
  18. c语言属于物联网专业课吗,物联网专业课程都有哪些?
  19. html里面如何让文字居中显示,HTML如何让文字居中?
  20. 5岁了!我们和AWS中国一起成长

热门文章

  1. 下一代防火墙NGFW
  2. oracle的mode,Oracle中使用optimizer_mode参数意义
  3. Pytorch-IndexError: too many indices for tensor of dimension 0
  4. JabRef--entry column 视图设置citationKey
  5. 李居明风水人人都懂版之十二~缺角
  6. linux中tar.xz文件如何解压
  7. 场景理解的统一感知分析ECCV2018
  8. 光纤中的多种光学模式芯径_RP Fiber Power 无源光纤之多模光纤
  9. AI绘画指南 stable diffusion webui (SD webui)如何设置与使用
  10. Python搜索全部MP3类型文件名