实现fullnat模式的环境构造——编译内核

#########实现FULLNAT模式##########

1.内核编译 (FULLNAT模式要重编LVS机器内核)
[[email protected] ~]# free -m            ##查看下本机空间,尽量给到至少2G ,因为编译内核是会读大量文件,同时往硬盘里写入信息,所以要有足够的空间,否则编译的速度会非常慢
             total       used       free     shared    buffers     cached
Mem:          1877        127       1749          0         13         35
-/+ buffers/cache:         78       1798
Swap:          991          0        991
需要准备的安装包:
kernel-2.6.32-220.23.1.el6.src.rpm  asciidoc-8.4.5-4.1.el6.noarch.rpm  newt-devel-0.52.11-3.el6.x86_64.rpm  slang-devel-2.2.1-1.el6.x86_64.rpm Lvs-fullnat-synproxy.tar.gz

[[email protected] ~]# rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm         ##解压rpm包
[[email protected] ~]# cd rpmbuild/
[[email protected] rpmbuild]# cd SPECS/
[[email protected] SPECS]# ls                        ##解压成功后查看下当前目录必须有这个文件
kernel.spec
[[email protected] SPECS]# yum install -y rpm-build                ##安装这个命令后面编译要用到
[[email protected] SPECS]# cd ..
[[email protected] rpmbuild]# ls
SOURCES  SPECS
[[email protected] rpmbuild]# cd SPECS/
[[email protected] SPECS]# rpmbuild -bp kernel.spec                 ##解开源码
error: Failed build dependencies:
    gcc >= 3.4.2 is needed by kernel-2.6.32-220.23.1.el6.x86_64
    redhat-rpm-config is needed by kernel-2.6.32-220.23.1.el6.x86_64
    patchutils is needed by kernel-2.6.32-220.23.1.el6.x86_64
    xmlto is needed by kernel-2.6.32-220.23.1.el6.x86_64
    asciidoc is needed by kernel-2.6.32-220.23.1.el6.x86_64
    elfutils-libelf-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
    zlib-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
    binutils-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
    newt-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
    python-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
    perl(ExtUtils::Embed) is needed by kernel-2.6.32-220.23.1.el6.x86_64

    hmaccalc is needed by kernel-2.6.32-220.23.1.el6.x86_64

实现fullnat模式的环境构造——编译内核


[[email protected] SPECS]# yum  install redhat-rpm-config patchutils xmlto asciidoc elfutils-libelf-devel binutils-devel newt-devel python-devel perl-ExtUtils-Embed hmaccalc -y         ##根据提示安装需要的包,解决依赖性
[[email protected] SPECS]# rpmbuild -bp kernel.spec error: Failed build dependencies:
    gcc >= 3.4.2 is needed by kernel-2.6.32-220.23.1.el6.x86_64
    asciidoc is needed by kernel-2.6.32-220.23.1.el6.x86_64
    newt-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64
[[email protected] SPECS]# yum install -y gcc asciidoc newt-devel        ##根据提示安装需要的包
[[email protected] SPECS]# rpmbuild -bp kernel.spec
error: Failed build dependencies:
    asciidoc is needed by kernel-2.6.32-220.23.1.el6.x86_64
    newt-devel is needed by kernel-2.6.32-220.23.1.el6.x86_64  
[[email protected] ~]# yum install newt-devel-0.52.11-3.el6.x86_64.rpm asciidoc-8.4.5-4.1.el6.noarch.rpm  slang-devel-2.2.1-1.el6.x86_64.rpm  -y                    ##这三个包之间有依赖性
 
[[email protected] SPECS]# rpmbuild -bp kernel.spec                 ##
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.8TCaQ7
+ umask 022
+ cd /root/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ patch_command='patch -p1 -F1 -s'
+ '[' '!' -d kernel-2.6.32-220.23.1.el6/vanilla-2.6.32-220.23.1.el6/ ']'
+ rm -f pax_global_header
+ cd /root/rpmbuild/BUILD
+ rm -rf kernel-2.6.32-220.23.1.el6
+ /bin/mkdir -p kernel-2.6.32-220.23.1.el6
+ cd kernel-2.6.32-220.23.1.el6
+ /bin/tar -xf -
+ /usr/bin/bzip2 -dc /root/rpmbuild/SOURCES/linux-2.6.32-220.23.1.el6.tar.bz2

+ gpg --homedir . --batch --gen-key /root/rpmbuild/SOURCES/genkey
gpg: WARNING: unsafe permissions on homedir `.'
gpg: keyring `./secring.gpg' created

gpg: keyring `./pubring.gpg' created                    ##在这里会停下,需要在开一个终端,产生随机数才会继续



[[email protected]~]# yum provides */rngd                    ##yum provides用来查询这个命令有哪个包提供
Loaded plugins: product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
HighAvailability/filelists_db                         |  38 kB     00:00     
LoadBalancer/filelists_db                             | 3.9 kB     00:00     
ResilientStorage/filelists_db                         |  39 kB     00:00     
ScalableFileSystem/filelists_db                       | 3.0 kB     00:00     
rhel-source/filelists_db                              | 3.8 MB     00:00     
rng-tools-2-13.el6_2.x86_64 : Random number generator related utilities
Repo        : rhel-source
Matched from:
Filename    : /etc/sysconfig/rngd
Filename    : /sbin/rngd
Filename    : /etc/rc.d/init.d/rngd

[[email protected] ~]# yum install -y rng-tools-2-13.el6_2.x86_64

[[email protected] ~]# rngd -r /dev/urandom                    ##用这个命令产生随机数

实现fullnat模式的环境构造——编译内核

[[email protected] ~]# tar zxf Lvs-fullnat-synproxy.tar.gz             ##
[[email protected] ~]# cd lvs-fullnat-synproxy/
[[email protected] lvs-fullnat-synproxy]# ls
lvs-2.6.32-220.23.1.el6.patch  README
lvs-tools.tar.gz               toa-2.6.32-220.23.1.el6.patch
[[email protected] lvs-fullnat-synproxy]# cp lvs-2.6.32-220.23.1.el6.patch
[[email protected] lvs-fullnat-synproxy]# cp lvs-2.6.32-220.23.1.el6.patch ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
[[email protected] lvs-fullnat-synproxy]# cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6/linux-2.6.32-220.23.1.el6.x86_64/
[[email protected] linux-2.6.32-220.23.1.el6.x86_64]# patch -p1 < lvs-2.6.32-220.23.1.el6.patch ##打补丁
[[email protected] linux-2.6.32-220.23.1.el6.x86_64]# vim Makefile        ##扩展版本,写入你需要编译的版本
  4 EXTRAVERSION = -220.23.1.el6

[[email protected] linux-2.6.32-220.23.1.el6.x86_64]# make            ##编译
[[email protected] linux-2.6.32-220.23.1.el6.x86_64]# make modules_install    ##导入安装模块

[[email protected]_64]# make install        ##安装的是引导文件,在/boot目录下就有你所编译的内核文件vmlinuz-2.6.32-220.23.1.el6

实现fullnat模式的环境构造——编译内核


[[email protected] ~]# vim /boot/grub/grub.conf         
##修改内核启动参数,因为你所编好的内核文件就加在原有版本的上面,因此default的要改成0,开机时才会进入你所编译的内核版本
default=0                                ##改成0才会在进入系统时访问你所编译的版本
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.32-220.23.1.el6)        ##你所编译的版本####
        root (hd0,0)
        kernel /vmlinuz-2.6.32-220.23.1.el6 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-220.23.1.el6.img
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)            ##原有的系统内核版本####
        root (hd0,0)
        kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-431.el6.x86_64.img
[[email protected] ~]# uname -r                        ##重启后就是编译的版本
2.6.32-220.23.1.el6

编译内核重启之后,开始安装LVS TOOLS(编译完内核先重启机器加载新的内核,否则下面模块无法安装)

2.编译keepalived

[[email protected] ~]# cd lvs-fullnat-synproxy/
[[email protected] lvs-fullnat-synproxy]# ls
lvs-2.6.32-220.23.1.el6.patch  README
lvs-tools.tar.gz               toa-2.6.32-220.23.1.el6.patch
[[email protected] lvs-fullnat-synproxy]# tar zxf lvs-tools.tar.gz
[[email protected] lvs-fullnat-synproxy]# cd tools/
[[email protected] tools]# ls
ipvsadm  keepalived  quagga  rpm
[[email protected] tools]# cd /lib/modules/
[[email protected] modules]# ls
2.6.32-220.23.1.el6  2.6.32-431.el6.x86_64
[[email protected] ~]# cd lvs-fullnat-synproxy/tools/keepalived/
[[email protected] keepalived]# ls
AUTHOR     configure     doc         keepalived          README
bin        configure.in  genhash     keepalived.spec.in  TODO
build      CONTRIBUTORS  INSTALL     lib                 VERSION
ChangeLog  COPYING       install-sh  Makefile.in
[[email protected] keepalived]# yum install -y popt-devel openssl-devel
[[email protected] keepalived]# ./configure  --with-kernel-dir="/lib/modules/`uname -r`/build"

[[email protected] keepalived]# make && make install

实现fullnat模式的环境构造——编译内核

[[email protected] ipvsadm]# which ipvsadm
/sbin/ipvsadm

3.编译ipvsadm
[[email protected] ~]# cd lvs-fullnat-synproxy/tools/ipvsadm/
[[email protected] ipvsadm]# make

[[email protected] ipvsadm]# make install

实现fullnat模式的环境构造——编译内核

[[email protected] ipvsadm]# /etc/init.d/ipvsadm status
[[email protected] ipvsadm]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4194304)    
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn


  --ipip         -i                   ipip encapsulation (tunneling)
  --fullnat      -b                   fullnat mode
  --masquerading -m                   masquerading (NAT)

实现fullnat模式的环境构造——编译内核


fullnat环境配置完成