LVS 负载均衡器理论基础及抓包分析 (3)

上面我们在LB节点做地址伪装,并且把经过iptables的转发日志记录下来,这里需要注意,只能在mangle表才能记录,在nat表时,无法记录转发日志,再次测试,发现依然不通;

[root@master01 ~]# curl -m 15 --retry 1 -sSL 100.222.111.1:8000 curl: (28) Connection timed out after 15001 milliseconds [root@master01 ~]#

哪问题出在什么地方呢?由于PROC文件系统的/proc/sys/net/ipv4/vs/conntrack可控制IPVS是否对其连接启用Netfilter系统的conntrack功能,默认情况下是关闭状态,这里需要打开,如下。

[root@master02 ~]# sysctl net.ipv4.vs.conntrack=1 net.ipv4.vs.conntrack = 1 [root@master02 ~]#

下面这个图是是否开启conntrack功能的iptables日志对比,上面只是SYN,根本无法完成三次握手,缺少链路追踪,这里需要再开启conntrack功能。

在这里插入图片描述


再次测试,成功。

[root@master01 ~]# curl -m 15 --retry 1 -sSL 100.222.111.1:8000 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> 。。。。。 <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> [root@master01 ~]#

RS 抓包

在这里插入图片描述


LB抓包

在这里插入图片描述


到这里nat实验就完成了,可以看下数据包,源IP已经变成了LB的IP。

NAT 特性总结

RS 的 RIP 与 DS 的 DIP 必须使用相同网段的私网地址,并且 RS 的网关要指向 DS 的 DIP;

客户端的请求和响应报文都要经由 DS 转发,在大并发、大流量的场景中,DS有可能会成为系统瓶颈;

支持端口映射;

DR 模式 报文请求过程图

在这里插入图片描述

报文请求过程分析

当用户请求到达 DS 时,请求报文会先经过内核空间中的 PREROUTING 链,此时源IP为CIP,目的 IP 为 VIP;

在 PREROUTING 规则链上进行检查目的IP是否为本机,如果是的话将数据包送至 INPUT 链;

数据包到达INPUT链后,IPVS 会比对数据包请求的服务是否为集群服务,若是,将请求报文中的源 MAC 地址修改为 DIP 的 MAC 地址,将目标 MAC 地址修改 RIP 的 MAC 地址(这里需要IPVS根据策略算法选择一台合适的 RS 的 MAC 地址),然后再将数据包发至 POSTROUTING 链, 此时的源 IP 和目标 IP 均未修改,仅修改了源和目的的MAC地址(DR 模式要求 DS 与 RS 也必须是同一个物理网络中,可公、可私);

POSTROUTING链检查目标 MAC 地址为 哪一个 RIP 的 MAC 地址,选择后,再把数据包将会发给 RS;

RS 发现请求报文的 MAC 地址是自己的 MAC 地址,就接收此报文并处理,将响应报文通过 lo 接口传送给 eth0 网卡然后向外发出,此时的源IP地址为VIP,目标IP为CIP;

响应报文最终到客户端;

DR 实验

在这里插入图片描述


从DR模式原理可知,调度器只是修改请求报文的目的mac(二层转发),这就要求调度器和RS需要在同一个网段,并且也无需要开启ip_forward,所以需要分配一个同网段的IP 做为VIP;

[root@master02 ~]# ping -c 1 1.65.15.145 PING 1.65.15.145 (1.65.15.145) 56(84) bytes of data. From 1.65.15.141 icmp_seq=1 Destination Host Unreachable --- 1.65.15.145 ping statistics --- 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms [root@master02 ~]#

添加 VIP 网卡信息

[root@master02 ~]# ifconfig ens32:0 1.65.15.145/24 up [root@master02 ~]#

创建 service 负载均衡

[root@master02 ~]# ipvsadm -A -t 1.65.15.145:80 -s rr [root@master02 ~]#

把 RS 添加到负载均衡

[root@master02 ~]# ipvsadm -a -t 1.65.15.145:80 -r 1.65.15.143:80 -g [root@master02 ~]# ipvsadm -a -t 1.65.15.145:80 -r 1.65.15.144:80 -g [root@master02 ~]#

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyysxd.html