作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一章介绍了Web服务器,其中以Nginx为主,本章我们来讲解几个代理软件:Squid,Haproxy,LVS,FRP(内网穿透)。
前面两个小节,我们介绍了LVS的相关概念和里面涉及到3种模式和算法。由于算法相对固定,并且Nginx里面也有类似的算法,所以下面2个小节,我们来讲讲里面的其中两种模式。
一、NAT 模式的核心原理
NAT 模式通过修改数据包的 源 IP 和 目标 IP 实现流量转发,是 LVS 三种工作模式中配置最简单但性能较低的一种。
关键流程:
-
客户端发送请求到 VIP(Virtual IP),Director 接收请求。Director 修改请求包的 目标 IP(VIP → Real Server IP),并通过 DIP(Director IP) 转发给 Real Server。
-
Real Server 响应:Real Server 处理请求后,将响应返回给 Director 的 DIP。Director 修改响应包的 源 IP(Real Server IP → VIP),返回给客户端。
流量路径示意图:
Client → [VIP] Director [DIP] → Real Server
Client ← [VIP] Director [DIP] ← Real Server
二、NAT 模式的关键配置
1.网络拓扑:
此图来源于网络
2.内核参数:Director 必须开启 IP 转发(net.ipv4.ip_forward=1
)。
三、NAT 模式的部署
原本打算使用单网卡来模拟这个情况的,但是最后测试发现DR在转发请求到后端RS的时候,只修改目的IP,不修改源端IP,导致没办法回包,所以请求失败,所以下面这个还是基于2张网卡来实现。其中
VIP:192.168.31.19(模拟外网IP)《网卡1》
DR:192.168.179.130 《网卡2》
RS:192.168.179.131/132(部署Nginx提供web服务)
这里我按照前面的小节完成ipvsadm的部署,以及内核转发功能的打开。
DR:添加ipvs规则
# 添加 NAT 规则(将 VIP:80 的请求转发到 Real Server)
ipvsadm -A -t 192.168.31.19:80 -s rr
ipvsadm -a -t 192.168.31.19:80 -r 192.168.179.131:80 -m
ipvsadm -a -t 192.168.31.19:80 -r 192.168.179.132:80 -m
-A: 添加一个新的虚拟服务。
-t: 指定TCP协议的服务。
-s rr: 指定调度算法(scheduler),这里的rr代表轮询(Round Robin)。
-a: 向已有的虚拟服务添加真实服务器(real server)。
-t: 再次指定虚拟服务的IP地址和端口(192.168.31.19:80)。
-r: 指定真实服务器的IP地址和端口(192.168.179.131:80)。
-m:请求将通过NAT方式转发到真实服务器。
RS:启用Nginx,将服务器网关指向192.168.179.130
测试访问
后端RS日志
这里有个小疑问,以前没怎么关注这个问题。从后端RS的日志发现,这里的发现DR只修改了目标地址,并没有修改源IP地址。和传统的NAT(同时修改目标地址和源地址)这里说的是一种DNAT-only允许后端服务器直接获取客户端真实IP,适用于需要审计或基于IP的访问控制场景。这一特性在2010年代随着云计算和微服务架构的普及被广泛采用。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。