目录
1.NAT模式的工作原理
nat的请求过程
1.用户请求ds,此时请求报文会先到内核空间preroting链,此时报文ip为cip,目标为vip
2.prerouting检测发现数据包目标ip是本机,将数据包送到input链
3ipvs对比数据包请求是否为集群服务,如果是,修改数据包的目标ip 地址后为后端服务器的ip地址,然后将数据包发送给POSTROUTING链,此时报文为cip,目标报文为rip
4.POSTROUTING通过选路,将数据发送给Real Server
5.Real Server 对比发现目标ip 为自己的ip,开始购进响应报文发回给Director Server,此时报文的源ip为RIP,目标ip为CIP
6.Director Server在响应客户端前,会将源ip地址修改为自己的VIP,然后响应给客户端,目标ip为 cip,此时源报文为vip,目标为cip
NAT模型的特性
1. Rs应该是私有地址,Rs网关必须指向DIP
2. DIP和RIP必须在同一个网段内
3. 请求和响应报文都应该经过Director Server,高负载场景中Director Server容易成为性能瓶颈
4. 支持端口映射
5. Rs可是使用任意操作系统
6. 缺陷,对Ds压力会比较大,请求和响应都需要经过ds
2.NAT模式实战---环境准备
1.环境规划
角色 | 作用 | ip |
NAT | 负载均衡调度器DS | 内网:(DIP 192.168.1.45) 外网:(VIP 192.168.10.143) |
web01 | 真实web服务器Rs | 192.168.1.200 |
web02 | 真实web服务器Rs | 192.168.1.201 |
dns | 用来解析各主机的域名和ip地址 | 192.168.1.46 |
client | 测试 |
2.克隆主机,生成nat模式的机器
给NAT主机增加一张网卡,命名为ens36,自动或者手工获取ip均可,理论上nat对应ds服务器应该有两张网卡(vip,dip)vip对外服务,需要使用公网ip,dip内网局域网,使用虚拟机使用仅主机模式,也可以用桥接模式和nat模式都可以。
1.设置主机名称
[root@localhost ~]# hostnamectl set-hostname nat
2.更改ip地址
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="89a57924-1086-4ddc-a17b-556ecc80725e"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.1.45
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
DNS1=8.8.8.8
DNS2=114.114.114.114
[root@localhost ~]# systemctl restart network
3.添加网卡
额外添加一张网卡,选择对外提供服务的桥接模式或者nat模式,选择桥接模式(ip不同)
4.查看网卡
5.修改网卡配置文件
#复制ens33的网卡文件作为ens36的网卡模板
[root@nat ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts//ifcfg-ens36
#获得uuid
[root@nat ~]# uuidgen
ea4b53e2-8cc3-4818-8c6a-4b150fdef8d4
#编写ens36的网卡文件
[root@nat ~]# vim /etc/sysconfig/network-scripts//ifcfg-ens36
TYPE="Ethernet"
BOOTPROTO="none"
NAME="ens36"
UUID="ea4b53e2-8cc3-4818-8c6a-4b150fdef8d4"
DEVICE="ens36"
ONBOOT="yes"
IPADDR=192.168.10.143
NETMASK=255.255.255.0
6.时间同步
#下载服务
[root@nat ~]# yum -y install ntpdate
[root@nat ~]# yum -y install ntp
#启动服务
[root@nat ~]# systemctl start ntpd
[root@nat ~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
#时间同步
[root@nat ~]# ntpdate cn.ntp.org.cn
13 Aug 16:08:51 ntpdate[2248]: the NTP socket is in use, exiting
7.停用其他服务
#停用SELINUX
[root@nat ~]# setenforce 0
[root@nat ~]# sed -i '/SELINUX=enforcing/cSELINUX=disabled' /etc/selinux/config
#停用防火墙
[root@nat ~]# systemctl stop firewalld
[root@nat ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
#停用NetworkManager
[root@nat ~]# systemctl stop NetworkManager
[root@nat ~]# systemctl disable NetworkManager &>/dev/null
8.添加web服务
提前设置主机名称,关闭防火墙,固定ip地址,关闭SELinux,关闭NetworkManager。
web01:192.168.1.200
web02:192.168.1.201
1.安装nginx
[root@web01 ~]# yum -y install nginx
2.修改index.html文件
[root@web01 ~]# echo "web===========01" > /usr/share/nginx/html/index.html
[root@web01 ~]# nginx
3.时间同步
[root@web01 ~]# yum -y install ntpdate
[root@web01 ~]# yum -y install ntp
[root@web01 ~]# systemctl start ntpd
[root@web01 ~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@web01 ~]# ntpdate cn.ntp.org.cn
13 Aug 16:17:07 ntpdate[1741]: the NTP socket is in use, exiting
web02做以上同样的操作 。
9.配置dns服务器
web01 192.168.1.200
web02 192.168.1.201
nat 192.168.1.45
Ds 192.168.10.143
dns服务器也是提前设置主机名称,关闭防火墙,固定ip地址,关闭SELinux,关闭NetworkManager。
1.安装bind
[root@dns ~]# yum -y install bind
2.配置主配置文件
[root@dns ~]# vim /etc/named.conf
3.配置区域配置文件
进入配置文件,在命令模式下输入:set number显示行号,将12-18行可复制(:12,18 co 42)到42行后面进行编辑。
[root@dns ~]# vim /etc/named.rfc1912.zones #正向解析
...
zone "qingtang" IN {
type master;
file "qingtang.zone";
allow-update { none; };
};
4. 配置区域数据配置文件
[root@dns ~]# ls /var/named/
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@dns ~]# cd /var/named/
[root@dns named]# cp -r named.localhost qingtang.zone
[root@dns named]# vim qingtang.zone
5.检查配置文件
[root@dns named]# named-checkconf /etc/named.conf
[root@dns named]# named-checkconf /etc/named.rfc1912.zones
[root@dns named]# named-checkzone qingtang.zone qingtang.zone
zone qingtang.zone/IN: loaded serial 0
OK
6.启动服务
[root@dns named]# systemctl restart named
7.时间同步
[root@dns ~]# yum -y install ntpdate
[root@dns ~]# yum -y install ntp
[root@dns ~]# systemctl start ntpd
[root@dns ~]# systemctl enable ntpd
Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to /usr/lib/systemd/system/ntpd.service.
[root@dns ~]# ntpdate cn.ntp.org.cn
13 Aug 19:05:02 ntpdate[5446]: the NTP socket is in use, exiting
10.配置client客户端测试机
#指定dns服务器
[root@client ~]# echo "nameserver 192.168.1.45" >> /etc/hosts
3.NAT搭建
1.nat服务器配置
1.安装ipvsadm
[root@nat ~]# yum -y install ipvsadm
2.清空以往的规则
[root@nat ~]# ipvsadm -C
3.查看规则
[root@nat ~]# ipvsadm -L -n
4.新增规则
[root@nat ~]# ipvsadm -A -t 192.168.10.143:80 -s rr
5.添加主机
[root@nat ~]# ipvsadm -a -t 192.168.10.143:80 -r 192.168.1.200:80 -m
[root@nat ~]# ipvsadm -a -t 192.168.10.143:80 -r 192.168.1.201:80 -m
6.设置ip转发
[root@nat ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
7.设置生效
[root@nat ~]# sysctl -p
net.ipv4.ip_forward = 1
2.web服务器网关配置
[root@web01 ~]# route del default
[root@web01 ~]# route add default gw 10.1.1.100
[root@web02 ~]# route del default
[root@web02 ~]# route add default gw 10.1.1.100