ensp + vmware workstation模拟实验环境
实验拓扑

IP地址规划
|----------------|------|------------------|--------------|---------|
| | 接口 | IP地址 | 网关 | 虚拟IP |
| Client | - | 192.168.10.20/24 | 192.168.10.1 | |
| Virtual Server | 外网 | 123.1.1.100/24 | 123.1.1.1 | 与物理接口相同 |
| Virtual Server | DIP | 172.16.1.101/24 | - | |
| Real Server1 | RIP1 | 172.16.1.21/24 | 172.16.1.1 | |
| Real Server1 | lo | 123.1.1.100/32 | | |
| Real Server2 | RIP2 | 172.16.1.22/24 | 172.16.1.1 | |
| Real Server2 | lo | 123.1.1.100/32 | | |
| Real Server3 | RIP3 | 172.16.1.23/24 | 172.16.1.1 | |
| Real Server3 | lo | 123.1.1.100/32 | | |
virtual server即调度器在收到client的请求后,更改目标MAC为实际real server的MAC,real server收到virtual server转发过来的请求后,以源IP为VIP直接响应该请求,无需像route模式一样由virtaul server中转,提高效率。
注意:本实验中模拟了公网IP地址,测试时需要把能连外网的网卡临时禁用。若不想禁用,需要添加一条路由,route add 123.1.1.0 mask 255.255.255.0 192.168.10.1

一、在windows中添加loopback网卡
打开设备管理器devmgmt.msc






添加完成后打开网络连接管理界面ncpa.cpl,可以看到刚添加的网卡,根据需要进行重命名。


loopback1的IP地址配置为192.168.10.20/24,loopback2和loopback3的IP地址暂不配置

添加完成后重启计算机,否则ensp识别不到
二、编辑vmware网络配置
在虚拟网络编辑器里将刚添加的三个loopback接口添加进来





三、设置虚拟机网卡
virtaul-server添加两块网卡,桥接到vmnet12和13

real-server添加一块网卡,桥接到vmnet13 三台real-server配置相同

四、配置ENSP,打通网络
4.1 拓扑绘制
添加三朵云,右击设置





按上面步骤依次设置三朵云
4.2 地址规划

4.3 路由配置
R1配置
sysname R1
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.252
ospf network-type p2p
interface GigabitEthernet0/0/1
ip address 192.168.10.1 255.255.255.0
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 1.1.1.1 0.0.0.0
network 12.1.1.1 0.0.0.0
network 192.168.10.1 0.0.0.0
R2配置
sysname R2
acl number 2000
rule 5 permit source 172.16.1.0 0.0.0.255
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.252
ospf network-type p2p
nat outbound 2000 interface LoopBack 10
interface GigabitEthernet0/0/1
ip address 123.1.1.1 255.255.255.0
interface GigabitEthernet0/0/2
ip address 172.16.1.1 255.255.255.0
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
interface LoopBack10
ip address 10.10.10.10 255.255.255.255
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 10.10.10.10 0.0.0.0
network 12.1.1.2 0.0.0.0
network 123.1.1.1 0.0.0.0
五、LVS配置
5.1 virtual server设置
root@virtserv \~\]# cat /etc/redhat-release Rocky Linux release 9.5 (Blue Onyx) 设置IP地址     注意:需要调整内网网卡不做为默认路由,否则产生无法ping通的问题。尤其在测试时执行 nmcli connection down ens160 关闭ens160网卡后,默认路由就走ens192,再启动ens160仍不会恢复,导致网络问题。   关闭防火墙  禁用selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config  测试网络是否通  开启路由转发功能 echo 'net.ipv4.ip_forward = 1' \> /etc/sysctl.conf sysctl -p 安装ipvsadm包 dnf -y install ipvsadm ipvsadm规则配置 ipvsadm -A -t 123.1.1.100:80 -s wrr ipvsadm -a -t 123.1.1.100:80 -r 172.16.1.21:80 -g -w 1 ipvsadm -a -t 123.1.1.100:80 -r 172.16.1.22:80 -g -w 1 ipvsadm -a -t 123.1.1.100:80 -r 172.16.1.23:80 -g -w 1 保存配置 ipvsadm-save -n \> /etc/sysconfig/ipvsadm 设置开机自启动 systemctl enable --now ipvsadm 若每次重启ipvsadm就清空配置,尝试如下设置 \[root@virtserv \~\]# find /etc -name \*ipvsadm\* /etc/sysconfig/ipvsadm-config /etc/sysconfig/ipvsadm /etc/systemd/system/multi-user.target.wants/ipvsadm.service \[root@virtserv \~\]# vim /usr/lib/systemd/system/ipvsadm.service 把里面的stop执行动作删除  修改后  systemctl disable --now ipvsadm systemctl enable --now ipvsadm ### 5.2 real server设置 显示单台配置,其余类似 关闭防火墙、禁用selinux同virtual server  nmtui界面里没有lo接口 使用命令直接为lo增加虚拟IP nmcli connection modify lo +ipv4.addresses 123.1.1.100/32 nmcli connection up lo 上面添加的虚拟IP,在系统重启后没有自动加载,但查看配置文件里有 未发现虚拟IP,如下图  配置文件中存在该虚拟地址,但autoconnect没开启 \[root@realser2 \~\]# cat /etc/NetworkManager/system-connections/lo.nmconnection \[connection
id=lo
uuid=ee6498a6-1693-4ece-bbac-0b71a2e6755c
type=loopback
autoconnect=false
interface-name=lo
timestamp=1778590005
loopback
ipv4
address1=127.0.0.1/8
address2=123.1.1.100/32
method=manual
ipv6
addr-gen-mode=default
address1=::1/128
method=manual
proxy
使用下面命令将lo设置为自动连接,正常用名字lo即可,若提示名字冲突,可改为uuid
nmcli connection modify ee6498a6-1693-4ece-bbac-0b71a2e6755c autoconnect yes
设置非必要不响应arp请求,也不主动发
echo 'net.ipv4.conf.all.arp_ignore = 1' >> /etc/sysctl.conf
echo 'net.ipv4.conf.all.arp_announce = 2' >> /etc/sysctl.conf
echo 'net.ipv4.conf.lo.arp_ignore = 1' >> /etc/sysctl.conf
echo 'net.ipv4.conf.lo.arp_announce = 2' >> /etc/sysctl.conf
sysctl -p
安装nginx
dnf -y install nginx
echo 'real server 11111' > /etc/sysctl.conf
systemctl enable --now nginx
六、效果验证


七、存在问题
lvs不具备检测后端real server的服务是否正常的功能
当后端某一real server服务异常后

需要编写脚本进行检测
root@virtserv \~\]# cat check.sh #!/bin/bash rip1=172.16.1.21 rip2=172.16.1.22 rip3=172.16.1.23 while true; do curl http://$rip1 \&\> /dev/null if \[ $? -eq 0 \]; then ipvsadm -a -t 123.1.1.100:80 -r $rip1 -g \&\> /dev/null else ipvsadm -d -t 123.1.1.100:80 -r $rip1 \&\> /dev/null fi curl http://$rip2 \&\> /dev/null if \[ $? -eq 0 \]; then ipvsadm -a -t 123.1.1.100:80 -r $rip2 -g \&\> /dev/null else ipvsadm -d -t 123.1.1.100:80 -r $rip2 \&\> /dev/null fi curl http://$rip3 \&\> /dev/null if \[ $? -eq 0 \]; then ipvsadm -a -t 123.1.1.100:80 -r $rip3 -g \&\> /dev/null else ipvsadm -d -t 123.1.1.100:80 -r $rip3 \&\> /dev/null fi sleep 2 done \[root@virtserv \~\]# chmod +x check.sh \[root@virtserv \~\]# nohup sh /root/check.sh \& 当后端real server服务连接不上时,自动删除,恢复后自动添加进来 