lvs-dr:GATEWAY
Director只负责请求报文,响应报文不经过Director,直接由RS返回给Client。
lvs-dr的报文路线如上图,基本思路就是报文不会回送Director,第①种情况是VIP、DIP、RIP位于同一个网段,这样,网络可以共用一个,即使用同一个路由器和交换机;第②种情况VIP与DIP和RIP不在一个网段,响应报文会走单独的网络线路。
对第一种情况进行实操测试:地址分配表
这里主要问题是:当请求报文到来时,它请求的是VIP,在到达VIP所在网络时,需要知道VIP对应的V-MAC,但是因为在Director和RS上都配置了VIP,就会引起混乱,所以这里的关键是确定真正的Director对应的VIP的MAC,方法有三种,一是arp绑定,在请求报文到来的设备上的接口静态绑定Director的V-MAC;二是在RS上使用arptables过滤;三是在内核上设置内核参数:arp_ignore和arp_announce来实现。一二两种方式有一定的局限性,一般使用第三种。
关于arp_ignore和arp_announce,要理解这两个参数,需要明白arp的工作方式:
每新来一台机器,自己通告一下;后来的机器或是前面的机器没有收到,可以主动询问。
ARP协议的作用就是根据IP地址获取其对应的MAC地址。在以太网中,主机要发送一个数据报文,首先需要获取目标MAC地址(如果通信的目标主机在同一网段,那目标MAC地址就是目标主机的MAC地址,否则应该为网关的MAC地址或下一跳的MAC地址),而获取目标MAC地址的方法就是使用ARP协议发送ARP请求数据报文,ARP请求数据报文中会包含发送方的IP地址和MAC地址,并且包含想要获取MAC地址的目标IP地址,该ARP请求数据报文的数据链路层目标地址为广播地址,也就是说它是一个二层广播数据包(因为不知道谁拥有指定目标IP地址,所以只能使用广播方式发送)。在同一局域网的所有主机都将收到该ARP请求数据报文,但是只有拥有目标IP地址的主机才会发送ARP响应数据报文,该ARP响应数据报文包含发送方的IP地址和MAC地址(即对方想要知道的目标MAC地址),并且目标IP地址和MAC地址设置为对方的地址(即ARP请求数据包发送方的地址),并且该数据报文为单播数据报文(其数据链路层目标地址为对方的MAC地址)。
arp_announce参数是定义linux主机发送ARP请求数据报文时如何选择数据报文中使用的发送方IP地址(即Sender IP address)。在系统准备通过网卡发送一个IP数据包前,该IP数据包的源IP地址和目标IP地址通常是已经知道的,然后根据目的IP查询路由表确定发送数据报文的网卡,则发送的网卡也已经确定,那数据链路层的源MAC地址当然也确定了,发送ARP请求数据报文时需要包含发送方IP地址,该IP地址应该是什么呢?大家可能想当然的以为就是要发送的IP数据报文的源IP地址,其实这个是不一定的,尤其是主机有多个网络接口和IP地址时,而arp_announce正是控制该发送方IP地址的选择条件的。arp_announce参数的取值分别是0、1、2,这些取值的意义如下:
0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用要发送数据报文的源IP。
1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
arp_announce - INTEGER
Define different restriction levels for announcing the local source IP address from IP packets in ARP requests sent on interface:
0 - (default) Use any local address, configured on any interface
1 - Try to avoid local addresses that are not in the target's subnet for this interface.
This mode is useful when target hosts reachable via this interface require the source IP address in ARP requests to be part of their logical network configured on the receiving interface. When we generate the request we will check all our subnets tha