首页 > 代码库 > openstack固定ip和浮动ip

openstack固定ip和浮动ip

今日在学习openstack的网络,我们用的是flatdhcp这种网络模式。一直有个疑惑,为什么固定ip是不能访问,而浮动ip是可以ping通。这是怎么做到的。

其实固定ip和浮动ip本质是没什么区别的,先需要看下iptables的一些知识

假设我们在云主机上ping 浮动ip 192.168.139.7,那么是直接从本地进程出发,到路由表,走output链

查看iptables的规则,可以看到在nat的表中有一个dnat的规则,也就是

Chain nova-network-OUTPUT (1 references)
target     prot opt source               destination         
DNAT       all  --  0.0.0.0/0            192.168.139.7        to:192.168.138.17

既然修改的是nat表中的output链,这个过程是把目标访问是浮动ip变为固定ip。这个可以通过,而直接ping固定ip是不能通过的,那么只有通过在filter这里的output链中的规则了。果然查看filter可以看到

Chain nova-compute-inst-43 (1 references)
 pkts bytes target     prot opt in     out     source               destination         
28080 4431K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 nova-compute-provider  all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     udp  --  *      *       192.168.138.227      0.0.0.0/0            udp spt:67 dpt:68
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            match-set b0f65738cef046168b1dbed09be4c14 src
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ! ctstate DNAT
    0     0 ACCEPT     4    --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 1:65535
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 nova-compute-sg-fallback  all  --  *      *       0.0.0.0/0            0.0.0.0/0

其中有一个很重要的DROP!这条规则最后就是在filter的output链路中!

那么如果我们这个ping是从其他地方过来的,数据包又是怎么走的?这个时候在上面的图中走的是数据包到本地进程这条路线,只要有路由就是ping通。

以上都是开通安全规则的情况

openstack固定ip和浮动ip