NAT模式的体系结构如图,在一组服务器前有一个调度器,它们是通过Switch/HUB相连接的。这些服务器提供相同的网络服务、相同的内容,即不管请求被发送到哪一台服务器,执行结果是一样的。
一.NAT模式的数据走向:
client–>vs–>rs–>vs–>clent(原路返回)
用户请求为客户端IP到调度器的虚拟IP,(CIP-VIP)—->LVS调度DIRECTOR,在此处调度器会将报文再次封装一个RS的IP头,即此时的数据包是((CIPVIP)+RIP),调度器将再次封装后的数据发到RS,—>用户请求到达RS,
RS解包数据相应处理再发回调度器,由调度器返回客户端。此阶段RS也会在本地LO回环接口上绑定VIP别名并抑制ARP相应,因此RS发送到调度器DIRECTOR的数据包是VIP-CIP,不会是RIP-CIP。
NAT模式下,RS响应后的数据包封装成(VIP-CIP),为什么调度器能收到?是因为NAT模式下,调度器IP必须是RS的网关,RS响应后的数据包必须通过调度器返回客户端。该模式调度器负载较大,一般不用。
二.配置NAT模式的LVS:
1.在server1上加一块网卡eth1,给该网卡加上外网ip,激活网卡
ip addr add 172.25.254.177/24 dev eth1
ip link set up eth1
3.在server2和server3,添加网关,因为NAT模式下数据包的走向是原路返回,要带着返回的数据包经过调度器回到客户端。
route add default gw 172.25.1.1 #给server2和servere3添加网关
ping 172.25.1.1 #测试与网关之间是否相通
/etc/init.d/httpd start #打开server2和server3后端服务器的httpd
4.在server1中打开ip转换功能
sysctl -a | grep ip_forward
查看得到是net.ipv4.ip_forward=0的,我们应该将其改为1
这是为什么呢:
sever1收到客户端请求后,得到一个公网的ip,跟目的主机server2和server3不在一个网段,所以如果想要将客户端来的数据包转发给后端服务器,那么必须对这个数据包进行ip转换,再进行数据包转发。出于安全考虑,Linux系统默认是禁止数据包转发的。配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能.
5.在server1上添加调度策略:
ipvsadm -A -t 172.25.254.177:80 -s rr
ipvsadm -a -t 172.25.254.177:80 -r 172.25.77.2:80 -m
ipvsadm -a -t 172.25.254.177:80 -r 172.25.77.3:80 -m
6.在测试端测试curl 172.25.254.177
调度器处的情况: