作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Web服务器,其中以Nginx为主,本章我们来讲解几个代理软件:Squid,Haproxy,LVS,FRP(内网穿透)。
前面两个小节,我们介绍了LVS的相关概念和里面涉及到3种模式和算法。由于算法相对固定,并且Nginx里面也有类似的算法,所以下面2个小节,我们来讲讲里面的其中两种模式。
NAT 模式通过修改数据包的 源 IP 和 目标 IP 实现流量转发,是 LVS 三种工作模式中配置最简单但性能较低的一种。 关键流程:
流量路径示意图:
Client → [VIP] Director [DIP] → Real Server
Client ← [VIP] Director [DIP] ← Real Server 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年代随着云计算和微服务架构的普及被广泛采用。