2013年09月16日

Openstack Network学习(五)


主要介绍iptables的情况

在学习OpenStack网络的过程中,很多时候可能会涉及到防火墙,那么iptables到底是如何工作的了。这一篇主要记录防火墙的基本知识,这样有助于分析虚拟机的包在主机中到底经过了什么样的变换,处于vlan中的虚拟机通过NAT完成与外界通信的,NAT到底是如何完成了成private ip到public ip的相互转换,熟悉了iptables那么就知道此过程。

iptables

ptables的基本概念包括:规则,链,表。

iptables处理过程

有了上面的基础知识之外,那么对于进入主机的包或者从主机发出去的包在iptables中经过了哪些工序了?先看下面这张简单的流程图。

iptables

  1. 当数据包进入网卡时,他首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去。
  2. 如果数据包是进入本机的,就会向下到INPUT链。数据包到达INPUT链后,任何进程都会接受。本机上运行的程序也可以发出数据包,这些数据包会经过OUTPUT链,然后到达POSTROUTING链输出。
  3. 如果数据包是要转发出去的,且内核允许,数据包就会经过forward链,然后POSTROUTING链输出。))))

这儿还有一张更加具体的图可以参考。

iptables

总结

知道iptables是如何处理数据包了,再看network controller节点的iptables,我们就知道虚拟机的包在iptables中经过了怎样的变化,所谓的NAT也就是采用iptables转换实现的。所以使用vlan方式使虚拟机上网则需要以下几个过程:

  1. 使用quantum创建private network,即一个vlan,创建了vlan则需要使用可以支持vlan的交换机来实现包在交换机间的转发
  2. 创建一个public network,该网络的ip地址是原本能够上网的
  3. 使用l3-agent,创建router将public network 与 private network连接起来。
  4. 将一个public nework的ip 与 vlan中虚拟机的ip关联起来。

这样,虚拟机的ip地址最终就可以通过iptables转换成public network中的ip地址,然后使用public ip地址上网,访问public ip的数据包最终也会转换成虚拟机的ip,然后路由到虚拟机来。

对于NAT的转换,可以部分参考上一篇文章OpenStack-Network学习四

参考文档

参考文档(一):http://6509e.blog.51cto.com/542252/124312

参考文档(二):http://blog.chinaunix.net/uid-24960107-id-204362.html

参考文档(三):http://www.ibm.com/developerworks/cn/cloud/library/cl-openstack-network/

参考文档(四):http://blog.youlingman.info/debugging-iptables-with-raw-table/

前一篇: 打印螺旋矩阵 后一篇: 线段树之区间最大值