虚拟机从网卡路由问题

举报
Harvey_Zhao 发表于 2018/09/04 00:34:35 2018/09/04
【摘要】 虚拟机从网卡路由问题 近期有很多同事在使用虚拟机双网卡特性的时候,出现了一些问题。我趁此机会写一篇从网卡的短文,希望对大家有所帮助。 大家碰到的问题,可以归结为几类:1、 已经添加了从网卡,为什么流量不走从网卡?2、 已经配置了从网卡的IP,为什么报文不带着从网卡的IP出去?3、 从网卡应该如何使用? 可能这些问题对于做网络的同事来说,比较简单,但是对于写代码出身的同事来说,需要先了解...

虚拟机从网卡路由问题

 

近期有很多同事在使用虚拟机双网卡特性的时候,出现了一些问题。我趁此机会写一篇从网卡的短文,希望对大家有所帮助。

 

大家碰到的问题,可以归结为几类:

1、  已经添加了从网卡,为什么流量不走从网卡?

2、  已经配置了从网卡的IP,为什么报文不带着从网卡的IP出去?

3、  从网卡应该如何使用?

 

可能这些问题对于做网络的同事来说,比较简单,但是对于写代码出身的同事来说,需要先了解一下路由交换的概念。

 

路由交换是什么?一个数据包,网络如何转发它?主要是根据报文头的目的mac地址和目的IP地址进行匹配,符合匹配条件的,就做Forwardaction——修改目的mac从接口发出去。服务器的协议栈其实也是类似的原理。

image.png

OS1想要发送数据包,数据包走到OS1的协议栈,此时协议栈会做一个判断:

Ø  如果是发送给同网段的IP地址,则直接二层广播获取对方的mac,封装报文后发出

Ø  如果是发给不同网段的IP地址,则查询路由表,确定发文的下一跳IP(俗称网关),然后通过二层广播获取下一跳IPmac地址,封装报文后发出

 

我们再回到双网卡的问题上,当主机有双网卡时,便有2个不同网段的IP地址。如上文所述,报文从OS发出,先判断是不是同网段——2个地址都会判断。如果发现跟某一个网卡的IP地址是同网段,则从该网卡出,带着该网卡的IP地址。

如下图,如果OS2要发送报文给192.168.1.11,经过匹配发现跟自己某一个网卡的IP地址192.168.1.10同网段,便会带着192.168.1.10IP地址,封装192.168.1.11mac将报文发出去。

image.png

所以,虚拟机添加了从网卡以后,哪怕没做任何配置,去访问跟从网卡同网段的IP地址也会从从网卡出去。

 

但是访问不同网段会如何?

如前面所述,会查询路由表,以确定下一跳。而虚拟机的路由表,在最开始系统会默认配置一条默认路由,指向主网卡的网关。

即,如果只是配置了从网卡,但是没有改变路由的情况下,跨网段的所有流量,依然全部都往主网卡发送。从主网卡主动出去的报文,都会带着主网卡的IP地址。这也是为什么加了从网卡以后,流量都不走的缘故。

image.png

 

那要如何才能使VM的流量从从网卡出去呢?

如图所示,假设VM的主网卡IP地址为192.168.1.10,从网卡为192.168.2.10,要想所有的流量从从网卡出去,则要将默认的网关改为192.168.2.1。如果要指定某一个网段从从网卡出去,则将该网段的下一跳路由改为192.168.2.1即可。不同的OS命令不一样,大家百度即可,我就不重复贴命令行了。

 

虚拟机主动发出报文,从哪一个网口出去,就带着这个网口的IP地址。

如果是回包,回包回程依然遵守前面路由的规则,但正常情况下回包报文的IP地址保持原访问的IP不变。即如果访问192.168.1.10的报文,哪怕从从网卡出去,报文的源地址依然保持192.168.1.10

 

一般从网卡要怎么用?

个人建议:

1、  对于安全要求比较高的应用,主网卡绑定EIP对外提供服务,从网卡跟后端虚拟机通讯

2、  对于有映射或者代理需求的业务,将虚拟机都配置从网卡,某网段路由指向某台虚拟机从网卡,流量流到该虚拟机做代理,从主网卡转出去

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。