wer21213 发表于 2015-6-10 08:36:25

LVS-nat架构原理与实现方案

通过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)。这些地址不在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

配置方法:

1
2
3
# 首先在rsa与rsb中启动nginx,测试是否可以正常访问
# /etc/init.d/nginx start
正在启动 nginx:                                           [确定]





1
2
3
4
5
6
# 为了访问更加直观,我们修改一下主页
# vim /usr/share/nginx/html/index.html
This is test page,this is A.
# /etc/init.d/nginx reload
重新载入 nginx:                                           [确定]
# 我们在看一下






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 当rsa与rsb的nginx都可以正常访问,我们需要将两台设备的网关修改为dir的内网的IP
# 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

# service network restart
正在关闭接口 eth0:                                        [确定]
关闭环回接口:                                             [确定]
弹出环回接口:                                             [确定]
弹出界面 eth0: Determining if ip address 192.168.1.118 is already in use for device eth0...
                                                         [确定]





接下来我们开始配置dir的机器,我们以脚本的形式去配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 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

# chmod a+x !$
chmod a+x /usr/local/sbin/lvs_nat.sh
# /bin/bash /usr/local/sbin/lvs_nat.sh
# 查看配置的状态
# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port         Forward Weight ActiveConn InActConn
TCP192.168.137.128:80 rr
-> 192.168.1.118:80             Masq    1      0          0
-> 192.168.1.119:80             Masq    1      0          0





接下来我们通过VIP进行访问测试



页: [1]
查看完整版本: LVS-nat架构原理与实现方案