抢先体验 EVE-NG v7|v6 付费功能免费开放!Traffic Filters 直观观测负载均衡流量切换

抢先体验 EVE-NG v7|v6 付费功能免费开放!Traffic Filters 直观观测负载均衡流量切换

前言

长期以来,EVE-NG 都是网络从业者公认的仿真利器,能够完整模拟华为、华三、思科、锐捷等多厂商硬件设备,是考证练习、网络架构调试验证的核心工具。早在 v6 版本,官方就上线了 Traffic Filters 流量可视化功能,依靠实时拓扑流量线条,把看不见的数据转发、故障切换过程直观呈现,大幅降低复杂组网实验的理解难度。但该功能仅对付费专业版开放,绝大多数普通用户只能望而却步。

近日,从 EVE-NG 亚太区独家代理商 EmulatedLab 社区获悉,即将正式发布的 EVE-NG v7 专业版大幅放宽权限,以往 v6 专业版必须购买授权才能使用的全部专属功能,如今无需付费授权即可免费使用,Traffic Filters 流量可视化也包含在内。该功能解决了复杂网络实验难以直观观测流量走向的痛点,在 @hbugs001 的协助下,我提前拿到 v7 体验版。本文以 Keepalived+LVS 高可用 Nginx 集群为例,完整实测 Traffic Filters,带你感受新版本的实操价值。

一、实验准备

1.1 环境要求

EVE-NG 平台
  • EVE-NG v7(即将发布,本实验基于 v7 测试版验证;v6 专业版亦可完成全部实验);
  • EVE-NG 建议配置:CPU ≥ 16 核、内存 ≥ 32 GB、SSD ≥ 500 GB(5 台 openEuler 24.03 节点同时运行);
  • 浏览器:Chrome / Edge 最新版(用于访问 EVE-NG Web 控制台)。
虚拟节点规划
主机名角色数量系统CPU 内存
lvs1LVS+Keepalived 节点1openEuler 24.03 LTS2 VCPU 4GB
lvs2LVS+Keepalived 节点1openEuler 24.03 LTS2 VCPU 4GB
nginx1后端 Nginx 节点 11openEuler 24.03 LTS2 VCPU 4GB
nginx2后端 Nginx 节点 21openEuler 24.03 LTS2 VCPU 4GB
client客户端测试节点1openEuler 24.03 LTS2 VCPU 4GB
网络规划
网段用途关键 IP
业务网段 192.168.10.0/24客户端访问、LVS 对外服务、VIP 漂移lvs1.ens4=192.168.10.11、lvs2.ens4=192.168.10.12、VIP=192.168.10.100、client=192.168.10.10
后端网段 172.29.129.0/24LVS 与 Nginx 内部通信、nginx 默认网关lvs1.ens3 / lvs2.ens3 / nginx1 / nginx2 全部为 DHCP 自动获取(实际:172.29.129.190 / 189 / 124 / 247),后端浮动 VIP=172.29.129.100

1.2 实验拓扑图

Cloud 用于 NAT 访问互联网,默认网段:172.29.129.0/24,具有 DHCP。

VRRP 心跳lvs1lvs2 通过业务网段(Sw1)互发 VRRP 通告,协商主备,两个 VIP 都跟着 Master 漂移

  • 业务 VIP 192.168.10.100 漂在 lvs1 / lvs2 的 ens4(拓扑图中标注于 lvs1 e1 旁);
  • 后端浮动 VIP 172.29.129.100 漂在 lvs1 / lvs2 的 ens3(拓扑图中标注于 lvs1 e0 旁,作为 nginx 的稳定默认网关)。
  • Internet 是 EVE-NG 内置 nat0 类型的 Network 网络对象,采用 NAT 转发模式,为实验拓扑内所有设备提供外网访问通道,默认网段为 172.29.129.0/24。
    实验中 openEuler 虚拟机需要联网下载 yum 软件源,因此组网拓扑必须添加该 Internet 对象才能正常联网。

逻辑网段

  • 业务网段 192.168.10.0/24:客户端与 LVS 业务网卡所在的对外服务网段,VIP 192.168.10.100 浮动在 lvs1 / lvs2 的 ens4 上;
  • 后端网段 172.29.129.0/24:LVS 与 Nginx 节点之间的内部通信网段,172.29.129.100 作为浮动 VIP 充当 nginx 的稳定默认网关(避免 lvs1/lvs2 切换时 nginx 还要手动改网关)。LVS 通过 ens3 将请求转发至 Nginx1 / Nginx2。

1.3 节点系统初始配置

所有 5 个节点都执行

# 关 firewalld / SELinux(避免拦截实验流量)
systemctl disable --now firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

# 改主机名(对应节点执行对应命令)
hostnamectl set-hostname lvs1   # lvs2 / nginx1 / nginx2 / client

仅 lvs1 / lvs2 额外执行

# 启用 IP 转发(LVS NAT 模式必须)
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

# 加载 IPVS 内核模块 + 开机自载
modprobe ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh
cat > /etc/modules-load.d/ipvs.conf << 'EOF'
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
EOF

1.4 业务软件安装

lvs1 / lvs2 执行

yum install -y ipvsadm keepalived

nginx1 / nginx2 执行(此时默认网关还是 DHCP 分配的 172.29.129.254,够装 nginx):

yum install -y nginx
echo "Nginx Node 1  by grbj.cn" > /usr/share/nginx/html/index.html  # nginx2 改 Node 2
systemctl enable --now nginx
curl -s http://127.0.0.1/  # 验证:应该输出 "Nginx Node 1 by grbj.cn"

client 执行

yum install -y curl

网关时序说明:nginx 节点装好后,默认网关仍是 172.29.129.254(外网路由器),必须在后续步骤中将它改为浮动 VIP 172.29.129.100,否则 nginx 回包会绕过 LVS,形成流量环路。

二、实验配置

2.1 节点网络配置

LVS 节点(lvs1 改成 .11,lvs2 改成 .12)
# ens3 后端网卡:DHCP 但屏蔽 .254 默认路由(避免 LVS 自身发出的包被外网路由器劫持)
nmcli con mod ens3 ipv4.method auto ipv4.never-default yes autoconnect yes
nmcli con up ens3

# ens4 业务网卡:静态
nmcli con mod ens4 ipv4.addresses 192.168.10.11/24 ipv4.method manual ipv4.never-default yes
nmcli con up ens4
Nginx 节点(nginx1 改成 .247)
# 静态 IP,网关指向 LVS 后端浮动 VIP(响应报文走浮动网关才能回 LVS,否则形成流量环路)
nmcli con mod ens3 ipv4.addresses 172.29.129.124/24 ipv4.gateway 172.29.129.100 \
             ipv4.method manual autoconnect yes
nmcli con up ens3
Client 节点
# 网关必须指向业务 VIP 192.168.10.100,不能指 lvs1 物理 IP(.11),否则 lvs1 故障时 client 全断网
nmcli con mod ens3 ipv4.addresses 192.168.10.10/24 ipv4.gateway 192.168.10.100 \
             ipv4.method manual
nmcli con up ens3

2.2 LVS 主/备 Keepalived 配置

(1) 网卡检测脚本(两台 LVS 都要)
cat > /usr/local/bin/check_intf.sh << 'EOF'
#!/bin/bash
IF=$1
[ -z "$IF" ] && { echo "Usage: $0 <iface>" >&2; exit 2; }
[ "$(cat /sys/class/net/$IF/operstate 2>/dev/null)" = "up" ] && exit 0 || exit 1
EOF
chmod 755 /usr/local/bin/check_intf.sh
(2) /etc/keepalived/keepalived.conf(主备共用,只改 3 行)
global_defs {
   router_id LVS_MASTER
   script_user root
   enable_script_security
}

vrrp_script check_ens3 { script "/usr/local/bin/check_intf.sh ens3"  interval 2  weight -30  fall 3  rise 2 }
vrrp_script check_ens4 { script "/usr/local/bin/check_intf.sh ens4"  interval 2  weight -30  fall 3  rise 2 }

# VI_1 业务 VIP 绑 ens4
vrrp_instance VI_1 {
    state MASTER
    interface ens4
    virtual_router_id 51
    priority 110
    advert_int 1
    authentication { auth_type PASS  auth_pass 1111 }
    virtual_ipaddress { 192.168.10.100/24 dev ens4 label ens4:1 }
    track_script { check_ens3  check_ens4 }
    notify_master "/bin/true"  notify_backup "/bin/true"  notify_fault "/bin/true"
}

# VI_2 后端浮动 VIP 绑 ens3(nginx 默认网关,必须和 VI_1 同步漂移)
vrrp_instance VI_2 {
    state BACKUP
    interface ens3
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication { auth_type PASS  auth_pass 2222 }
    virtual_ipaddress { 172.29.129.100/24 dev ens3 label ens3:1 }
    track_script { check_ens3  check_ens4 }
    notify_master "/bin/true"  notify_backup "/bin/true"  notify_fault "/bin/true"
}

virtual_server 192.168.10.100 80 {
    delay_loop 6
    lb_kind NAT
    lb_algo rr
    persistence_timeout 50
    protocol TCP
    real_server 172.29.129.124 80 { weight 1
        TCP_CHECK { connect_timeout 3  connect_port 80  nb_get_retry 3  delay_before_retry 3 } }
    real_server 172.29.129.247 80 { weight 1
        TCP_CHECK { connect_timeout 3  connect_port 80  nb_get_retry 3  delay_before_retry 3 } }
}

主备差异(只改这 3 行):

位置lvs1(主)lvs2(备)
router_idLVS_MASTERLVS_BACKUP
VI_1.stateMASTERBACKUP
VI_1.priority110100

VI_2 主备都 state BACKUP + priority 100,靠 IP 大小决出(192.168.10.12 > 192.168.10.11,lvs2 抢得)。

2.3 启动

lvs1 / lvs2 执行

# 关掉 keepalived 自动重启(故障测试时 stop 不会被立刻拉起)
sed -i 's/^Restart=.*/Restart=no/' /usr/lib/systemd/system/keepalived.service
systemctl daemon-reload

touch /etc/sysconfig/ipvsadm
systemctl enable --now keepalived
sleep 8   # 等 VRRP 协商

验证 lvs1(主)

ipvsadm -Ln
ip -4 addr show | grep -E "192.168.10.100|172.29.129.100"

三、EVE-NG 启用 Traffic Filters 流量可视化

  1. 在 EVE-NG 实验拓扑界面,点击左侧“Traffic Filters”。

  2. 点击“NEW FILTER”,添加过滤规则。

  3. 配置两个过滤参数。

    Filter 1(端口 80 + 包大小 > 80 字节 = HTTP 业务流量)

    • Filter Title: tcp port 80 and greater 80
    • Filter Expression: tcp port 80 and greater 80
    • Timeout (milliseconds): 500
    • Filter Color: #00ff00(绿色)

    Filter 2(端口 80 + 包大小 < 80 字节 = TCP 握手/挥手):

    • Filter Title: tcp port 80 and less 80
    • Filter Expression: tcp port 80 and less 80
    • Timeout (milliseconds): 500
    • Filter Color: #0000FF(蓝色)

    要点greater 80 / less 80 是 EVE-NG Traffic Filters 扩展 BPF,针对链路层 packet size(总字节数)。两条规则分开,可以把 HTTP 业务包(>80 字节,带 payload)和 TCP 控制包(<80 字节,SYN/FIN/ACK)用不同颜色区分,让流量视图更清晰。

四、实验验证

4.1 正常业务调度验证

  1. 客户端循环访问 VIP,看后端轮询。
for i in $(seq 1 10); do
  echo "--- request #$i ---"
  curl -s http://192.168.10.100/
  sleep 0.5
done

  1. 观察 Traffic Filters 视图。

  • 流量路径:客户端(192.168.10.0/24) → SW1 → LVS-MASTER(ens4 持 192.168.10.100,ens3 持 172.29.129.100) → Nginx1(172.29.129.124)/Nginx2(172.29.129.247)。
  • 流量线条交替闪烁,直观体现轮询调度;
  • 统计面板展示数据包数量。

4.2 主LVS节点故障切换验证

  1. 手动将 Sw1 到 lvs1 的链路停止,模拟 lvs1 故障。

  2. 等 5-10s 让 VRRP 协商完成

  3. 客户端验证业务不中断。

# 在 client 执行
for i in 1 2 3 4 5; do
  curl -s --max-time 3 -w "code=%{http_code} time=%{time_total}s\n" http://192.168.10.100/
  sleep 0.5
done
  1. Traffic Filters 现象:

  • 业务 VIP 192.168.10.100 与后端浮动 VIP 172.29.129.100 同步漂移至 lvs2(因为两个 VIP 都在 VI_1/VI_2 的 track_script 里跟踪同一对 ens3/ens4);
  • 流量自动切换至 client → Sw1 → lvs2(ens4 持 192.168.10.100) → Sw2 → nginx1/2 链路,业务无中断;
  • Nginx 默认网关指向 172.29.129.100(后端浮动 VIP),始终跟随主节点切换,确保响应报文回程路径正确(nginx → 172.29.129.100(lvs2 ens3) → lvs2 ens4 → client)。
  1. 恢复主节点服务(高 priority 110 会自动抢回):

4.3 后端Nginx节点故障验证

  1. 将 Sw2 到 nginx1 的链路停止,模拟下线 Nginx1 服务。
  2. 等 6s 让 LVS TCP_CHECK 判定故障delay_loop 6 × 1 轮 = 6s)。
  3. Traffic Filters 现象。

  • LVS 健康检测判定 Nginx1(172.29.129.124) 失效,该节点链路流量线条消失;
  • 所有请求统一转发至 Nginx2(172.29.129.247);
  • 客户端 curl 全部返回 Nginx Node 2

五、实验总结

在此之前,Traffic Filters 一直是 EVE-NG 专业版的专属特权,不少想做可视化实验的爱好者、学生、中小企业只能放弃,或是额外承担授权成本。而 EVE-NG v7 直接取消付费门槛,让所有人都能零成本使用流量可视化,这一次更新彻底拓宽了模拟器的使用边界。

很多人固化认为 EVE-NG 只是网工刷题、调试交换路由的工具,但 Traffic Filters 免费开放后,它早已不再局限于传统网络场景。后端开发可以直观看懂负载均衡调度逻辑,安全从业者能够搭建低成本流量分析靶场,运维新人可快速理解集群故障漂移,甚至产品、测试等非技术人员,也能依托动态拓扑快速听懂底层业务流转逻辑。

过去想要复现集群故障、流量切换流程,要么采购昂贵商用可视化平台,要么冒险在线上环境测试,成本与风险双双拉满。如今仅靠一台普通服务器部署 EVE-NG v7,就能搭建完整可视化实验环境。本次 LVS+Keepalived 高可用集群只是其中一个典型案例,借助 Traffic Filters,我们还能拓展微服务链路追踪、渗透流量溯源、多区域业务容灾等大量跨界实验。

调试交换路由的工具,但 Traffic Filters 免费开放后,它早已不再局限于传统网络场景。后端开发可以直观看懂负载均衡调度逻辑,安全从业者能够搭建低成本流量分析靶场,运维新人可快速理解集群故障漂移,甚至产品、测试等非技术人员,也能依托动态拓扑快速听懂底层业务流转逻辑。

过去想要复现集群故障、流量切换流程,要么采购昂贵商用可视化平台,要么冒险在线上环境测试,成本与风险双双拉满。如今仅靠一台普通服务器部署 EVE-NG v7,就能搭建完整可视化实验环境。本次 LVS+Keepalived 高可用集群只是其中一个典型案例,借助 Traffic Filters,我们还能拓展微服务链路追踪、渗透流量溯源、多区域业务容灾等大量跨界实验。

如果你还在用传统方式反复刷新页面、翻查日志判断流量走向,不妨试试新版 EVE-NG 的 Traffic Filters。曾经收费解锁的可视化能力现在人人可用,也让这款老牌模拟器拥有了完全不一样的使用方式,挖掘出远超网络仿真之外的全新价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值