从头搭建Openstack运行环境(五)--虚机添加floating ip

6.虚机添加floating ip

为虚机添加floating ip的功能是在neutron网络功能中非常重要的一项,在虚机创建完成后,如果此虚机所在的网络已经加入一个与外网的router中,那这个虚机可以通过SNAT的方式直接访问外网,但外网用户无法访问进虚机。如果想让外网用户访问虚机需要为虚机分配外网的floating ip。以下是为vm4虚机分配外网ip的具体步骤:

1)fixip与floating ip对应

vm4  fixip:10.0.2.84  floating ip:10.255.253.84

2)创建外网桥br-ex,这里我们使用了网络节点上eth3这个网卡通过10.255.253.*段访问外网

ovs-vsctl --timeout=10 -- --if-exists del-br br-ex
ovs-vsctl --timeout=10 -- --may-exist add-br br-ex
ovs-vsctl add-port br-ex eth3
ip link set dev eth3 up
ip link set dev br-ex up

3)在网络节点上创建qrouter02命名空间和qr03默认网关(10.0.2.1)

ovs-vsctl -- --if-exists del-port qr03 -- add-port br-int qr03 -- set interface qr03 type=internal
ovs-vsctl --timeout=10 set Port qr03 tag=3
ip netns add qrouter02
ip netns exec qrouter02 ip link set lo up
ip link set qr03 netns qrouter02
ip netns exec qrouter02 ip link set qr03 up
ip netns exec qrouter02 ip -4 addr add 10.0.2.1/24 brd 10.0.2.255 scope global dev qr03

4)在外网桥br-ex上创建qg02并分配外网ip(10.255.253.11)

ovs-vsctl -- --if-exists del-port qg02 -- add-port br-ex qg02 -- set interface qg02 type=internal
ip link set qg02 netns qrouter02
ip netns exec qrouter02 ip link set qg02 up
ip netns exec qrouter02 ip -4 addr add 10.255.253.11/24 brd 10.255.253.255 scope global dev qg02
ip netns exec qrouter02 ip route replace default via 10.255.253.1 dev qg02
ip netns exec qrouter02 sysctl -w net.ipv4.ip_forward=1

5)下发iptables防火墙规则实现虚机内网ip与外网ip的snat与dnat映射

ip netns exec qrouter02 iptables -N neutron-filter-top
ip netns exec qrouter02 iptables -A FORWARD -j neutron-filter-top
ip netns exec qrouter02 iptables -A OUTPUT -j neutron-filter-top
ip netns exec qrouter02 iptables -N neutron-l3-agent-local
ip netns exec qrouter02 iptables -A neutron-filter-top -j neutron-l3-agent-local

ip netns exec qrouter02 iptables -N neutron-l3-agent-INPUT
ip netns exec qrouter02 iptables -N neutron-l3-agent-OUTPUT
ip netns exec qrouter02 iptables -N neutron-l3-agent-FORWARD
ip netns exec qrouter02 iptables -A INPUT -j neutron-l3-agent-INPUT
ip netns exec qrouter02 iptables -A OUTPUT -j neutron-l3-agent-OUTPUT
ip netns exec qrouter02 iptables -A FORWARD -j neutron-l3-agent-FORWARD

ip netns exec qrouter02 iptables -t nat -N neutron-l3-agent-PREROUTING
ip netns exec qrouter02 iptables -t nat -N neutron-l3-agent-OUTPUT
ip netns exec qrouter02 iptables -t nat -N neutron-l3-agent-POSTROUTING
ip netns exec qrouter02 iptables -t nat -A PREROUTING -j neutron-l3-agent-PREROUTING
ip netns exec qrouter02 iptables -t nat -A OUTPUT -j neutron-l3-agent-OUTPUT
ip netns exec qrouter02 iptables -t nat -A POSTROUTING -j neutron-l3-agent-POSTROUTING

ip netns exec qrouter02 iptables -t nat -N neutron-postrouting-bottom
ip netns exec qrouter02 iptables -t nat -N neutron-l3-agent-snat
ip netns exec qrouter02 iptables -t nat -N neutron-l3-agent-float-snat
ip netns exec qrouter02 iptables -t nat -A POSTROUTING -j neutron-postrouting-bottom
ip netns exec qrouter02 iptables -t nat -A neutron-postrouting-bottom -j neutron-l3-agent-snat
ip netns exec qrouter02 iptables -t nat -A neutron-l3-agent-snat -j neutron-l3-agent-float-snat

ip netns exec qrouter02 iptables -A neutron-l3-agent-INPUT -s 0.0.0.0/0 -d 127.0.0.1 -p tcp -m tcp --dport 9697 -j ACCEPT
ip netns exec qrouter02 iptables -t nat -A neutron-l3-agent-PREROUTING -s 0.0.0.0/0 -d 169.254.169.254/32 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 9697

ip netns exec qrouter02 iptables -t nat -A neutron-l3-agent-snat -j neutron-l3-agent-float-snat
ip netns exec qrouter02 iptables -t nat -A neutron-l3-agent-POSTROUTING ! -i qg02 ! -o qg02 -m conntrack ! --ctstate DNAT -j ACCEPT
ip netns exec qrouter02 iptables -t nat -A neutron-l3-agent-snat -s 10.0.2.0/24 -j SNAT --to-source 10.255.253.11

ip netns exec qrouter02 ip -4 addr add 10.255.253.84/24 brd 10.255.253.255 scope global dev qg02
ip netns exec qrouter02 iptables -t nat -A neutron-l3-agent-PREROUTING -d 10.255.253.84/32 -j DNAT --to 10.0.2.84
ip netns exec qrouter02 iptables -t nat -A neutron-l3-agent-OUTPUT -d 10.255.253.84/32 -j DNAT --to 10.0.2.84
ip netns exec qrouter02 iptables -t nat -A neutron-l3-agent-float-snat -s 10.0.2.84 -j SNAT --to 10.255.253.84

通过以上配置后外网通过ping 10.255.253.84即可ping通内网虚机。

总结

通过以上介绍了neutron的为虚机分配floating ip的配置规则,对于iptables的理解还是需要比较深入的,如果想完全理解iptables配置的思路请阅读参考资料里SammyLiu的系列文章中关于floating ip的章节,谢谢。

参考资料:

SammyLiu的《Neutron 理解》系列 http://www.cnblogs.com/sammyliu/p/4622563.html

深入理解Neutron -- OpenStack 网络实现 https://www.gitbook.com/book/yeasy/openstack_understand_neutron/details

作者简介:赵俊峰,现为北京新云东方系统科技有限责任公司 云计算部Openstack开发工程师。主要从事Power和x86混合环境下Openstack相关计算、网络、存储相关服务软件开发和系统架构设计工作。

时间: 2024-12-26 11:11:51

从头搭建Openstack运行环境(五)--虚机添加floating ip的相关文章

从头搭建Openstack运行环境(六)--租户网络间路由与防火墙

7.两个租户网络添加路由并配置防火墙规则 为两个租户网络添加路由和配置防火墙规则,可以实现不同租户网络的互通,并配置防火墙规则实现.这里选取tenant1和tenant2此两个租户来创建路由并配置防火墙规则 1)配置信息 #tenant1 add to qrouter01,gateway:qr01 10.0.0.1 #tenant2 add to qrouter01,gateway:qr02 10.0.1.1 2)创建tenant1网关qr01设备和qrouter01路由命名空间 ovs-vsc

OpenStack配置串口显示虚机界面

OpenStack配置串口显示虚机界面 OpenStack的horizon能够显示虚拟机的界面.horizon是web界面,在我们的电脑上,姑且称之为本地,虚拟机运行在远端服务器上,称之为远端.本地显示远端的界面,OpenStack提供了多种方式,noVNC 远程桌面协:RDP(Remote Desktop Protocol 远程桌面协议):SPICE (Simple Protocol for Independent Computing Environment独立计算环境简单协议).这些都是图形

Docker 搭建 Tomcat 运行环境

使用 Docker 搭建 Tomcat 运行环境 1. Docker与虚拟机的区别 2 搭建过程 2.1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: · 必须是 64 位操作系统 · 建议内核在 3.8 以上 查看 CentOS 7系统内核: [[email protected] ~]# uname  -r 3.10.0-327.el7.x86_64 2.2 安装Docker [[email protected] ~]# yum  -y   install   docker

openstack allinone vxlan,虚机网络不通

环境:openstack Q版本,allinone,linuxbridge+vxlan现象:虚机可以拿到地址,但是ping不通网关和dhcp服务器 由于是allinone环境,虚机的tap直接挂到bridge,而dhcp和网关的接口也是直接挂到该bridge,按理虚机是可以直接访问dhcp和网关的,但是虚机确实不通,通过抓包发现连接dhcp的tap没有报文,好像是linux bridge没有转发报文,实在没有办法,把vxlan接口从bridge中删除,虚机竟然可以ping通了,重启linuxbr

9款一键快速搭建PHP运行环境的好工具

原文链接: http://www.cmhello.com/a-key-build-php-environment.html 内容提要: 建立一个PHP网站,首先需要搭建PHP的开发和运行环境,对于PHP初学者也是一个难题,下面介绍部分一站式PHP环境搭建安装程序.小编推荐使用APMServ或者phpnow. 一键搭建PHP运行环境工具 1.APMServ http://apmserv.s135.com/国内研发,功能强大,操作简单,无需安装,只需鼠标一点,即可在自己的电脑上傻瓜全自动搭建一个完美

Windows7下搭建Django运行环境

一直都是在Linux环境下搭建django的运行环境,开学因为需要叫前端的同学帮忙修改模板,所以需要在Windows下搭建起运行环境,想来PHP倒是有不少集成开发环境,Python倒是少的可怜…只在win下用过python,搭建django竟然一时不知道怎么办… 搜索了一圈,在win7下搭建起来了环境,简单的记录一下: 1,安装Python (下载地址:https://www.python.org/downloads/) 我选择呢的是2.7.5版本,安装到了D盘的目录Python27目录 2,添

搭建Babel运行环境,块级作用域,let和const命令

搭建Babel运行环境 Babel(http://babeljs.io/)可用于将使用ES6语法的脚本转化为ES5语法的脚本,基本功能的安装步骤如下: 1.安装node解释器和npm包管理工具 2.安装babel解释器  npm install -g babel (建议这个过程完成以后重启一下电脑,以免无法识别babel指令) 3.使用babel实现脚本转换,命令行进入js文件所在目录后   babel es6.js 示例:新建一个demo01.js,代码如下: //定义一个常量PI const

Centos 搭建java运行环境

 linux 搭建java运行环境 [本文档所介绍的内容适用于公司测试/生产等常见的java环境部署] 一:环境部署前准备: 1.1相关软件以及系统 系统要求:Centos 6.0(以上) (64位) 相关中间件:jdk1.7.0_71,  apache-tomcat7.0 1.2下载jdk和tomcat等相关软件 下载jdk(版本为jdk1.7.0_71) wget --no-check-certificate --no-cookies --header "Cookie: oraclelice

使用gulp搭建es6运行环境

es6引入很多新的语法特性,但是想要在现有浏览器环境执行,需要将ES6代码转为ES5代码,网上有很多转码器babel,traceur之类的,参考之后,使用traceur和gulp搭建es6运行环境,开始我的es6. 开始安装 首先确保电脑上安装了nodejs.1.创建一个项目目录2.全局安装Traceur,在控制台输入npm install -g traceur3.打开项目目录,安装gulp以及gulp-traceur插件npm install -g gulpnpm install gulp g