18.9/18.10 LVS NAT模式搭建

LVS NAT模式搭建

  • NAT模式搭建 – 准备工做
    • 三台机器
    • 分发器,也叫调度器(简写为dir)
      • 内网:133.130,外网:147.144(vmware仅主机模式)
    • rs1
      • 内网:133.132,设置网关为133.130
    • rs2
      • 内网:133.133,设置网关为133.130
    • 三台机器上都执行执行
    • systemctl stop firewalld; systemc disable firewalld
    • systemctl start iptables-services; iptables -F; service iptables save
  • NAT模式搭建
    • 在dir上安装ipvsadm
    • yum install -y ipvsdam
    • 在dir上编写脚本,vim /usr/local/sbin/lvs_nat.sh//内容以下
#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,阿铭的两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.147.144:80 -s wlc -p 3
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1
  • NAT模式效果测试
    • 两台rs上都安装nginx
    • 设置两台rs的主页,作一个区分,也就是说直接curl两台rs的ip时,获得不一样的结果
    • 浏览器里访问192.168.142.147,多访问几回看结果差别

LVS NAT模式搭建


NAT模式搭建-准备工做

  • NAT模式是经过iptables实现的,因此必须配置一些iptables规则
  1. 在配置前准备三台机器,一台做为分发器,也叫作调度器,简称 dir,另外两台就是real server,用来处理用户请求的服务器,rs一、rs2(克隆虚拟机步骤
安装ifconfig命令
yum install -y net-tools
  • A机器IP为192.168.74.12九、B机器IP为192.168.74.130,C机器IP为192.168.74.133html

    • A机器增长一块网卡,并启动查看网段为192.168.204(根据本身机器来设置),设置新的网卡IP为192.168.204.1,并在物理机访问这个IP地址,看是否正常通讯

    输入图片说明

  • B机器和C机器的网关必须设置成分发器(即A机器)的内网IP,若不设置成它的网关,是无法通讯的linux

    • 这时B、C机器就没法上网了
网卡配置文件中更改(即本机器)
vi /etc/sysconfig/network-scripts/ifcfg-eno16777736

更改完以后重启网络服务
systemctl restart network

[root@hf-02 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.74.129  0.0.0.0         UG    1024   0        0 eno16777736
192.168.74.0    0.0.0.0         255.255.255.0   U     0      0        0 eno16777736
[root@hf-02 ~]#
  1. 三台机器设置完成后,关闭三台机器的防火墙
关闭firewalld服务
systemctl stop firewalld

使firewalld服务再也不开机启动
systemctl disable firewalld
  1. 机器B、机器C 下载安装iptables-services 包
yum install -y iptables-services
  • 有时下载包的时候特别慢,就是epel.repo源的缘由致使的,这里能够临时关闭,就是直接更更名字便可(由于epel.repo源是国外的资源,因此很慢)
[root@hf-01 ~]# cd /etc/yum.repos.d/
[root@hf-01 yum.repos.d]# ls
CentOS7-Base-163.repo  CentOS-Sources.repo  epel.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo    epel-testing.repo
[root@hf-01 yum.repos.d]# mv epel.repo epel.repo.1
[root@hf-01 yum.repos.d]#
  1. 机器B、机器C 启动iptables服务
  • systemctl start iptables
机器B
[root@hf-02 ~]# systemctl start iptables
[root@hf-02 ~]# 

机器C
[root@hf-03 ~]# systemctl start iptables
[root@hf-03 ~]#
  1. 机器B、机器C 设置开机启动
  • systemctl enable iptables
  • systemctl enable iptables
  • iptables -F
  • service iptables save
机器B
[root@hf-02 ~]# systemctl start iptables
[root@hf-02 ~]# systemctl enable iptables
ln -s '/usr/lib/systemd/system/iptables.service' '/etc/systemd/system/basic.target.wants/iptables.service'
[root@hf-02 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   71  5076 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    1   124 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 48 packets, 4680 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@hf-02 ~]# iptables -F       //清空表的规则,以便后续实验
[root@hf-02 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  肯定  ]
[root@hf-02 ~]# 

机器C同上
  1. 清空并查看机器A的规则
[root@hf-01 ~]# iptables -nvL
Chain INPUT (policy ACCEPT 19 packets, 1296 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 11 packets, 1108 bytes)
 pkts bytes target     prot opt in     out     source               destination         
[root@hf-01 ~]#
  1. 关闭机器机器A,机器B,机器C,三台机器的selinux
setenforce 0    //临时关闭selinux

getenforce    //查看selinux是否关闭


为了保险起见,在配置文件中永久关闭selinux
vi /etc/selinux/config
SELINUX=enforcing更改成SELINUX=disabled

准备工做结束


NAT模式搭建nginx

  1. 首先在分发器dir上(即A机器),安装ipvsadm ,这个是实现 lvs 的一个重要的工具,缺乏这个工具,将没有办法实现 lvs 的功能
[root@hf-01 ~]# yum install -y ipvsadm
  1. 在分发器(A机器)上编写一个脚本(LVS全都是以脚本的方式去执行的,这样比较方便进行维护不用一条命令一条命令的进行操做)
[root@hf-01 ~]# vim /usr/local/sbin/lvs_nat.sh

#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward   //对内核参数修改,打开路由转发
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects  //假装操做,否则不能转发rs的数据
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects //假装操做,否则不能转发rs的数据
# 注意区分网卡名字,dir机器的两块网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/eno16777736/send_redirects  
echo 0 > /proc/sys/net/ipv4/conf/ens36/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24  -j MASQUERADE  //MASQUERADE实现同网段的机器去上网,路由器使用的就是这个功能
# director设置ipvsadm
IPVSADM='/usr/sbin/ipvsadm' //设置一个变量,方便下面命令引用
$IPVSADM -C //清空规则
$IPVSADM -A -t 192.168.204.1:80 -s lc -p 3   //用来定义lvs 的模式;wlc,为算法,能够按需求选择 lvs 里面适合的算法
$IPVSADM -a -t 192.168.204.1:80 -r 192.168.74.131:80 -m -w 1     //小规则,-r 指定dir机器IP,-m 指定nat模式,-w指定rs权重 
$IPVSADM -a -t 192.168.204.1:80 -r 192.168.74.133:80 -m -w 1    //小规则,-r 指定dir机器IP,-m 指定nat模式,-w指定rs权重
  • IPVSADM -A -t 192.168.142.144:80 -s lc -p 3 : -A增长一个规则,-t 制定lvs 模式,以后IP 就是dir的IP,-s 指定算法;-p 指定超时时间,(数据包转发超时时间)
  • 超时时间解释:
    • 用户1访问的是a机器,-p 的意思就是在同一个时间,一直在同一台机器上进行请求
  1. 执行脚本,如果没输出,表示脚本没有错误
[root@hf-01 ~]# sh /usr/local/sbin/lvs_nat.sh
[root@hf-01 ~]#

NAT模式效果测试

  • NAT模式效果测试
    • 两台rs上都安装nginx
    • 设置两台rs的主页,作一个区分,也就是说直接curl两台rs的ip时,获得不一样的结果
    • 浏览器里访问192.168.142.147,多访问几回看结果差别
  1. 首先查看B机器和C机器上的nginx服务是否开启
B机器
[root@hf-02 ~]# ps aux |grep nginx
root      1102  0.0  0.0  20996   624 ?        Ss   05:29   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    1107  0.0  0.3  23440  3208 ?        S    05:29   0:00 nginx: worker process
nobody    1108  0.0  0.3  23440  3208 ?        S    05:29   0:00 nginx: worker process
root      3580  0.0  0.0 112676   984 pts/1    R+   08:30   0:00 grep --color=auto nginx
[root@hf-02 ~]# 

C机器
[root@hf-03 ~]# ps aux |grep nginx
root       821  0.0  0.0  20996   628 ?        Ss   08:00   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody     825  0.0  0.3  23440  3212 ?        S    08:00   0:00 nginx: worker process
nobody     826  0.0  0.3  23440  3212 ?        S    08:00   0:00 nginx: worker process
root      1851  0.0  0.0 112676   984 pts/0    R+   08:30   0:00 grep --color=auto nginx
[root@hf-03 ~]#
  1. 设置两台rs的主页,作一个区分,也就是说直接curl两台rs的ip时,获得不一样的结果
  • 编辑B机器的索引页
[root@hf-02 ~]# vim /usr/share/nginx/html/index.html
[root@hf-02 ~]# curl localhost
hanfeng-02
  • 编辑B机器的索引页
[root@hf-03 ~]# vim /usr/share/nginx/html/index.html
[root@hf-03 ~]# curl localhost
hanfeng-03
  1. 这时浏览器访问模拟的公网IP,即192.168.204.1,如果浏览器访问不成功,可用curl测试
[root@hf-01 ~]# curl 192.168.204.1
hanfeng-02
[root@hf-01 ~]# curl 192.168.204.1
hanfeng-03
  1. 查看A机器上的nat规则
[root@hf-01 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 108 packets, 5472 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 108 packets, 5472 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      *       192.168.74.0/24      0.0.0.0/0           
[root@hf-01 ~]#
  1. 查看 ipvsadm 规则
[root@hf-01 ~]# 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.204.1:80 wlc persistent 3
  -> 192.168.74.131:80            Masq    1      0          0         
  -> 192.168.74.133:80            Masq    1      0          0         
[root@hf-01 ~]#
相关文章
相关标签/搜索