当前位置: 首页 > news >正文

NAT 模式

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

1.节点规划

主机角色系统网络IP
clientclientredhat 9.5仅主机192.168.180.100/24
lvslvsredhat 9.5仅主机 NAT192.168.180.200/24  VIP 192.168.72.8/24 DIP
nginxrs1redhat 9.5NAT192.168.226.7/24
nginxrs2redhat 9.5NAT

192.168.226.17/24

nginxrs3redhat 9.5NAT192.168.226.27/24

2.配置RS

2.1配置rs1 

注意,RS1的网络模式为 NAT 模式,它的网关配置为 192.168.226.8

[root@localhost ~]# hostnamectl hostname rs1
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.226.7/24 ipv4.gateway 192.168.226.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.226.7

2.2配置rs2 

 注意,RS2的网络模式为 NAT 模式,它的网关配置为 192.168.226.8

[root@localhost ~]# hostnamectl hostname rs2
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.226.17/24 ipv4.gateway 192.168.226.8 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160

# 安装nginx
[root@rs2 ~]# dnf install nginx -y
# 修改默认访问页
[root@rs2 ~]# echo $(hostname -I) > /usr/share/nginx/html/index.html
# 启动服务
[root@rs2 ~]# systemctl start nginx
# 测试
[root@rs2 ~]# curl localhost
192.168.226.17

2.3配置rs3 

  注意,RS3的网络模式为 NAT 模式,它的网关配置为 192.168.226.8

[root@localhost ~]# hostnamectl hostname rs3
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.226.27/24 ipv4.gateway 192.168.226.8 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160

# 安装nginx
[root@rs3 ~]# dnf install nginx -y
# 修改默认访问页
[root@rs3 ~]# echo $(hostname -I) > /usr/share/nginx/html/index.html
# 启动服务
[root@rs3 ~]# systemctl start nginx
# 测试
[root@rs3 ~]# curl localhost
192.168.226.27

3.配置LVS 

3.1修改虚拟网络

lvs服务器有两块网卡,第一块网卡采用仅主机模式,IP 地址为 192.168.10.200,第二块网卡采用 NAT 模式,IP 地址为192.168.72.8  

 配置好后,开机,然后查看网络设备

[root@localhost ~]# ip a
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:e4:e3:d3 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.180.131/24 brd 192.168.180.255 scope global dynamic noprefixroute ens160
       valid_lft 1739sec preferred_lft 1739sec
    inet6 fe80::20c:29ff:fee4:e3d3/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:e4:e3:dd brd ff:ff:ff:ff:ff:ff
    altname enp19s0
    inet 192.168.266.133/24 brd 192.168.266.255 scope global dynamic noprefixroute ens224
       valid_lft 1739sec preferred_lft 1739sec
    inet6 fe80::64ad:fb0d:fceb:b517/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever 

我们可以执行如下的命令来查看网络设备连接名称:  

[root@localhost ~]# nmcli c show
NAME                UUID                                  TYPE      DEVICE 
Wired connection 1  716944d5-683d-3297-9f0b-39530d65c935  ethernet  ens224 
ens160              c6adadcb-89ef-3ed8-a265-09260f58abe1  ethernet  ens160 
lo                  3919112a-6bb6-4ad3-a213-3ce8394ca9a9  loopback  lo 

接下来我们将连接名称Wired connection 1 改为 ens224。  

 # 修改连接名称
[root@localhost ~]# nmcli c modify 'Wired connection 1' connection.id ens224
# 查看修改结果
[root@localhost ~]# nmcli c show
NAME    UUID                                  TYPE      DEVICE 
ens224  716944d5-683d-3297-9f0b-39530d65c935  ethernet  ens224 
ens160  c6adadcb-89ef-3ed8-a265-09260f58abe1  ethernet  ens160 
lo      3919112a-6bb6-4ad3-a213-3ce8394ca9a9  loopback  lo

3.2修改主机名

 [root@localhost ~]# hostnamectl hostname lvs

3.3配置仅主机模式网卡

[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.180.200/24 ipv4.gateway 192.168.180.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160 

3.4安装软件

 为了防止等会不能上外网,我们先把 ipvsamd 软件安装上。

 [root@lvs ~]# dnf install ipvsadm -y

3.5配置NAT模式网卡

 [root@lvs ~]# nmcli c modify ens224 ipv4.method manual ipv4.addresses 192.168.226.8/24 ipv4.gateway 192.168.226.2 connection.autoconnect yes
[root@lvs ~]# nmcli c up ens224 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

 [root@lvs ~]# ip a
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:e4:e3:d3 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.180.200/24 brd 192.168.180.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fee4:e3d3/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:e4:e3:dd brd ff:ff:ff:ff:ff:ff
    altname enp19s0
    inet 192.168.226.8/24 brd 192.168.226.255 scope global noprefixroute ens224
       valid_lft forever preferred_lft forever
    inet6 fe80::64ad:fb0d:fceb:b517/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

4.配置客户端

客户端的网络采用的是仅主机模式  

[root@localhost ~]# hostnamectl hostname client
[root@localhost ~]# nmcli c modify ens160 ipv4.method manual ipv4.addresses 192.168.180.100/24 ipv4.gateway 192.168.180.2 ipv4.dns 223.5.5.5 connection.autoconnect yes
[root@localhost ~]# nmcli c up ens160
[root@client ~]# nmcli d show ens160 
GENERAL.DEVICE:                         ens160
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:11:46:49
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ens160
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.180.100/24
IP4.GATEWAY:                            192.168.180.2
IP4.ROUTE[1]:                           dst = 192.168.180.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.180.2, mt = 100
IP4.DNS[1]:                             223.5.5.5
IP6.ADDRESS[1]:                         fe80::20c:29ff:fe11:4649/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 1024

5.功能测试

5.1启动ipvsadm服务

[root@lvs ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs ~]# systemctl start ipvsadm

我在客户端上访问 VIP 来测试是否能够成功访问到后端的 RS 服务器  

[root@client ~]# curl 192.168.180.200
curl: (7) Failed to connect to 192.168.180.200 port 80: Connection refused 

但是,我们在 lvs 服务器中可以访问

[root@lvs ~]# curl 192.168.226.7
192.168.226.7
[root@lvs ~]# curl 192.168.226.17
192.168.226.17
[root@lvs ~]# curl 192.168.226.27
192.168.226.27 

为什么呢?原因是没有做 LVS 规则匹配  

# 配置一条规则
[root@lvs ~]# ipvsadm -A -t 192.168.180.200:80 -s rr
# 为规则增加RS
[root@lvs ~]# ipvsadm -a -t 192.168.180.200:80 -r 192.168.226.7:80 -m -w 2
[root@lvs ~]# ipvsadm -a -t 192.168.180.200:80 -r 192.168.226.17:80 -m -w 2
[root@lvs ~]# ipvsadm -a -t 192.168.180.200:80 -r 192.168.226.27:80 -m -w 2
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.180.200:80 rr
  -> 192.168.226.7:80              Masq    2      0          0         
  -> 192.168.226.17:80             Masq    2      0          0     
  -> 192.168.226.27:80              Masq    2      0          0    

配置完后,重启服务器  

[root@lvs ~]# systemctl restart ipvsadm 

重启好后,我们再通过客户端来测试,发现此时不报错,但是没有数据返回。原因是需要配置内核转发参数net.ipv4.ip_forward=1。  

[root@lvs ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 

配置好后执行如下的命令来生效  

此时我们再在客户端来测试  

[root@client ~]# curl 192.168.180.200
192.168.226.7
[root@client ~]# curl 192.168.180.200
192.168.226.17
[root@client ~]# curl 192.168.180.200
192.168.226.27
[root@client ~]# curl 192.168.180.200
192.168.226.7
[root@client ~]# curl 192.168.180.200
192.168.226.17
[root@client ~]# curl 192.168.180.200
192.168.226.27
[root@client ~]# curl 192.168.180.200
192.168.226.7
[root@client ~]# curl 192.168.180.200
192.168.226.17
[root@client ~]# curl 192.168.180.200
192.168.226.27 

NAT模式总结:

1、LVS服务器需要有两块网卡,一块用于虚拟IP,便于用户访问;另一块作为后端真实主机的网关。

2、在配置规则时,需要通过 -m 参数来指定是 NAT 模式

3、需要在 LVS 服务器上配置ip转发内核参数

vim /etc/sysctl.conf
net.ipv4.ip_forward=1

相关文章:

  • Hive根据输入数据量计算reducer的数量,这个输入数据量是map阶段的输出结果还是客户端提交任务时的数据量?
  • MongoDB 面试备战指南
  • 0.http协议详解
  • 地理信息可视化技术大全【WebGIS 教程一】
  • 软考系统架构师论文模版及实例
  • Spring Boot 项目打包运行
  • 项目流程中关键节点的测试类型
  • Spring IOC容器详解:深入理解控制反转与依赖注入
  • MySQL |表的约束
  • Unity Shader编程】之复杂光照
  • Box-Cox变换:让数据服从正态分布的数学魔法
  • node-red s7.net
  • Java 基础面试题
  • 常考计算机操作系统面试习题(一下)
  • Matlab教程001:软件介绍和界面使用
  • 力扣刷题78. 子集
  • Shiro框架漏洞攻略
  • BFS解决FloodFill算法
  • Chrome 133 版本开发者工具(DevTools)更新内容
  • Hadoop集群搭建(hdfs、yarn)
  • 深一度|有望冲击首轮秀?杨瀚森走出舒适圈站上大舞台
  • 深圳南山法院回应“执行款未到账”:张核子公司申请的执行异议成立
  • 中英举行人工智能对话
  • 人猴“攻防战”:难守的庄稼与扩张的猴群,部分村民选择放牧搬家
  • 改造老旧小区、建立“一张图”,五部委将多举措支持城市更新
  • 媒体:多家国有大行存款利率即将迎来新一轮下调