因为IPv4中IP地址空间的日益紧张和安全方面的缘由,不少网络使用 保留IP地址(10.0.0.0/255.0.0.0、172.16.0.0/255.128.0.0和192.168.0.0 /255.255.0.0)[64, 65, 66]。这些地址不在Internet上使用,而是专门为内部网络预留的。当内部网络中的主机要访问Internet或被Internet访问时,就须要 采用网络地址转换(Network Address Translation, 如下简称NAT),将内部地址转化为Internets上可用的外部地址。NAT的工做原理是报文头(目标地址、源地址和端口等)被正确改写后,客户相信 它们链接一个IP地址,而不一样IP地址的服务器组也认为它们是与客户直接相连的。由此,能够用NAT方法将不一样IP地址的并行网络服务变成在一个IP地址 上的一个虚拟服务。html
VS/NAT的体系结构如图所示。在一组服务器前有一个调度器,它们是经过Switch/HUB相链接的。这些服务器 提供相同的网络服务、相同的内容,即无论请求被发送到哪一台服务器,执行结果是同样的。服务的内容能够复制到每台服务器的本地硬盘上,能够经过网络文件系 统(如NFS)共享,也能够经过一个分布式文件系统来提供。nginx
客户经过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据链接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址 Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。同时,调度器在链接Hash 表中记录这个链接,当这个链接的下一个报文到达时,从链接Hash表中能够获得原选定服务器的地址和端口,进行一样的改写操做,并将报文传给原选定的服务 器。当来自真实服务器的响应报文通过调度器时,调度器将报文的源地址和源端口改成Virtual IP Address和相应的端口,再把报文发给用户。算法
NAT基本架构实现
vim
环境准备:安全
设备 |
软件环境 |
网络环境 |
virtual_server(dir) |
CentOS 6.6+IPVS(ipvsadm) |
eth0 : VIP : 192.168.137.128 (对外服务的IP,客户端访问的IP)服务器 |
eth1 : IP:192.168.1.121 |
||
real_server_a(rsa) |
CentOS 6.6+nginx(监控的服务项目) |
eth0 : IP:192.168.1.118 |
real_server_b(rsb) |
CentOS 6.6+nginx(监控的服务项目) |
eth0 : IP:192.168.1.119 |
配置方法:网络
# 首先在rsa与rsb中启动nginx,测试是否能够正常访问 [root@rsa ~]# /etc/init.d/nginx start 正在启动 nginx: [肯定]
# 为了访问更加直观,咱们修改一下主页 [root@rsa ~]# vim /usr/share/nginx/html/index.html This is test page,this is A. [root@rsa ~]# /etc/init.d/nginx reload 从新载入 nginx: [肯定] # 咱们在看一下
# 当rsa与rsb的nginx均可以正常访问,咱们须要将两台设备的网关修改成dir的内网的IP [root@rsa ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet UUID=779f98ef-706a-4b8c-9e78-75fa1e79fcab ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static HWADDR=00:0C:29:56:5C:C5 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" IPADDR=192.168.1.118 NETMASK=255.255.255.0 GATEWAY=192.168.1.121 DNS1=202.96.128.166 DNS2=202.96.134.133 [root@rsa ~]# service network restart 正在关闭接口 eth0: [肯定] 关闭环回接口: [肯定] 弹出环回接口: [肯定] 弹出界面 eth0: Determining if ip address 192.168.1.118 is already in use for device eth0... [肯定]
接下来咱们开始配置dir的机器,咱们以脚本的形式去配置架构
[root@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 echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects # director 设置nat防火墙 iptables -t nat -F iptables -t nat -X iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE # director设置ipvsadm IPVSADM='/sbin/ipvsadm' $IPVSADM -C $IPVSADM -A -t 192.168.137.128:80 -s rr $IPVSADM -a -t 192.168.137.128:80 -r 192.168.1.118:80 -m -w 1 $IPVSADM -a -t 192.168.137.128:80 -r 192.168.1.119:80 -m -w 1 [root@dir ~]# chmod a+x !$ chmod a+x /usr/local/sbin/lvs_nat.sh [root@dir ~]# /bin/bash /usr/local/sbin/lvs_nat.sh # 查看配置的状态 [root@dir ~]# 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.137.128:80 rr -> 192.168.1.118:80 Masq 1 0 0 -> 192.168.1.119:80 Masq 1 0 0
接下来咱们经过VIP进行访问测试分布式