neutron flat和vxlan网络访问外网流量走向
OpenStack版本:Mitaka
物理节点:
Hostname | Management IP | Tunnel IP | Role |
test-ctrl-01 | 192.168.100.11 | 192.168.120.11 | Controller Node、Network Node |
test-cmpt-01 | 192.168.100.21 | 192.168.120.21 | Compute Node |
test-cmpt-02 | 192.168.100.22 | 192.168.120.22 | Compute Node |
Neutron网络:
网络 | 网络类型 | 网络模式 | 子网 |
public_net | External Network | Flat | 192.168.100.0/24 |
share_net | Private Network | Vxlan | 192.168.111.0/24 |
网络拓扑:
虚拟机:
test-01:直接连接到public_net,fixed ip为192.168.100.101
test-02:连接到share_net,fixed ip 192.168.111.4,绑定floating ip 192.168.100.102
特意将两个虚拟机建到同一台宿主机test-cmpt-02上,方便进行对比。
网络节点test-ctrl-01的网桥结构图:
计算节点test-cmpt-02上的网桥结构图:
flat网络(虚拟机test-01)访问外网的流量
1. 数据包从虚拟网卡tapaf305168-66出来,到达网桥qbraf305168-66,此处有iptables规则做IP/MAC pairs的匹配,如果配置了安全组规则,还会有对应的iptables规则:
2. 通过qvbaf305168-66和qboaf305168-66这对peer,到达br-int。由于qboaf305168-66在br-int上的vlan tag是2(类似交换机的access口),数据包的vlan_id会被标记成2。
3. br-int的flow table对ip和mac进行过滤,防止ip和mac伪造:
可以看到对arp和icmp有ip和mac的匹配。对mac的检测在mitaka版本以后都有,而kilo版只有arp_spa的规则。
这是些规则是neutron-openvswitch-agent添加的,具体实现在neutron.plugins.ml2.drivers.openvswitch.agent.openflow.ovs_ofctl.br_int. OVSIntegrationBridge的install_icmpv6_na_spoofing_protection(), set_allowed_macs_for_port()和install_arp_spoofing_protection()三个函数。
4. MAC地址检测通过后的action是normal,数据包有两个走向:
1) 通过patch-tun和patch-int这对peer到达br-tun:
最后会到达table 22,此处对于dl_vlan=2没有添加任何规则,会直接被丢弃。
2) 通过int-br-ex和phy-br-ex这对peer到达br-ex:
此处对于dl_vlan=2的action是normal,数据包会根据路由表规则从eth3发出。
vxlan网络(虚拟机test-02)访问外网的流量
前3步同test-01。
4. MAC地址检测通过后的action是normal,数据包有两个走向:
1) 通过int-br-ex和phy-br-ex这对peer到达br-ex:
此处对于dl_vlan=1没有添加任何规则,会直接被丢弃。
2) 通过patch-tun和patch-int这对peer到达br-tun:
对于dl_vlan=1的包,会将vlan id去除,设置tunnel id为0x10050(也就是share_net的segmentation_id 65616),从port 2和port 3(分别和test-ctrl-01和test-cmpt-01建立的tunnel隧道)发出。这一步即是vxlan封装。
下面的流程在网络节点进行:
5. 网络节点通过tunnel隧道收到这个封装过的vxlan数据包,到达br-tun上的vxlan-c0a87b16这个端口:
匹配到tunnel id是0x10050,会将vlan id设置为1,这一步就是vxlan的解包。然后从port 1送出。
6. 同过patch-int和patch-tun这对peer,到达br-int,br-int的流表对dl_vlan=1的包没有任何处理,action是normal:
7. 数据包有三个走向:
1) 通过int-br-ex和phy-br-ex这对peer到达br-ex:
此处对于dl_vlan=1没有添加任何规则,会直接被丢弃。
2) 到达tap96835b35-be,直接丢弃。
3) 到达qr-466214fa-3d,直接丢弃。
4) 到达qg-169d638e-0e,接收此数据包,进入qrouter-c8aec0d9-3203-4bdb-9237-9818603f521f,根据iptables规则,对来自192.168.111.4的数据包做SNAT:
然后根据路由表规则最终从eth3发出。
neutron flat和vxlan网络访问外网流量走向的更多相关文章
- [OpenStack] [Liberty] Neutron单网卡桥接模式访问外网
环境配置: * Exsi一台 * Exsi创建的单网卡虚拟机一台 * Ubuntu 14LTS 64位操作系统 * OpenStack Liberty版本 * 使用Neutron网络而非Nova网络 ...
- OpenStack Neutron单网卡桥接模式访问外网
环境配置: * Exsi一台 * Exsi创建的单网卡虚拟机一台 * Ubuntu 14LTS 64位操作系统 * OpenStack Liberty版本 * 使用Neutron网络而非Nova网络 ...
- Neutron:访问外网
instance 如何与外部网络通信? 这里的外部网络是指的租户网络以外的网络. 租户网络是由 Neutron 创建和维护的网络. 外部网络不由 Neutron 创建. 如果是私有云,外部网络通 ...
- OpenStack Neutron配置虚拟机访问外网
配置完成后的网络拓扑如下: 当前环境: X86服务器1台 Ubuntu 16.04 DevStack搭建OpenStack 网络拓扑: 外部网络:192.168.98.0/24 内部网络:10.0.0 ...
- 在OpenStack里怎样配置Neutron,让虚拟机访问外网
http://blog.csdn.net/zhangli_perdue/article/details/50264681 OpenStack里虚机(或者叫instance)只有在分配floating ...
- OpenStack创建网络和虚拟机、dhcp设备、虚拟路由器、虚拟机访问外网原理分析
创建网络和虚拟机流程: 1.创建网络和子网 背后发生了什么: Neutron让控制节点上针对此子网的dhcp(虚拟设备)启动,用于给该子网下的实例分配ip 2.生成虚拟机 背后发生了什么: 用户通过G ...
- Docker: 解决Docker无法在电信网络中访问外网
在电信网络中,Docker在build和run时会无法访问外网,原因是docker的默认dns地址是8.8.8.8,由于众所周知的原因,我们需要改写这个地址,方法如下: 修改/etc/sysconfi ...
- 本地虚拟机在NAT网络连接模式下如何设置才可以访问外网以及使用Xshell远程连接
本文演示环境: 笔记本电脑系统:windows 7 虚拟机系统:CentOS 7 虚拟化软件:VMware Workstation 12 远程连接工具:Xshell 5 第一步: 打开虚拟网络编辑器 ...
- kubernetes搭建(可访问外网环境部署)
版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明. 本文链接地址:https://www.cnblogs.com/wannengachao/p/11947621.html 一.前 ...
随机推荐
- macOS平台下虚拟摄像头的研发总结
一.背景介绍 虚拟摄像头,顾名思义,就是利用软件技术虚拟出一个摄像头硬件设备供用户使用.当我们需要对视频图像进行处理再输出时,虚拟摄像头就具备非常大的价值了.关于如何在Windwos上实现一个虚拟设备 ...
- 现代3D图形编程学习--opengl使用不同的缓存对象(译者添加)
现代3D图形编程学习系列翻译地址 http://www.cnblogs.com/grass-and-moon/category/920962.html opengl使用不同的缓存对象 在设置颜色一章中 ...
- Webdriver API之操作(一)
一. 控制浏览器 1. 控制浏览器大小 driver.set_window_size(480,800) #浏览器宽480,高800显示 dirver.maximize_window() #浏览器最大化 ...
- 第十章 MyBatis入门
第十章 MyBatis入门10.1 MyBatis入门 优点:简单且功能强大.能够完全控制SQL语句.容易维护和修改 缺点:移植性不好 使用步骤: 1.下载 ...
- 本地yum服务搭建
1.准备linux ISO系统镜像文件 (例如:rhel-server-5.5-i386-dvd.iso) 2.linux虚拟机(centos 7 192.168.50.24 ),启动sshd服务 ...
- Android -- 带你从源码角度领悟Dagger2入门到放弃
1,以前的博客也写了两篇关于Dagger2,但是感觉自己使用的时候还是云里雾里的,更不谈各位来看博客的同学了,所以今天打算和大家再一次的入坑试试,最后一次了,保证最后一次了. 2,接入项目 在项目的G ...
- 我们一起学Docker(一)
一.什么是Docker? Docker是一个基于LXC(Linux Container,Linux容器),以及cgroup的上层工具,通过对LXC,cgroup及相关系统命令的封装,使得用户可以非常方 ...
- CSS浮动专题!
在css中,浮动问题可能是很多刚入门的小白比较头疼的问题. 1,首先先来介绍一下两种浮动类型:左浮动和右浮动 1) float:left;左浮动,后面的内容会流向对象的右侧 2) float:righ ...
- (原)HashMap之java8新特性
首先说一下HashMap存储结构,数组.链表.树这三种数据结构形成了hashMap.存储结构下图所示,根据key的hash与table长度确定table位置,同一个位置的key以链表形式存储,超过一定 ...
- SQL*Plus快速入门
连接数据库sqlplus hr@\"//mymachine.mydomain:port/MYDB\" --连接到MYDB数据库的一个HR数据集里sqlplus hr@MYDB -- ...