openvswitch:
    openvswitch: 开放的虚拟交换机,虚拟交换就是利用虚拟平台,通过软件的方式形成交换机部件。跟传统的物理交换机相比,虚拟交换机同样具备众多优点:
        1. 配置灵活;
        2. 成本更低

接下来通过openvswitch + netns 实现如下虚拟网络架构:

这里通过vmware来实现:

系统:centos7.2 x64
    主机1 一张网卡,模式:仅主机模式
    主机2 两张网卡,1: 模式:桥接模式;2: 模式:仅主机模式

主机1:
        eno16777736: 192.168.190.128
    主机2:
        eno16777736: 192.168.190.130  eno33554992: 192.168.1.167

本文中所需附件下载:

链接:http://pan.baidu.com/s/1qYQ4BeO 密码:4h4h

1、安装Openvswitch,创建主机1的虚拟网络

    Create the repository config file /etc/yum.repos.d/naulinux-extras.repo:[naulinux-extras]name=NauLinux Extrasbaseurl=http://downloads.naulinux.ru/pub/NauLinux/7/$basearch/Extras/RPMS/enabled=0gpgcheck=1gpgkey=http://downloads.naulinux.ru/pub/NauLinux/RPM-GPG-KEY-linux-ink
Install openvswitch rpm package:# yum --enablerepo=naulinux-extras install openvswitch

安装openvswith官方说的很清楚了 。

但是这里,我们的主机1是仅主机模式无法下载安装。

这里直接使用下载好的rpm包安装。

主机1配置:

# tar xf openvswitch.tar.gz
# rpm -ivh openvswitch/*.rpm
# systemctl start openvswitch ; systemctl enable openvswitch创建虚拟交换机br-in
# ovs-vsctl add-br br-in# ovs-vsctl show
de08faca-8165-4fe7-88d9-459796b5deecBridge br-inPort br-inInterface br-intype: internalovs_version: "2.5.0"创建port vx0,并且设置vx0的类型为vxlan,vxlan相关联的对端主机是192.168.190.130(主机2)
# ovs-vsctl add-port br-in vx0 -- set interface vx0 type=vxlan options:remote_ip=192.168.190.130ovs-vsctl show
de08faca-8165-4fe7-88d9-459796b5deecBridge br-inPort "vx0"Interface "vx0"type: vxlanoptions: {remote_ip="192.168.190.130"}Port br-inInterface br-intype: internalovs_version: "2.5.0"

主机2配置:

# tar xf openvswitch.tar.gz
# rpm -ivh openvswitch/*.rpm
# systemctl start openvswitch ; systemctl enable openvswitch创建虚拟交换机br-in
# ovs-vsctl add-br br-in# ovs-vsctl show
de08faca-8165-4fe7-88d9-459796b5deecBridge br-inPort br-inInterface br-intype: internalovs_version: "2.5.0"创建port vx0,并且设置vx0的类型为vxlan,vxlan相关联的对端主机是192.168.190.128(主机1)
# ovs-vsctl add-port br-in vx0 -- set interface vx0 type=vxlan options:remote_ip=192.168.190.128
# ovs-vsctl show
e43bbb36-5e1f-4178-8dbc-a87bf11332edBridge br-inPort br-inInterface br-intype: internalPort "vx0"Interface "vx0"type: vxlanoptions: {remote_ip="192.168.190.128"}ovs_version: "2.5.0"

这样两台主机之间就建立其了vxlan的隧道传输。

2. 在主机1上创建虚拟机vm1

主机1配置:

# mkdir -pv /images/linux通过xmanager将镜像文件上传到/images/linux目录# cp -a cirros-0.3.5-i386-disk.img vm1.img
# yum install libvirt libvirt-client qemu-kvm virt-install -y这里要注意,用libvirt安装虚拟机前,需要首先配置libvirt网络,因为openvswitch和brctl是不兼容的,libvirt是无法自动发现的。# cd /etc/libvirt/qemu/networks/
不需要默认nat模式
# mv default.xml default.xml_bak创建br-in网络
# vim br-in.xml
# vim br-in.xml <network><name>br-in</name><forward mode='bridge'/><bridge name='br-in'/><virtualport type='openvswitch'/>
</network># systemctl start libvirtd ; systemctl enable libvirtd
# virsh net-list --allName                 State      Autostart     Persistent
----------------------------------------------------------br-in                inactive   no            yes启动br-in网络
# virsh net-start br-in
# virsh net-autostart br-in创建vm1
# virt-install --name vm1 --ram 128 --vcpus=1 --disk path=/images/linux/vm1.img --network network:br-in,model=virtio --import --force --nographics --serial=pty --console=pty

3. 在主机2上实现netns

主机2配置:首先将第二张做桥接。
# cd /etc/sysconfig/network-scripts/
# cp -a ifcfg-eno33554992 ifcfg-br-out
# vim ifcfg-eno33554992
修改如下:TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno33554992
UUID=2269e064-1260-426a-ba84-7d1c06e6ab0a
DEVICE=eno33554992
ONBOOT=yes
BRIDGE=br-out     # 主要添加这行# vim ifcfg-br-outTYPE=Bridge     # 修改类型
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=br-out     # 修改名称
DEVICE=br-out     # 修改设备名
ONBOOT=yes
IPADDR=192.168.1.167
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1# systemctl restart network 物理网卡此时就作为桥设备
# ifconfig eno33554992
eno33554992: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500ether 00:0c:29:d9:13:e7  txqueuelen 1000  (Ethernet)RX packets 270  bytes 28571 (27.9 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 23  bytes 2812 (2.7 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0br-out就作为本机的网卡通信
# ifconfig br-out
br-out: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.1.167  netmask 255.255.255.0  broadcast 192.168.1.255ether 00:0c:29:d9:13:e7  txqueuelen 0  (Ethernet)RX packets 194  bytes 15399 (15.0 KiB)RX errors 0  dropped 65  overruns 0  frame 0TX packets 10  bytes 676 (676.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0安装bridge工具
# yum install bridge-utils -y
# brctl show
bridge name    bridge id        STP enabled    interfaces
br-out        8000.000c29d913e7    no        eno33554992这样,我们的物理桥设备就完成了,接下来创建netns虚拟网络空间。创建虚拟网络空间为ns1
# ip netns add ns1
开启本地回环网络
# ip netns exec ns1 ifconfig lo up
打开网卡间转发功能
# ip netns exec ns1 sysctl -w net.ipv4.ip_forward=1

我们需要创建两张虚拟网卡,这里的虚拟网卡可以理解成网线。

如图:

就是图中红色的两段。

首先将netns和openvswitch连接起来。

创建一对网卡,net-in是前半段,net-out是后半段,就像网线一样,前半段我们接到openvswitch上,后半段接到netns上,这样就在同一个网络里面了

# ip link add net-in type veth peer name net-out
# ifconfig net-in up
# ifconfig net-out up将net-in添加到openvswitch# ovs-vsctl add-port br-in net-in
# ovs-vsctl show
e43bbb36-5e1f-4178-8dbc-a87bf11332edBridge br-inPort br-inInterface br-intype: internalPort net-inInterface net-inPort "vx0"Interface "vx0"type: vxlanoptions: {remote_ip="192.168.190.128"}ovs_version: "2.5.0"将net-out添加到ns1中# ip link set dev net-out name eth0 netns ns1

该网卡现在连接到了openvswitch上,配置和vm1中通网段的ip地址。

登录上vm1主机

# ifconfig lo up
# ifconfig eth0 10.0.0.2 netmask 255.255.255.0 up

在主机2上配置:

# ip netns exec ns1 ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
# ip netns exec ns1 ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=16.2 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=1.77 ms

现在主机1中的虚拟机vm1和netns虚拟网络空间是互通了。

再次,创建一对网卡,net1-in是前半段,net1-out是后半段,就像网线一样,前半段我们接到netns上,后半段接到br-out上,这样就在同一个网络里面了

# ip link add net1-in type veth peer name net1-out
# ifconfig net1-in up
# ifconfig net1-out up将net1-in 添加到netns中
# ip link set dev net1-in name eth1 netns ns1
将net1-out 添加到br-out中
# brctl addif br-out net1-out

因为这里是和第二张物理网卡连接的,这张网卡直接对外网,所以netns 的第二张网卡需要配置主机同网段内地址。

# ip netns exec ns1 ifconfig eth1 192.168.1.130 netmask 255.255.255.0 up

为主机1中的vm1配置路由地址:

# ip route add default via 10.0.0.1
# ping 192.168.1.130
PING 192.168.1.130 (192.168.1.130): 56 data bytes
64 bytes from 192.168.1.130: seq=0 ttl=64 time=18.684 ms
64 bytes from 192.168.1.130: seq=1 ttl=64 time=1.212 ms

这样,就说明vm1已经达到netns中的第二张对外的网卡上。

为netns配置路由地址并添加源地址转发:

# ip netns exec ns1 ip route add default via 192.168.1.1
# ip netns exec ns1 iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -j SNAT --to-source 192.168.1.130
# ip netns exec ns1 iptables -t nat -A PREROUTING -d 192.168.130/32 -j DNAT --to-destination 10.0.0.1

从vm1中ping公网地址:

# ping qq.com
PING qq.com (101.226.103.106): 56 data bytes
64 bytes from 101.226.103.106: seq=0 ttl=50 time=48.198 ms
64 bytes from 101.226.103.106: seq=1 ttl=50 time=49.612 ms

这样我们就实现了内网主机中的虚拟主机访问外网。

转载于:https://www.cnblogs.com/hukey/p/6605132.html

【 Linux 网络虚拟化 】Openvswitch相关推荐

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

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

  2. Linux网络虚拟化基石 network namespace

    1 网络虚拟化基石 network namespace Linux的namespace的作用就是"隔离内核资源". 在Linux的世界里,文件系统挂载点.主机名.POSIX进程间通 ...

  3. 图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN

    Linux的网卡驱动中内含了很多"虚拟网卡".早先的文章曾经详细分析过tun,ifb等虚拟网卡,类似的思路,在虚拟化大行其道的趋势下,Linux源码树中不断增加对"网络虚 ...

  4. (OK) 图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN

    http://blog.csdn.net/dog250/article/details/45788279 Linux的网卡驱动中内含了很多"虚拟网卡".早先的文章曾经详细分析过tu ...

  5. 图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN(转)

    Linux的网卡驱动中内含了很多"虚拟网卡".早先的文章曾经详细分析过tun,ifb等虚拟网卡,类似的思路,在虚拟化大行其道的趋势下,Linux源码树中不断增加对"网络虚 ...

  6. 详解:Linux网络虚拟化技术

    Linux的网络虚拟化是LXC项目中的一个子项目,LXC包括文件系统虚拟化,进程空间虚拟化,用户虚拟化,网络虚拟化,等等,这里使用LXC的网络虚拟化来模拟多个网络环境. 本文从基本的网络设备讲起,到具 ...

  7. 网络虚拟化技术(一): Linux网络虚拟化

    转载:https://blog.kghost.info/2013/03/01/linux-network-emulator/ 笔者现在在做云计算的网络设计,涉及到上百台服务器与交换机,在实测前必须进行 ...

  8. 【 Linux 网络虚拟化 】Netns

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

  9. 网络虚拟化--openvswitch(openstack的网络模型)

    openvswitch Open vSwitch即开放虚拟交换标准.是一款虚拟交换的软件.虚拟交换就是利用虚拟平台,通过软件的方式形成 交换机部件.跟传统的物理交换机相比,虚拟交换机同样具备众多优点, ...

  10. linux网络虚拟化

    地址:http://blog.kghost.info/2013/03/01/linux-network-emulator/ 安装ip netns命令: #yum instal -y *netns* 另 ...

最新文章

  1. gptuefi优势_UEFI+GPT模式,对提升SSD性能非常明显 | 麦田一棵葱
  2. 火车票售票系统mysql_为何火车上明明有很多空位,售票系统却会显示无座?
  3. ffplay源码(版本:ffmpeg-4.2.1)
  4. python提取英文单词 每行显示一个_使用python对文件中的单词进行提取
  5. jeecg公开课今晚主题:新版本功能介绍、online原理和代码生成器,欢迎大家报名
  6. gvim最简化设置,去掉工具栏和菜单栏
  7. python dd 合并二进制文件_马克的Python学习笔记#数据编码与处理 5
  8. Cesium:结合canvas实现自定义气泡点
  9. 视频教程-R语言入门基础-大数据
  10. 打字慢?双拼了解一下!
  11. 打砖块android代码,打砖块游戏的源代码
  12. 青光眼 程序员_青光眼-如何不失明:让我们谈谈治疗方法…
  13. MATLAB批量绘图
  14. ios中设置app音效音效和震动
  15. 分不清?企业征信报告Or企业信用评级报告,差别大了去了!
  16. trunk端口配置的PVID
  17. 【转帖】Java实现Excel批量导入数据
  18. 菲尔兹奖得主埃菲 · 杰曼诺夫全职加入南科大,任职讲席教授
  19. 【每日新闻】中国供应商:苹果新iPhone能为其它设备无线充电
  20. VHDL编写3-8译码器

热门文章

  1. pands库中的一些函数用法
  2. 基于umi写一个用户管理CRUD
  3. 星星评价控件android开发_Android自定义View,评分星星控件(RatingBar)
  4. 计算机技术中采用二进制,在计算机技术中采用二进制.docx
  5. mysql centos_centos7mysql安装
  6. SQL语言概况(4.1)
  7. Caffe学习:使用pycaffe读取mean.binaryproto文件参数
  8. Python绘制简单漂亮好玩的散点图
  9. 2021-06-12 lock 锁 与synchronized 锁
  10. java 按两个键_java – 使用调度程序按下多个键