KOPS - fullnat
type: channel
link: https://www.kops.cc/tag/fullnat/
items: LVS FULLNAT 实战

LVS FULLNAT 实战
type: item
date: 2018-12-29T07:46:33+00:00
description: 前面我们已经学习了 LVS 的 3 种转发模式DR 模式NAT 模式TUN 模式我们来回顾一下这几种模型的劣势DR 模式LVS - RS 间必须在同一个 VLAN/网段 内RS 绑定 VIP，风险大RS 都要公网 IPNAT 模式RS 的 默认网关必须要指向 LVSLVS - RS 间必须在同一个 VLAN/网段 内TUN 模式配置隧道模块 （IPIP 等），配置复杂RS 绑定 VIP，风险大当集群规模较小时，使用 NAT、DR 模式都是没有问题的，当集群内有几十台以上时，那么这些服务器通常都不在同一个 VLAN/网段 内了。这时，必须再研发出一种能支持跨 VLAN/网段 通信的模式，FULLNAT 模式就是为了解决这个问题而生的。1. FULLNAT 模型在 FULLNAT 模式中，LVS 会同时修改源 IP 和目标 IP。与 NAT 模式不同之处：NAT 模式目标 IP -> RIP源 IP -> 客户端 IPFULLNAT 模式目标 IP -> RIP源 IP -> LVS IP这一修改，使得 RS 和 LVS 可以不在同一个 VLAN/网段 下。同时，也带来了一个问题，源 IP 改成了 LVS 的 IP了，RS 怎么获取客户端的真实 IP 呢？为了使 RS 能获得客户端的真实 IP，LVS 团队采用了修改内核网络栈的实现，扩展了网络栈，加了一个 TOA 字段。把客户端真实 IP 写到了 TOA 字段中，这样，RS 就能取得客户端的真实 IP 了。这样，意味着每台 RS 都需要安装打了 TOA 补丁的内核。并且，也要配套使用 FULLNAT 专用的 keepalived 和 ipvsadm。2. 编译2.1 编译 LVS 内核 - 打 FULLNAT 补丁# 1. 下载内核源码，注意，必须是 2.6.32-220.23.1 这个版本的 wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/kernel-2.6.32-220.23.1.el6.src.rpm # 2. 安装内核源码 rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm cd ~/rpmbuild/SPECS rpmbuild -bp kernel.spec # 3. 打 LVS 补丁 wget http://kb.linuxvirtualserver.org/images/a/a5/Lvs-fullnat-synproxy.tar.gz tar xf Lvs-fullnat-synproxy.tar.gz -C /usr/local/src cp /usr/local/src/lvs-fullnat-synproxy/lvs-2.6.32-220.23.1.el6.patch ~/rpmbuid/BUILD patch -p1<lvs-2.6.32-220.23.1.el6.patch # 4. 编译安装 make -j8 make modules_install make install2.2 编译 RS 内核 - 打 TOA 补丁# 1. 下载内核源码，注意，必须是 2.6.32-220.23.1 这个版本的 wget ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/kernel-2.6.32-220.23.1.el6.src.rpm # 2. 安装内核源码 rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm cd ~/rpmbuild/SPECS rpmbuild -bp kernel.spec # 3. 打 TOA 补丁 wget http://kb.linuxvirtualserver.org/images/a/a5/Lvs-fullnat-synproxy.tar.gz tar xf Lvs-fullnat-synproxy.tar.gz -C /usr/local/src cp /usr/local/src/lvs-fullnat-synproxy/toa-2.6.32-220.23.1.el6.patch ~/rpmbuid/BUILD patch -p1<lvs-2.6.32-220.23.1.el6.patch # 4. 编译安装 make -j8 make modules_install make install2.3 编译 keepalivedcd /usr/local/src/lvs-fullnat-synproxy tar xf lvs-tools.tar.gz cd tools…