LVS-NAT配置安装

来源:互联网 发布:python 文本分类 编辑:程序博客网 时间:2024/05/17 08:42

准备

1. 确认lvs内核组件已经安装

一般来说,常见的linux系统都已经安装了(用的几个操作系统中,只有suse不包含)。

[root@localhost network-scripts]# modprobe -l |grep ip_vskernel/net/netfilter/ipvs/ip_vs.kokernel/net/netfilter/ipvs/ip_vs_rr.kokernel/net/netfilter/ipvs/ip_vs_wrr.kokernel/net/netfilter/ipvs/ip_vs_lc.kokernel/net/netfilter/ipvs/ip_vs_wlc.kokernel/net/netfilter/ipvs/ip_vs_lblc.kokernel/net/netfilter/ipvs/ip_vs_lblcr.kokernel/net/netfilter/ipvs/ip_vs_dh.kokernel/net/netfilter/ipvs/ip_vs_sh.kokernel/net/netfilter/ipvs/ip_vs_sed.kokernel/net/netfilter/ipvs/ip_vs_nq.kokernel/net/netfilter/ipvs/ip_vs_ftp.ko[root@localhost network-scripts]#

2. 安装ipvsadm

建议使用yum来安装。当然用ipvsadm的源码包安装也行。
安装完成后,可以执行ipvsadm试一下,看是否安装成功

[root@localhost package]# ipvsadm IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

lvs搭建

1. 组网规划

这里写图片描述
其中192.168.100.x 为client所在的IP段(记为外网IP)。 192.168.0.x为real server所在的IP段(记为内网IP)
并且从192.168.0.x到192.168.100.x不存在路由。说简单一点,就是无法ping通

2. NAT配置

LVS 节点的配置

1)Tcp配置:

echo 1 > /proc/sys/net/ipv4/ip_forward

2) Ipvsadm配置

[root@linux128 ~]# ipvsadm -A  -t 192.168.100.132:18471 -s rr[root@linux128 ~]#ipvsadm -a  -t 192.168.100.132:18471 -r 192.168.0.220:18471 -m[root@linux128 ~]#ipvsadm -a  -t 192.168.100.132:18471 -r 192.168.0.221:18471 -m

Real Server的配置

修改默认网关
[root@hadoop221 ~]# route add default gw 192.168.0.142 dev eth0
[root@hadoop221 ~]# route

分析

因为LVS会修改消息的mac地址,因此我们首先记录一下各个节点IP的mac地址

IP地址 MAC地址 192.168.100.130 00:0C:29:A8:47:D9 192.168.100.132 00:0C:29:79:62:EA 192.168.0.142 00:0C:29:79:62:E0 192.168.0.220 00:0C:29:56:91:D2

以SYN消息分析它的过程,其消息流程如下:
这里写图片描述

1) 首先客户端192.168.100.130向LVS的外网IP :192.168.100.132发送一个SYN消息
这里写图片描述

2) LVS收到这个SYN消息后,会将它转发给内网的220
这里写图片描述
与客户端发送消息相比。有几个明显的变化。
- Destination的ip地址变成了192.168.0.220
- Src与destination的mac地址也变化了。 查一下上面的ip与mac的对照表,可以看出来,source 的mac地址对应提192.168.0.142,而destination mac地址对应的ip为192.168.0.220
从这里可以看出来。LVS在这里将destination的ip与mac地址都修改了。

3) 因为LVS将syn消息的destination的ip与mac地址都做了修改。因此real server 192.168.0.220此时收到SYN消息都被修改后的消息

4)当real server收到SYN消息后,会回一个SYN ACK的消息。此时消息能够正常回到LVS的保证就是我们之前设置的route add default gw 192.168.0.142 dev eth0
我们查看一下220的route表:

[root@hadoop220 ~]# routeKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref    Use Iface192.168.0.0     *               255.255.255.0   U     1      0        0 eth0default         192.168.0.142   0.0.0.0         UG    0      0        0 eth0

这里说明一下,因为syn消息的source ip没有被修改,假如此时从192.168.0.220到192.168.100.x存在路由,那么syn ack消息将不会走default网关,那会导致client无法正常收到消息。因此一定要保证192.168.0.220到192.168.100.x无法ping通

5) LVS收到消息后,会将之前修改的mac 与IP地址修改回去。 对比一下LVS收到的ACK消息与client收到ACK消息:
这里写图片描述

0 0
原创粉丝点击