模拟环境:
操作系统版本:Centos6.9 内核:2.6.32-696.el6.x86_64

一、修改影响fullnat的参数以及关闭对应服务

关闭selinux和iptables

getenforce

vi /etc/sysconfig/selinux 

SELINUX=disabled  
关闭防火墙
service iptables status
service iptables stop
chkconfig iptables off

重启服务器 
reboot

二、安装编译内核所需要的依赖包

yum install -y xmlto gcc* rpm-build patchutils elfutils-libelf-devel  zlib-devel perl-ExtUtils-Embed.x86_64 lrzsz rng-tools openssl-devel popt-devel hmaccalc python-devel redhat-rpm-config binutils-devel libnl* libporpt* popt-static

查看是否存在以下包

rpm -qa|grep asciidoc
rpm -qa|grep slang-devel
rpm -qa|grep newt-devel

若没有则需要下载对应rpm包进行安装

rpm -ivh asciidoc-8.4.5-4.1.el6.noarch.rpm 或 yum -y install asciidoc
rpm -ivh slang-devel-2.2.1-1.el6.x86_64.rpm 或者 yum -y install slang-devel
rpm -ivh newt-devel-0.52.11-3.el6.x86_64.rpm 或者 yum -y install newt-devel

三、系统调优
修改/etc/sysctl.conf添加

允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 500000

开启路由转发功能
net.ipv4.ip_forward = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

修改文件描述符
fs.nr_open = 5242880
fs.file-max = 4194304

使配置生效

sysctl -p

调整句柄数
修改/etc/security/limits.d/90-nproc.conf 添加

*   soft    nofile  655350      #表示任何一个用户可以打开的最大的文件描述符数量
*   hard    nofile  655350
*   soft    nproc   655350      #表示任何一个用户可以打开的最大的进程数
*   hard    nproc   655350

四、下载Lvs-fullnat包,并编译安装
下载lvs-fullnat包
github.com/alibaba/LVS 版本:V2

unzip LVS-lvs_v2.zip

mv LVS-lvs_v2 /opt/LVS_FULLNAT

ln -sv /opt/LVS_FULLNAT/kernel/ /usr/src/linux

进入 kernel 目录:
cd /opt/LVS_FULLNAT/kernel 

修改 Makefile 中以下字段值,把内核的名称做下标记
EXTRAVERSION = .FNAT.shanks.e27.x86_64

编译模块,根据cpu数量调整-J参数,持续约20分钟
make -j4

安装模块
make modules_install

安装内核及配置文件等
make install

修改启动项

/boot/grub/grub.con

修改default 为0

重启系统

[root@localhost kernel]# uname -a
Linux localhost.localdomain 2.6.32.FNAT.shanks.e27.x86_64 #1 SMP Thu Sep 14 10:30:42 CST 2023 x86_64 x86_64 x86_64 GNU/Linux

加载ip_vs 模块

lsmod |grep ip_vs 
ip_vs    35009    0 

如果没有则执行命令

modprobe ip_vs

支持UDP

echo "0" > /proc/sys/net/ipv4/vs/defence_udp_drop

五、编译安装ipvsadm

进入编译内核目录

cd /opt/LVS_FULLNAT/tools/ipvsadm

执行编译

make && make install

六、查看ipvsadm是否支持fullnat

执行以下命令,若存在相应内容则支持fullnat

ipvsadm --help | grep fullnat


关闭centos6的反向路由检测

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter 
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter 
echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter 
echo 0 > /proc/sys/net/ipv4/conf/eth3/rp_filter 
echo 0 > /proc/sys/net/ipv4/conf/eth4/rp_filter

七、配置ipvsadm

[root@localhost kernel]# ipvsadm -C    #清理原有策略
[root@localhost kernel]# ipvsadm -A -t 192.168.40.26:80 -s wrr 
[root@localhost kernel]# ipvsadm -a -t 192.168.40.26:80 -r 192.168.0.22:22 -b -w 2  # -b表示fulnat
[root@localhost kernel]# ipvsadm -a -t 192.168.40.26:80 -r 192.168.1.22:22 -b -w 2
[root@localhost kernel]# ipvsadm -a -t 192.168.40.26:80 -r 10.12.254.139:22 -b -w 2
[root@localhost kernel]# ipvsadm -P -t 192.168.40.26:80 -z 192.168.1.206:80
[root@localhost kernel]# ipvsadm -ln  #查看策略
IP Virtual Server version 1.2.1 (size=4194304)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.40.26:80 wrr
  -> 192.168.0.22:22              FullNat 2      0          0         
  -> 192.168.1.22:22              FullNat 2      0          0         
  -> 10.12.254.139:22             FullNat 2      0          0    

八、进行测试
首先通过firewalld关闭后端三台服务器对192.168.40.0网段的流量进行限制

firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address="192.168.40.0/24" drop'

使用本地PC通过ssh 连接到vip 192.168.40.26:80

最后修改:2023 年 09 月 15 日
如果觉得我的文章对你有用,请随意赞赏