5 链跟踪,定位位置
首先,查看 FORWARD 链:
[root@w-openstack32 ~]# iptables -nxvL FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
46935472750 20715430397978 neutron-filter-top all -- * * 0.0.0.0/0 0.0.0.0/0
46935472750 20715430397978 neutron-openvswi-FORWARD all -- * * 0.0.0.0/0 0.0.0.0/0
往下走,跟踪 neutron-openvswi-FORWARD 链:
[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-FORWARD
Chain neutron-openvswi-FORWARD (1 references)
pkts bytes target prot opt in out source destination
46934035761 20714724813160 neutron-openvswi-scope all -- * * 0.0.0.0/0 0.0.0.0/0
459609600 121602465610 neutron-openvswi-sg-chain all -- * * 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-out tapbddxxxxc-bd --physdev-is-bridged /* Direct traffic from the VM interface to the security group chain. */
418512415 87324679449 neutron-openvswi-sg-chain all -- * * 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-in tapbddxxxxc-bd --physdev-is-bridged /* Direct traffic from the VM interface to the security group chain. */
继续往下走,跟踪 neutron-openvswi-sg-chain 链:
[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-sg-chain
Chain neutron-openvswi-sg-chain (10 references)
pkts bytes target prot opt in out source destination
459619285 121606141606 neutron-openvswi-ibddxxxxc-b all -- * * 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-out tapbddxxxxc-bd --physdev-is-bridged /* Jump to the VM specific chain. */
418522179 87328347603 neutron-openvswi-obddxxxxc-b all -- * * 0.0.0.0/0 0.0.0.0/0 PHYSDEV match --physdev-in tapbddxxxxc-bd --physdev-is-bridged /* Jump to the VM specific chain. */
46927558621 20715211464005 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
往下走,跟踪进入 neutron-openvswi-ibddxxxxc-b 链:
[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-ibddxxxxc-b
Chain neutron-openvswi-ibddxxxxc-b (1 references)
pkts bytes target prot opt in out source destination
428583997 119531816501 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED /* Direct packets associated with a known session to the RETURN chain. */
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID /* Drop packets that appear related to an existing connection (e.g. TCP ACK/FIN) but do not have an entry in conntrack. */
1937647 124006974 neutron-openvswi-sg-fallback all -- * * 0.0.0.0/0 0.0.0.0/0 /* Send unmatched traffic to the fallback chain. */
最后看下,如果以上规则都不匹配,做的动作:
[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-sg-fallback
Chain neutron-openvswi-sg-fallback (10 references)
pkts bytes target prot opt in out source destination
9841017 629783588 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 /* Default drop rule for unmatched traffic. */
6 Neutron 安全组白名单机制
Openstack Neutron 安全组使用白名单机制,此时网络的访问能力 = 用户自定义的规则允许的能力。如果这些规则都不匹配,没看错,是 drop 掉该数据包。
可以通过上边的 iptables 命令看到,安全组没有放开 IPIP 协议的规则,所以数据包没进到虚机中。
控制节点上再确认下安全组策略,的确没有 IPIP 协议规则。
7 确认 IPIP 协议号
查看 kernel 源码中头文件 include/uapi/linux/in.h,可以看到 IPIP 协议号是 4;
/* Standard well-defined IP protocols. */
enum {
IPPROTO_IP = 0, /* Dummy protocol for TCP */
IPPROTO_ICMP = 1, /* Internet Control Message Protocol */
IPPROTO_IGMP = 2, /* Internet Group Management Protocol */
IPPROTO_IPIP = 4, /* IPIP tunnels (older KA9Q tunnels use 94) */
IPPROTO_TCP = 6, /* Transmission Control Protocol */
IPPROTO_EGP = 8, /* Exterior Gateway Protocol */
IPPROTO_PUP = 12, /* PUP protocol */
IPPROTO_UDP = 17, /* User Datagram Protocol */
IPPROTO_IDP = 22, /* XNS IDP protocol */
IPPROTO_DCCP = 33, /* Datagram Congestion Control Protocol */
IPPROTO_RSVP = 46, /* RSVP protocol */
IPPROTO_GRE = 47, /* Cisco GRE tunnels (rfc 1701,1702) */
...
8 加入规则,纠正网络
在 Openstack Neutron 安全组 dashboard 上加入规则:
在控制节点上看到规则已经生成:
9 单元测试
再去虚机抓包,客户端发包通信接收到应答包,并且在虚机上抓到 IPIP 数据包。同时用命令行查看 iptables,已有数据包匹配并执行(prot 为 4 的 pkts 不为 0)。
[root@w-openstack32 ~]# iptables -nxvL neutron-openvswi-ibddxxxxc-b
Chain neutron-openvswi-ibddxxxxc-b (1 references)
pkts bytes target prot opt in out source destination
428583997 119531816501 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED /* Direct packets associated with a known session to the RETURN chain. */
12266 7040888 RETURN 4 -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 state INVALID /* Drop packets that appear related to an existing connection (e.g. TCP ACK/FIN) but do not have an entry in conntrack. */
1937647 124006974 neutron-openvswi-sg-fallback all -- * * 0.0.0.0/0 0.0.0.0/0 /* Send unmatched traffic to the fallback chain. */
在虚机上抓包,没有看到其他类型数据包进入:
tcpdump -i any \(not icmp\) and \(not udp\) and \(not tcp\) and \(not arp\)
10 推入生产,回归测试
经验证,和测试环境效果一致,done。
总结
通过问题的探索,我们了解 Openstack Neutron 的安全组策略相关知识了,也对 Neutron 网络数据面的网络拓扑架构有了基本的认识。之后,我会结合源码展开谈谈 iptables 模式匹配与执行,以及 iptables 的高级用法和原理,以及部分 netfilter 的原理。
本文转载自公众号 360 云计算(ID:hulktalk)。
原文链接:
https://mp.weixin.qq.com/s/jMBRgscKJVgjQZRZ3ZES_A
更多内容推荐
从零开始入门 K8s:Kubernetes 网络模型进阶
本文将基于之前介绍的基本网络模型,进行更深入的一些了解。首先简单回顾一下容器网络的历史沿革,剖析一下 Kubernetes 网络模型的由来;其次会剖析一个实际的实现(Flannel Hostgw),展现了数据包从容器到宿主机的变换过程;最后对于和网络息息相关的 Servcie 做了比较深入的机制和使用介绍,通过一个简单的例子说明了 Service 的工作原理。
IPv6 排障工具之 ping6 完整过程细节剖析
本文介绍什么事ICMPV6协议,以及一个完整的ping6过程究竟是怎样发生的。
为什么说 Kubernetes 只有 soft multi-tenancy?
NetworkPolicy只是宿主机上的一系列iptables规则。这跟传统IaaS里面的安全组,其实是类似的原理。
2018 年 11 月 14 日
滴普技术荟 - 云原生基座 OpenKube 开放容器实践( 七):flannel-udp 模式原理分析
本来上一篇文章应该是介绍flannel的udp模式的了,但因为其中的内容会涉及到linux虚拟网络设备tun的原理,所以先介绍一下tun设备,然后在这一篇才转入正题。
2021 年 2 月 20 日
360 网络自动化运维
当网络设备从数以百计快速发展到数以千计、万计时,当量变引发质变时,要采用什么样的模式才能先于业务发现网络问题和瓶颈呢?本文带来的就是360公司网络自动化运维的一些理念,希望这些设计理念可以帮到需要的小伙伴。
通往云网络世界的 9¾站台 -VLAN 和 VXLAN
VLAN是你理解云网络的门槛石,要想通往云网络世界这一扇大门一定得理解透彻。
12 基础篇 | TCP 收发包过程会受哪些配置项影响?
这个过程中涉及到很多的配置项,我们遇到的很多问题都是这些配置项跟业务场景不匹配导致的。
2020 年 9 月 15 日
案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
tcpdump 和 Wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器。
2019 年 2 月 18 日
360 奇云的架构演进之路
2018年3月10号,在IT趣学社技术沙龙第12期——《大话运维之弹性运维最佳实践》上,360奇云团队分享了《360奇云的架构演进之路》。
Kubernetes 的网络模型如何实现?这里有 4 种解决方案!
本文来自RancherLabs微信公众号
Kubernetes NetworkPolicy 工作原理浅析
Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的。
云计算时代携程的网络架构变迁
本文介绍云计算时代以来携程在私有云和公有云上的几代网络解决方案。
接收网络包(上):如何搞明白合作伙伴让我们做什么?
如果说网络包的发送是从应用层开始,层层调用,一直到网卡驱动程序的话,网络包的结束过程,就是一个反过来的过程。
2019 年 7 月 15 日
工欲善其事必先利其器:学会使用各种工具
今天我来介绍一些常见的网络诊断工具,用好它们,可以加深我们对网络编程的理解。
2019 年 8 月 19 日
深入浅出 Kubernetes 理论篇 (二):网络详解
简介:阿里云Kubernetes集群网络目前有两种方案,一种是flannel方案,另外一种是基于calico和弹性网卡eni的terway方案。
Kube-OVN:基于 OVN 的开源 Kubernetes 网络实践
近日,灵雀云发布了基于OVN的Kubernetes网络组件Kube-OVN,并正式将其在Github上开源。Kube-OVN提供了大量目前Kubernetes不具备的网络功能,并在原有基础上进行增强。
青云 SDN/NFV2.0 架构剖析
在ArchSummit北京2015大会上,来自青云的工程师陈海泉分享了《SDN/NFV 2.0架构剖析》的议题。对于青云来说,SDN/NFV2.0是一个新的突破。早在2013年,青云在第一代公有云产品中就上线了SDN技术。随着用户量越来越大,私有网络里面的 VM 数量超过一定的数量级的时候,性能问题逐渐成为瓶颈。在2015年下半年,青云经过重点研发,推出了SDN/NFV 2.0。
29 丨案例:如何应对因网络参数导致的 TPS呈锯齿状?
在今天的文章中,我仍然用一个之前项目中出现过的案例给你讲一讲性能分析的思路。
2020 年 2 月 26 日
深入浅出 OpenStack 安全组实现原理
本文对OpenStack安全组实现进行了深入细节的解析
GRE—用于网络走私的隧道
今天介绍网络中的另一位元老,走私鼻祖GRE。
推荐阅读
BigBrother:UCloud 全链路大规模网络连通性检测系统详解(上)
关于 Linux 网络,你必须知道这些(下)
2019 年 2 月 8 日
第 25 讲 | 软件定义网络:共享基础设施的小区物业管理办法
2018 年 7 月 13 日
带着问题了解 Openstack Neutron 安全组(上)
第 26 讲 | 云中的网络安全:虽然不是土豪,也需要基本安全和保障
2018 年 7 月 16 日
5 个解决 Docker 网络问题的项目
CentOS7 使用 Iptables 做网络转发
2020 年 5 月 11 日
电子书
大厂实战PPT下载
换一换 乐鸿辉 | 携程 高级研发经理
张俊林 | 新浪微博 机器学习团队 AI Lab 负责人
孙廷韬(龙悟) | 阿里云 高级技术专家
评论