以前对一个主机内几张网卡上出现同网段地址挺不以为然,因为在默认状态下,Linux
会出现路由的二义性,从而影响ping
过程,虽然抓包上arp
过程是对的,但就是在三层路由时出现了问题!
后来,经过交流,发现由于某些产品形态的限制,以及可能需要在已有网络环境上部署,不一定能够满足在一台主机上用不同网段进行隔离的简单部署模型要求,所以,一台主机不同网卡出现同网段的配置,几乎是不可避免的。
但如何解决呢?
以笔者现在掌握的知识,进行会汇总,可以有如下技术可以考虑:
种类 | 粒度 | 侵入性 | 说明 |
---|---|---|---|
命名空间 | 大 | 不需要感知 | 牛刀杀鸡命名空间可以隔离更多的资源,粒度比较大 |
VRF | 中 | 需要感知VRF | 虚拟路由功能,但不建议使用,对于同网段通信并不友好,即使是ping 流程 |
IP rule | 中 | 不需要感知 | 策略路由 |
iptables using set-mark | 中 | 不需要感知 | 数据包过滤规则加策略路由 |
ip rule
的策略路由iptables using set-mark + ip rule usging fwmark
RAW socket with IP_HDRINCL 由于
Linux OS
平台限制,可能会绕过纯粹的ip rule策略路由
设置结合
iptables set-mark
功能修改数据包标记,并辅助策略路由处理,就可以将数据包隔离开
利用策略路由构造了一个隔离网络环境,而且对于主体程序是非侵入性的,对于复杂的同网段通信非常优必要