Linux 练习二 LVS的NAT模式

server/2025/4/1 7:10:20/

作业

要求:使用LVS的 NAT 模式实现 3 台 RS 的轮询访问。IP地址和主机自己规划。

节点规划

主机角色系统网络IP
clientclientredhat 9.5仅主机192.168.60.100/24
lvslvsredhat 9.5仅主机 NAT192.168.60.200/24 VIP 192.168.23.8/24 DIP
nginxrs1redhat 9.5NAT192.168.23.7/24
nginxrs2redhat 9.5NAT192.168.23.17/24
nginxrs3redhat 9.5NAT192.168.23.27/24

配置RS

RS需要配置为NAT模式,网关这里设置为 192.168.23.8

配置 RS1

 [root@localhost ~]# hostnamectl hostname rs1[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.23.7/24 ipv4.gateway 192.168.23.8 connection.autoconnect yes[root@localhost ~]# nmcli c up ens160​# 安装nginx[root@rs1 ~]# dnf install nginx -y# 修改默认访问页[root@rs1 ~]# echo $(hostname -I) > /usr/share/nginx/html/index.html# 启动服务[root@rs1 ~]# systemctl start nginx# 测试[root@rs1 ~]# curl localhost192.168.72.7

配置 RS2

[root@localhost ~]# hostnamectl hostname rs2
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.23.17/24 ipv4.gateway 192.168.23.8 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160# 安装nginx
[root@rs1 ~]# dnf install nginx -y
# 修改默认访问页
[root@rs1 ~]# echo $(hostname -I) > /usr/share/nginx/html/index.html
# 启动服务
[root@rs1 ~]# systemctl start nginx
# 测试
[root@rs1 ~]# curl localhost
192.168.72.7

配置 RS3

 
 [root@server ~]# hostnamectl hostname rs3[root@server ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.23.27/24 ipv4.gateway 192.168.23.8 connection.autoconnect yes [root@server ~]# nmcli connection up ens160 ​### 安装nginx[root@rs3 ~]# dnf install -y nginx# 修改默认访问页[root@rs3 ~]# echo &(hostname -I) > /usr/share/nginx/html/index.html [1] 2339​[1]+  Done                    echo[root@rs3 ~]# systemctl start nginx[root@rs3 ~]# curl localhost192.168.23.27

配置 LVS

修改虚拟网络

LVS 服务器第一块网卡采用仅主机模式,IP 地址为 192.168.60.200,第二块网卡采用 NAT 模式,IP 地址为 192.168.23.8。

这里我们先在VMware中将 网络适配器 改为仅主机模式,然后再添加一块 NAT 模式的网卡。

 [root@server ~]# hostnamectl hostname lvs​### 关闭防火墙[root@lvs ~]# systemctl stop firewalld.service​[root@lvs ~]# ip a1: ...2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:96:88:aa brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.60.128/24 brd 192.168.60.255 scope global dynamic noprefixroute ens160valid_lft 1755sec preferred_lft 1755secinet6 fe80::20c:29ff:fe96:88aa/64 scope link noprefixroute valid_lft forever preferred_lft forever3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:96:88:b4 brd ff:ff:ff:ff:ff:ffaltname enp19s0inet 192.168.23.138/24 brd 192.168.23.255 scope global dynamic noprefixroute ens224valid_lft 1755sec preferred_lft 1755secinet6 fe80::e817:bd6f:df08:c607/64 scope link noprefixroute valid_lft forever preferred_lft forever# 查看网络连接设备名称,注意网卡名称和驱动名称是不一样的[root@lvs ~]# nmcli connection showNAME                UUID                                  TYPE     DEVICE ens160              c1ddb566-f74f-3685-bcac-678da8f58efa  ethernet ens160 lo                  d2977d80-8552-47ec-95dd-a87b7809be47  loopback  lo   Wired connection 1  bfbd3c56-329a-38c2-89c1-bb9b514232a3  ethernet ens224 ​# 修改连接名称,以免每次都要输入'Wired connection 1'[root@lvs ~]# nmcli c modify 'Wired connection 1' connection.id ens224[root@lvs ~]# nmcli connection showNAME    UUID                                  TYPE      DEVICE ens160  c1ddb566-f74f-3685-bcac-678da8f58efa  ethernet  ens160 ens224  bfbd3c56-329a-38c2-89c1-bb9b514232a3  ethernet  ens224 lo      d2977d80-8552-47ec-95dd-a87b7809be47  loopback  lo​# 查看修改结果[root@lvs ~]# nmcli connection showNAME    UUID                                  TYPE      DEVICE ens160  c1ddb566-f74f-3685-bcac-678da8f58efa  ethernet  ens160 ens224  bfbd3c56-329a-38c2-89c1-bb9b514232a3  ethernet  ens224 lo      d2977d80-8552-47ec-95dd-a87b7809be47  loopback  lo

软件安装

防止等会不能上外网,先把 ipvsamd 软件安装好。

 [root@lvs ~]# dnf install ipvsadm -yUpdating Subscription Management repositories.Unable to read consumer identityDependencies resolved.=======================================================================================Package            Architecture      Version               Repository            Size=======================================================================================Installing:ipvsadm            x86_64            1.31-6.el9            AppStream             54 kTransaction Summary=======================================================================================...    Complete!

配置网卡

从 VMware 的 编辑 -> 虚拟网络适配器 选项中可以看到自己仅主机模式的子网IP,这里我的子网IP 为 192.168.60.0

 # 仅主机模式网卡[root@lvs ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.60.200/24 ipv4.gateway 192.168.60.2 ipv4.dns 223.5.5.5 connection.autoconnect yes[root@lvs ~]# nmcli c up ens160​# NAT 模式网卡[root@lvs ~]# nmcli c modify ens224 ipv4.method manual ipv4.addresses 192.168.23.8/24 ipv4.gateway 192.168.23.2 connection.autoconnect yes[root@lvs ~]# nmcli c up ens224 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

配置客户端

客户端的网络也采用仅主机模式,采用 60 网段

 [root@server ~]# hostnamectl hostname client[root@client ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.60.100/24 ipv4.gateway 192.168.60.2 ipv4.dns 223.5.5.5 connection.autoconnect yes[root@client ~]# nmcli c up ens160

启动服务

 # 直接启动服务会报错[root@lvs ~]# systemctl start ipvsadm.service Job for ipvsadm.service failed because the control process exited with error code.See "systemctl status ipvsadm.service" and "journalctl -xeu ipvsadm.service" for details.# 需要保存当前的 IPVS 规则[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm[root@lvs ~]# systemctl start ipvsadm.service

规则匹配

 # 此时客户端无法访问虚拟IP(VIP),既无法访问到后端 RS 服务器[root@client ~]# curl 192.168.60.200curl: (7) Failed to connect to 192.168.60.200 port 80: Connection refused# 但是在 LVS 服务器中可以访问到后端 RS 服务器[root@lvs ~]# curl 192.168.23.7192.168.23.7[root@lvs ~]# curl 192.168.23.17192.168.23.17[root@lvs ~]# curl 192.168.23.27192.168.23.27​### 进行 LVS 规则匹配## 配置一条规则# -A 表示添加新的虚拟服务 -t 指定使用TCP连接(默认) 后面为当前 VIP 及端口 # -s rr 指定 负载均衡算法,rr 表示轮询,即轮流发送到所有真实服务器RS[root@lvs ~]# ipvsadm -A -t 192.168.60.200:80 -s rr​## 添加规则# -a 为存在的虚拟服务添加真实服务器RS -t 指定真实服务器RS的IP地址和端口 # -m 指定以 直接路由模式使用,表示LVS通过NAT转发流量到真正的服务 # -w 设置权重,表示该RS的负载均衡权重,用于 轮询策略  [root@lvs ~]# ipvsadm -a -t 192.168.60.200:80 -r 192.168.23.7:80 -m -w 1[root@lvs ~]# ipvsadm -a -t 192.168.60.200:80 -r 192.168.23.17:80 -m -w 2[root@lvs ~]# ipvsadm -a -t 192.168.60.200:80 -r 192.168.23.27:80 -m -w 3​## 查看规则列表[root@lvs ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.60.200:80 rr-> 192.168.23.7:80              Masq    1      0          0         -> 192.168.23.17:80             Masq    2      0          0         -> 192.168.23.27:80             Masq    3      0          0# 配置好后重启服务[root@lvs ~]# systemctl restart ipvsadm.service

功能测试

 # 重启完成后再次通过客户端测试,发现不报错但是没有数据返回[root@client ~]# curl 192.168.60.200​### 启用IP转发,即启用 IPv4 的 IP 转发功能(1启用,0禁用)# 将内核转发参数写进配置文件,重启后也能保持配置[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf ​# 重新加载配置[root@lvs ~]# sysctl -pnet.ipv4.ip_forward = 1​### 此时再进行访问,成功轮询[root@client ~]# curl 192.168.60.200192.168.23.7[root@client ~]# curl 192.168.60.200192.168.23.27 [root@client ~]# curl 192.168.60.200192.168.23.17[root@client ~]# curl 192.168.60.200192.168.23.7[root@client ~]# curl 192.168.60.200192.168.23.27 [root@client ~]# curl 192.168.60.200192.168.23.17

IP 转发的作用

启用 IP 转发允许 Linux 主机在两个或多个网络之间转发数据包。这对于以下场景至关重要:

  • 路由器:使得 Linux 服务器可以作为路由器,转发数据包。

  • 负载均衡器:在 LVS 等负载均衡配置中,能够将客户端请求分发到后端真实服务器

  • 网络安全:通常在 NAT(网络地址转换)场景中,需要 IP 转发来处理流量。


http://www.ppmy.cn/server/180168.html

相关文章

TCP/IP三次握手的过程,为什么要3次?

一&#xff1a;过程 第一次&#xff08;SYN&#xff09;&#xff1a; 客户端发送一个带有SYN标志的TCP报文段给服务器&#xff0c;设置SYN1&#xff0c;并携带初始序列号Seqx&#xff08;随机值&#xff09;&#xff0c;进入SYN_SENT状态。等待服务器相应。 第二次&#xff08…

Nginx RTMP DASH 模块分析 (ngx_rtmp_dash_module.c)

ngx_rtmp_dash_module.c实现了一个 Nginx RTMP 模块&#xff0c;主要功能是支持通过 DASH&#xff08;动态自适应流媒体&#xff09;协议进行流媒体发布。DASH&#xff08;Dynamic Adaptive Streaming over HTTP&#xff09;是一种流行的视频流协议&#xff0c;它允许根据网络状…

Flink实战教程从入门到精通(基础篇)(五)Flink部署-YARN运行模式

目录 一、YARN运行模式&#xff08;重点&#xff09; 二、相关准备和配置 1、Hadoop集群搭建&#xff08;HDFS、YARN&#xff09; 三、会话模式部署 &#xff08;1&#xff09;创建会话 &#xff08;2&#xff09;打开Flink页面 &#xff08;3&#xff09;提交作业 &a…

RWA代币化崛起中的香港机遇:数字金融新枢纽的破局之道

引言&#xff1a;全球资产代币化浪潮中的香港坐标 在2025年全球金融数字化重构的关键节点&#xff0c;RWA&#xff08;现实世界资产代币化&#xff09;市场以年均740%的增速重塑价值流动规则。香港凭借独特的政策创新、跨境枢纽优势及庞大的资产储备&#xff0c;正从传统金融中…

【QT5 多线程示例】异步编程

异步编程 QFuture 是 Qt 并发框架提供的一个异步计算结果的类。它允许你在后台执行任务&#xff0c;并在未来某个时刻获取任务的计算结果。QFuture 通常与 QtConcurrent::run 或 QFutureWatcher 结合使用&#xff1a; QtConcurrent::run 适用于异步执行一个函数并通过 QFuture…

Spring Boot框架中常用注解

以下是Spring Boot框架中常用注解的详细说明&#xff0c;包括名称、用途、用法、使用位置及扩展示例&#xff0c;按功能模块分类整理&#xff1a; 一、核心启动与配置注解 1. SpringBootApplication 用途&#xff1a;主启动类注解&#xff0c;整合了 Configuration、EnableAu…

LogitsProcessor代码分析

LogitsProcessor是一个抽象基类&#xff0c;用于在生成序列的过程中对模型输出的logits进行处理。它的派生类实现了各种策略&#xff0c;以控制生成过程。 公共输入和输出 所有的LogitsProcessor派生类都遵循相同的调用约定&#xff0c;即实现了__call__方法&#xff0c;接受以…

使用nohup和--remove-source-files在后台运行rsync并记录日志

一、什么是 --remove-source-files&#xff1f; 作用&#xff1a;在文件成功同步到目标路径后&#xff0c;删除源路径中的文件。适用场景&#xff1a;需要将文件从一处“移动”到另一处&#xff0c;而不是保留副本&#xff0c;例如清理旧数据、迁移文件到新存储。注意&#xf…