LVS-NAT模式的实现
nat模式本质是将多目标IP的DNAT通过请求报文中的目标地址和目标端口修改为某真实服务器的真实IP和端口实现转发
nat模式实现的前提
·真实服务器和客户端IP在同一个IP网络中,且应该使用私网地址,真实服务器的网关指向lvs内网IP地址
·请求报文和响应报文都必须在lvs服务器进行转发,lvs服务器容易成为系统瓶颈
·支持端口映射,即可修改请求报文中的目标port,真实服务器的端口号可以进行修改
·lvs服务器必须为linux系统,真实服务器可以是任意OS系统
·该模式存在input链前方
·需要将iptables规则进行清空
·需要开启ip_forward
环境准备
准备4台主机
客户端:
centos6:192.168.10.6/24 仅主机模式 无GW,直接访问同网段的vip
lvs服务器:
centos8:
eth0:192.168.10.100/24 仅主机模式
eth1:10.0.0.8/24 NAT模式
RS服务器:
RS1:centos7:10.0.0.7 WG:10.0.0.8 NAT模式
RS2:centos7:10.0.0.17 WG:10.0.0.8 NAT模式
配置环境
#客户端6主机网卡配置,网卡为仅主机模式
[root@internet ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
IPADDR=192.168.10.6
PREFIX=24
BOOTPROTO=static
#lvs服务器网卡配置,网卡eth1为仅主机模式,eth0为nat模式
#注意:在配置网卡之前建议将相关包文件提前安装例如:ipvsadm包,修改网卡之后连接不到互联网
[root@lvs network-scripts]# vim ifcfg-eth0
DEVICE=eth0
NAME=eth0
IPADDR=10.0.0.8
PREFIX=24
BOOTPROTO=static
[root@lvs network-scripts]# vim ifcfg-eth1
DEVICE=eth1
NAME=eth1
IPADDR=192.168.10.100
PREFIX=24
BOOTPROTO=static
#RS1网卡配置,nat模式
[root@rs1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
IPADDR=10.0.0.7
PREFIX=24
GATEWAY=10.0.0.8
BOOTPROTO=static
[root@rs2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
IPADDR=10.0.0.17
PREFIX=24
GATEWAY=10.0.0.8
BOOTPROTO=static
#注意配置完网卡之后重启网卡是IP生效,同时使用lvs服务器ping两个网段,如果可以ping通表示环境准备成功
#在后端服务器即RS1,RS2主机上安装http服务
[root@rs1 ~]# yum -y install httpd;systemctl enable --now httpd
[root@rs2 ~]# yum -y install httpd;systemctl enable --now httpd
[root@rs1 ~]# echo `hostname -I; hostname` > /var/www/html/index.html
[root@rs2 ~]# echo `hostname -I; hostname` > /var/www/html/index.html
#通过lvs访问两个页面,可以实现
[root@lvs ~]# curl 10.0.0.7
10.0.0.7 rs1
[root@lvs ~]# curl 10.0.0.17
10.0.0.17 rs2
#通过客户端访问,不可实现
[root@internet ~]# curl 10.0.0.7
curl: (7) Failed to connect to 10.0.0.7: Network is unreachable
[root@internet ~]# curl 10.0.0.17
curl: (7) Failed to connect to 10.0.0.17: Network is unreachable
#lvs服务器开启路由转发功能
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1
添加集群
#下载相关包
[root@lvs ~]# yum -y install ipvsadm httpd
[root@lvs ~]# systemctl enable --now httpd
#添加集群,指定调度算法为wrr,加权轮询
[root@lvs ~]# ipvsadm -A -t 192.168.10.100:80 -s wrr
#将10.0.0.7和10.0.0.17加入集群,指定端口为80端口,指定为-m模式即nat模式
[root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.7:80 -m
[root@lvs ~]# ipvsadm -a -t 192.168.10.100:80 -r 10.0.0.17:80 -m
#查看集群
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.100:80 wrr
-> 10.0.0.7:80 Masq 1 0 0 #轮询调度比例为1:1
-> 10.0.0.17:80 Masq 1 0 0
测试访问
#在客户端设置循环命令每隔0.5s进行访问vip,查看调度的详细情况
[root@internet ~]# while true;do curl 192.168.10.100;sleep 0.5;done