代理服务器-LVS的NAT模式

51 阅读3分钟

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

我们上一章介绍了Web服务器,其中以Nginx为主,本章我们来讲解几个代理软件:Squid,Haproxy,LVS,FRP(内网穿透)。

前面两个小节,我们介绍了LVS的相关概念和里面涉及到3种模式和算法。由于算法相对固定,并且Nginx里面也有类似的算法,所以下面2个小节,我们来讲讲里面的其中两种模式。

一、NAT 模式的核心原理

NAT 模式通过修改数据包的 源 IP目标 IP 实现流量转发,是 LVS 三种工作模式中配置最简单但性能较低的一种。
关键流程

  1. 客户端发送请求到 VIP(Virtual IP),Director 接收请求。Director 修改请求包的 目标 IP(VIP → Real Server IP),并通过 DIP(Director IP) 转发给 Real Server。

  2. 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年代随着云计算和微服务架构的普及被广泛采用。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。