通过NAT实现虚拟服务器(VS/NAT)
由于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地址 上的一个虚拟服务。
VS/NAT的体系结构如图所示。在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务器 提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的。服务的内容可以复制到每台服务器的本地硬盘上,可以通过网络文件系 统(如NFS)共享,也可以通过一个分布式文件系统来提供。
客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址 Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。同时,调度器在连接Hash 表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务 器。当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户。
NAT基本架构实现
环境准备:
设备 | 软件环境 | 网络环境 |
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进行访问测试
转载于:https://blog.51cto.com/maocong/1660216