在基于虚拟化的云系统中,网络虚拟化是不可或缺的关键部分。虚拟化的网络可以自由的在本地进行基于单机的网络配置或者借助一些互联技术(underlay、overlay或者点对点技术)在虚拟网络内部空间实现跨节点和数据中心的网络互联,但是如果虚拟网络内部的服务要对外进行暴露,就不得不借助地址转换或者端口转换等数据包修改技术。而在现有的container管理框架中,iptables更是承担了服务暴露和服务后端负载均衡等功能,是诸如kubernetes、Openshift等平台上很重要的组成模块。
转载自https://blog.csdn.net/cloudvtech
1.iptables的chain、table和rule
iptables基本概念包括五个链、四个表和若干规则。链由一些列规则组成、表则由一系列链组成。
五个链分别是PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
四个表分别是filter、nat、mangle、raw
4个表的优先级由高到低的顺序为:raw > mangle > nat > filter
2. 四个表的功能特点
3. 五个链的功能特点
4. 链、表、路由和连接跟踪的组合关系
转载自https://blog.csdn.net/cloudvtech
很多iptables的功能需要借助connection tracking实现,所以当数据包经过iptables在raw表处理之后mangle表处理之前,会进行connection tracking处理,从iptables的connection tracking机制可以得知当前数据包所对应的连接的状态:
/proc/net/ip_conntrack里面保存了所有被跟踪的连接,单个纪录如下:
tcp 4 202713 ESTABLISHED src=192.168.166.103 dst=192.168.166.101 sport=3377 dport=11232 packets=22 bytes=17720 src=192.168.166.101 dst=192.168.166.103 sport=11232 dport=22 packets=92 bytes=4490 [ASSURED] mark=0 secmark=0 use=1
可以通过ip_conntrack_max和ip_conntrack timeout来调整系统connection tracking的能力:
net.ipv4.ip_conntrack_max =
net.ipv4.netfilter.ip_conntrack_max =
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established =
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait =
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait =
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait =
可以在raw表里面设置-j NOTRACK跳过其它表和connection tracking处理,比如:
iptables -t raw -A PREROUTING -d A.B.C.D -p tcp --dport 80 -j NOTRACK
转载自https://blog.csd net/cloudvtech1.进入的数据包
在数据包由网卡进入协议栈之后,会依次经由raw、connectiong tracking、mangle、nat三个表的PREROUTING链进行处理,并进行路由选择。路由结果如果是给本机的,则经由mangle、filter两个表的INPUT链处理之后发给上层应用程序;如果是要转发给其它主机的,则会经过mangle、filter两个表的FORWAR链处理之后,再经由mangel、nat表的POSTROUTING链处理之后由网卡对外发送
2.出去的数据包
数据包由上层应用程序进入协议栈之后现进行路由选择,然后经由raw、connectiong tracking、mangle、nat、filter表的OUTPUT链的处理,再经由mangel、nat表的POSTROUTING链处理之后由网卡对外发
3.更详细的iptables包处理流程请参看下图
https://en.wikipedia.org/wiki/File:Netfilter-packet-flow.svg
转载自https://blog.csdn.net/cloudvtech