抢先体验 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 内存
lvs1 LVS+Keepalived 节点 1 openEuler 24.03 LTS 2 VCPU 4GB
lvs2 LVS+Keepalived 节点 1 openEuler 24.03 LTS 2 VCPU 4GB
nginx1 后端 Nginx 节点 1 1 openEuler 24.03 LTS 2 VCPU 4GB
nginx2 后端 Nginx 节点 2 1 openEuler 24.03 LTS 2 VCPU 4GB
client 客户端测试节点 1 openEuler 24.03 LTS 2 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/24 LVS 与 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_id LVS_MASTER LVS_BACKUP
VI_1.state MASTER BACKUP
VI_1.priority 110 100

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,我们还能拓展微服务链路追踪、渗透流量溯源、多区域业务容灾等大量跨界实验。

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

上一篇 给网站的邮件评论通知功能补齐了