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 一.前 ...
随机推荐
- JavaScript学习总结 之对象
JavaScript学习总结(二) ---- 对象 在JavaScript中,几乎用到的每个js都离不开它的对象.下面我们深入了解一下js对象. js中对象的分类跟之前我们学过的语言中函数的分类一样, ...
- reids数据类型
今天第一次开通,写的不好,请谅解 redis并不是简单的key-value存储,实际上它是一个数据结构服务器,支持不同类型的值,也就是说,我们不仅仅把字符串当作键所指向的值, 如下这些数据 ...
- 使用NPOI生成Excel级联列表
目录 1 概要 1 2 磨刀不误砍柴工——先学会Excel中的操作 2 3 利用NPOI生成导入模板 7 3.1 设置workbook&sheet ...
- 读《effective C++》2
条款03:尽可能使用const(Use const whenever possible) 1.const == 奇妙的事 const的一件奇妙的事是,他允许你定义一个约束,(告诉编译器,这是一个“不该 ...
- 一款好用的分页插件用于regularJS
最近在用一款来自网易的javascript MVC 框架regularJS来写项目,这是网易一位叫郑海波的大神写的一款框架,所谓regualrJS, 作者这样取名主要是因为这个框架更像是angular ...
- MYSQL安装(Linux)
1.首先检查下系统是否已经有mysql相关的安装项 rpm -qa|grep mysql 2.如果有,先删除 rpm -e --nodeps mysql-libs--.el6_5.×86_64 3.接 ...
- MVC实现SSO
近来工作无事,想做个SSO, 之前做过一个项目用到SSO,自己也没有看明白是个什么东西.现在正好有时间,所以想研究下. 先是从网上看到了SSO的思路: 三个站点:SiteA,SiteB,SiteMai ...
- 篇3 安卓app自动化测试-搞定界面元素
篇3 安卓app自动化测试-搞定界面元素 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试>的第三 ...
- Mac os下安装brew
1.首先没下载xcode,请先安装xcode,安装的继续往下面看 2.安装brew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubuser ...
- MYSQL设置远程账户登陆总结
为了给MYSQL用户设置远程连接权限,经历的种种错误总结 ERROR 2003 (HY00 原因是MySQL考虑到安全因素,默认配置只让从本地登录 打开 /etc/mysql/my.cnf 文件,找到 ...