FullNAT: 除了DR/NAT/TUNNEL之外IPVS下的新的包转发模式,解决了DR/NAT/TUNNEL中的一些缺点(如不能跨vlan或者跨vlan成本太高,服务搭建较复杂,不易运维等)。
Fullnat主要实现的功能:
1.数据包从外部进来的时候,目标ip更换为realserver ip,源ip更换为内网local ip;
2.数据包发送出去的时候,目标ip更换为client ip,源ip更换为vip;
Fullnat的转发模式:
Fullnat实现原理:
Fullnat虚拟服务的实现:
一 服务安装(为了解释说明,本文所有安装包和压缩包都放在了/mnt目录下):
1. 首先将作为VS的server1端的ram改成2048或者更大,否则内存不够会报错。
2. 准备安装包:
3. 安装rpm-build服务用来编译内核的源码包,安装kernel包:
这两步完成之后,会在/root目录下生成一个rpmbuild的目录,进入这个目录中的子目录SPECS,里面有一个kernel.spec文件:
4. 执行指令rpmbuild -bp kernel.spec编译这个内核文件,执行时会有许多依赖性的包,将这些包全部安装:
对于asciidoc和newt-devel两个安装包需要另外自行下载,yum源里没有:
5 安装asciidoc,alang-devel,newt-devel :
6. 安装之后重新编译内核文件:
这时会卡住,需要安装rng-tools来加快进度:yum install rng-tools -y,之后执行rngd -r /dev/urandom指令。
7. 打补丁:
准备Lvs-fullnat-synproxy.tar.gz包并解压将里面的lvs-2.6文件复制到指定目录,进入该指定目录执行56行指令打补丁。
8. 补丁完成之后直接make进行编译,编译过程比较久。
9. 编译完成之后,执行命令 make modules_install,然后make install
10.进入/boot/grub目录,编辑grub.conf文件,将文件中的default 1改为default 0,之后reboot重启。
11. yum remove ipvsadm删除原有的ipvsadm ,进入到/mnt/lvs-fullnat-synproxy/目录,将zxf lvs-tools.tar.gz安装包解压。
12. 进入/mnt/lvs-fullnat-synproxy/tools/keepalived目录,执行指令 ./configure --with-kernel-dir="/lib/modules/`uname -r`/build" 进行编译。如果出现popt的依赖性问题,yum install popt-devel 解决依赖性问题之后,重新执行编译指令./configure --with-kernel-dir="/lib/modules/`uname -r`/build"。没有报错的话,执行make之后make install
13. 进入/usr/local/sbin/lvs-fullnat-synproxy/tools/ipvsadm目录下,进行make和make install编译,这个过程中会安装ipvsadm。这样fullnat的环境就搭好了。ipvsadm -l会看到size=41944304即2的22次方:
二 fullnat负载均衡的实现
1. 在server1端(ip为172.25.17.1)新增一个网卡eth1,给eth1添加一个和eth0不在同一网段的ip地址:ip addr add 172.25.254.100 dev eth1
2. 在server2(ip为172.25.17.2)和server3(ip为172.25.17.3)端,设定网关为server1的ip:route add default gw 172.25.17.1 。之后开启server2和server3的http服务,作为RS。
3. 在server1端添加策略:
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 172.25.17.2 -b
ipvsadm -a -t 172.25.254.100:80 -r 172.25.17.3 -b
ipvsadm -P -t 172.25.254.100:80 -z 127.0.0.1:80
ipvsadm -G -t 172.25.254.100:80
4. 在真机端解析:curl 172.25.254.100
由于使用的是社区版本的fullnat,所以测试不出来。