上一篇介绍docker的组网,其中用到了SNAT和DNAT,收集了网上比较多的资料,温故并把整个流程理了一遍。
1、主机收到报文后,检测该报文的目的MAC地址
1.1 目标MAC地址为组播和广播地址,继续执行;
1.2 目标MAC地址等于主机的MAC地址,继续执行;
1.3 目标MAC地址不等于主机的MAC地址
1.3.1 如果开启ip_forward,继续执行;
1.3.2 如果未开启ip_forward,丢弃该报文;
2、经过eb-brouting(处理广播或组播报文)
3、经过eb-prerouting(可以修改报文的目标MAC)
4、根据目标MAC地址,决定报文往哪走
4.1 目标MAC地址等于主机的MAC地址,进入eb-input,进一步进入到网络层处理;
4.2 目标MAC地址不等于主机的MAC地址,进入eb-forward;
总结而言:
prerouting有修改目标地址的能力(目标MAC和目标IP)