Guangran 发表于 7 天前

抢先体验 EVE-NG v7|v6 付费功能免费开放!Traffic Filters 直...

<h2>前言</h2>
<p>长期以来,EVE-NG 都是网络从业者公认的仿真利器,能够完整模拟华为、华三、思科、锐捷等多厂商硬件设备,是考证练习、网络架构调试验证的核心工具。早在 v6 版本,官方就上线了 Traffic Filters 流量可视化功能,依靠实时拓扑流量线条,把看不见的数据转发、故障切换过程直观呈现,大幅降低复杂组网实验的理解难度。但该功能仅对付费专业版开放,绝大多数普通用户只能望而却步。</p>
<p>近日,从 EVE-NG 亚太区独家代理商 EmulatedLab 社区获悉,即将正式发布的 EVE-NG v7 专业版大幅放宽权限,以往 v6 专业版必须购买授权才能使用的全部专属功能,如今无需付费授权即可免费使用,Traffic Filters 流量可视化也包含在内。该功能解决了复杂网络实验难以直观观测流量走向的痛点,在 @hbugs001 的协助下,我提前拿到 v7 体验版。本文以 Keepalived+LVS 高可用 Nginx 集群为例,完整实测 Traffic Filters,带你感受新版本的实操价值。</p>
<h2>一、实验准备</h2>
<h3>1.1 环境要求</h3>
<h4>EVE-NG 平台</h4>
<ul>
<li>EVE-NG <strong>v7</strong>(即将发布,本实验基于 v7 测试版验证;v6 专业版亦可完成全部实验);</li>
<li>EVE-NG 建议配置:CPU ≥ 16 核、内存 ≥ 32 GB、SSD ≥ 500 GB(5 台 openEuler 24.03 节点同时运行);</li>
<li>浏览器:Chrome / Edge 最新版(用于访问 EVE-NG Web 控制台)。</li>
</ul>
<h4>虚拟节点规划</h4>
<table>
<thead>
<tr>
<th>主机名</th>
<th>角色</th>
<th>数量</th>
<th>系统</th>
<th>CPU 内存</th>
</tr>
</thead>
<tbody>
<tr>
<td>lvs1</td>
<td>LVS+Keepalived<strong>主</strong>节点</td>
<td>1</td>
<td>openEuler 24.03 LTS</td>
<td>2 VCPU 4GB</td>
</tr>
<tr>
<td>lvs2</td>
<td>LVS+Keepalived<strong>备</strong>节点</td>
<td>1</td>
<td>openEuler 24.03 LTS</td>
<td>2 VCPU 4GB</td>
</tr>
<tr>
<td>nginx1</td>
<td>后端 Nginx 节点 1</td>
<td>1</td>
<td>openEuler 24.03 LTS</td>
<td>2 VCPU 4GB</td>
</tr>
<tr>
<td>nginx2</td>
<td>后端 Nginx 节点 2</td>
<td>1</td>
<td>openEuler 24.03 LTS</td>
<td>2 VCPU 4GB</td>
</tr>
<tr>
<td>client</td>
<td>客户端测试节点</td>
<td>1</td>
<td>openEuler 24.03 LTS</td>
<td>2 VCPU 4GB</td>
</tr>
</tbody>
</table>
<h4>网络规划</h4>
<table>
<thead>
<tr>
<th>网段</th>
<th>用途</th>
<th>关键 IP</th>
</tr>
</thead>
<tbody>
<tr>
<td>业务网段 192.168.10.0/24</td>
<td>客户端访问、LVS 对外服务、VIP 漂移</td>
<td>lvs1.ens4=192.168.10.11、lvs2.ens4=192.168.10.12、**VIP=192.168.10.100**、client=192.168.10.10</td>
</tr>
<tr>
<td>后端网段 172.29.129.0/24</td>
<td>LVS 与 Nginx 内部通信、nginx 默认网关</td>
<td>lvs1.ens3 / lvs2.ens3 / nginx1 / nginx2 全部为 DHCP 自动获取(实际:172.29.129.190 / 189 / 124 / 247),<strong>后端浮动 VIP=172.29.129.100</strong></td>
</tr>
</tbody>
</table>
<h3>1.2 实验拓扑图</h3>
<p><img src="data/attachment/forum/202606/21/215159k7hhwkq7hwksq3qq.webp" alt="" /></p>
<blockquote>
<p>Cloud 用于 NAT 访问互联网,默认网段:172.29.129.0/24,具有 DHCP。</p>
</blockquote>
<p><strong>VRRP 心跳</strong>:<code>lvs1</code> 与 <code>lvs2</code> 通过业务网段(Sw1)互发 VRRP 通告,协商主备,<strong>两个 VIP 都跟着 Master 漂移</strong>:</p>
<ul>
<li>业务 VIP <code>192.168.10.100</code> 漂在 lvs1 / lvs2 的 <code>ens4</code>(拓扑图中标注于 lvs1 e1 旁);</li>
<li>后端浮动 VIP <code>172.29.129.100</code> 漂在 lvs1 / lvs2 的 <code>ens3</code>(拓扑图中标注于 lvs1 e0 旁,<strong>作为 nginx 的稳定默认网关</strong>)。</li>
<li>Internet 是 EVE-NG 内置 nat0 类型的 Network 网络对象,采用 NAT 转发模式,为实验拓扑内所有设备提供外网访问通道,默认网段为 172.29.129.0/24。<br />
实验中 openEuler 虚拟机需要联网下载 yum 软件源,因此组网拓扑必须添加该 Internet 对象才能正常联网。</li>
</ul>
<p><strong>逻辑网段</strong>:</p>
<ul>
<li><strong>业务网段</strong> <code>192.168.10.0/24</code>:客户端与 LVS 业务网卡所在的对外服务网段,VIP <code>192.168.10.100</code> 浮动在 lvs1 / lvs2 的 <code>ens4</code> 上;</li>
<li><strong>后端网段</strong> <code>172.29.129.0/24</code>:LVS 与 Nginx 节点之间的内部通信网段,<strong><code>172.29.129.100</code> 作为浮动 VIP 充当 nginx 的稳定默认网关</strong>(避免 lvs1/lvs2 切换时 nginx 还要手动改网关)。LVS 通过 <code>ens3</code> 将请求转发至 Nginx1 / Nginx2。</li>
</ul>
<h3>1.3 节点系统初始配置</h3>
<p><strong>所有 5 个节点都执行</strong>:</p>
<pre><code class="language-bash"># 关 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
</code></pre>
<p><strong>仅 lvs1 / lvs2 额外执行</strong>:</p>
<pre><code class="language-bash"># 启用 IP 转发(LVS NAT 模式必须)
echo &quot;net.ipv4.ip_forward = 1&quot; &gt;&gt; /etc/sysctl.conf
sysctl -p

# 加载 IPVS 内核模块 + 开机自载
modprobe ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh
cat &gt; /etc/modules-load.d/ipvs.conf &lt;&lt; 'EOF'
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
EOF
</code></pre>
<h3>1.4 业务软件安装</h3>
<p><strong>lvs1 / lvs2 执行</strong>:</p>
<pre><code class="language-bash">yum install -y ipvsadm keepalived
</code></pre>
<p><strong>nginx1 / nginx2 执行</strong>(此时默认网关还是 DHCP 分配的 172.29.129.254,够装 nginx):</p>
<pre><code class="language-bash">yum install -y nginx
echo &quot;Nginx Node 1by grbj.cn&quot; &gt; /usr/share/nginx/html/index.html# nginx2 改 Node 2
systemctl enable --now nginx
curl -s http://127.0.0.1/# 验证:应该输出 &quot;Nginx Node 1 by grbj.cn&quot;
</code></pre>
<p><strong>client 执行</strong>:</p>
<pre><code class="language-bash">yum install -y curl
</code></pre>
<blockquote>
<p><strong>网关时序说明</strong>:nginx 节点装好后,默认网关仍是 <code>172.29.129.254</code>(外网路由器),必须在后续步骤中将它改为浮动 VIP <code>172.29.129.100</code>,否则 nginx 回包会绕过 LVS,形成流量环路。</p>
</blockquote>
<h2>二、实验配置</h2>
<h3>2.1 节点网络配置</h3>
<h4>LVS 节点(lvs1 改成 .11,lvs2 改成 .12)</h4>
<pre><code class="language-bash"># 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
</code></pre>
<h4>Nginx 节点(nginx1 改成 .247)</h4>
<pre><code class="language-bash"># 静态 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
</code></pre>
<h4>Client 节点</h4>
<pre><code class="language-bash"># 网关必须指向业务 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
</code></pre>
<h3>2.2 LVS 主/备 Keepalived 配置</h3>
<h4>(1) 网卡检测脚本(两台 LVS 都要)</h4>
<pre><code class="language-bash">cat &gt; /usr/local/bin/check_intf.sh &lt;&lt; 'EOF'
#!/bin/bash
IF=$1
[ -z &quot;$IF&quot; ] &amp;&amp; { echo &quot;Usage: $0 &lt;iface&gt;&quot; &gt;&amp;2; exit 2; }
[ &quot;$(cat /sys/class/net/$IF/operstate 2&gt;/dev/null)&quot; = &quot;up&quot; ] &amp;&amp; exit 0 || exit 1
EOF
chmod 755 /usr/local/bin/check_intf.sh
</code></pre>
<h4>(2) <code>/etc/keepalived/keepalived.conf</code>(主备共用,只改 3 行)</h4>
<pre><code class="language-conf">global_defs {
   router_id LVS_MASTER
   script_user root
   enable_script_security
}

vrrp_script check_ens3 { script &quot;/usr/local/bin/check_intf.sh ens3&quot;interval 2weight -30fall 3rise 2 }
vrrp_script check_ens4 { script &quot;/usr/local/bin/check_intf.sh ens4&quot;interval 2weight -30fall 3rise 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 PASSauth_pass 1111 }
    virtual_ipaddress { 192.168.10.100/24 dev ens4 label ens4:1 }
    track_script { check_ens3check_ens4 }
    notify_master &quot;/bin/true&quot;notify_backup &quot;/bin/true&quot;notify_fault &quot;/bin/true&quot;
}

# 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 PASSauth_pass 2222 }
    virtual_ipaddress { 172.29.129.100/24 dev ens3 label ens3:1 }
    track_script { check_ens3check_ens4 }
    notify_master &quot;/bin/true&quot;notify_backup &quot;/bin/true&quot;notify_fault &quot;/bin/true&quot;
}

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 3connect_port 80nb_get_retry 3delay_before_retry 3 } }
    real_server 172.29.129.247 80 { weight 1
      TCP_CHECK { connect_timeout 3connect_port 80nb_get_retry 3delay_before_retry 3 } }
}
</code></pre>
<p><strong>主备差异(只改这 3 行)</strong>:</p>
<table>
<thead>
<tr>
<th>位置</th>
<th>lvs1(主)</th>
<th>lvs2(备)</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>router_id</code></td>
<td><code>LVS_MASTER</code></td>
<td><code>LVS_BACKUP</code></td>
</tr>
<tr>
<td><code>VI_1.state</code></td>
<td><code>MASTER</code></td>
<td><code>BACKUP</code></td>
</tr>
<tr>
<td><code>VI_1.priority</code></td>
<td><code>110</code></td>
<td><code>100</code></td>
</tr>
</tbody>
</table>
<p>VI_2 主备都 <code>state BACKUP</code> + <code>priority 100</code>,靠 IP 大小决出(<code>192.168.10.12</code> &gt; <code>192.168.10.11</code>,lvs2 抢得)。</p>
<h3>2.3 启动</h3>
<p><strong>lvs1 / lvs2 执行</strong>:</p>
<pre><code class="language-bash"># 关掉 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 协商
</code></pre>
<p><strong>验证 lvs1(主)</strong>:</p>
<pre><code class="language-bash">ipvsadm -Ln
ip -4 addr show | grep -E &quot;192.168.10.100|172.29.129.100&quot;
</code></pre>
<p><img src="data/attachment/forum/202606/21/215159tu4xkasuu5u22n4k.webp" alt="" /></p>
<h2>三、EVE-NG 启用 Traffic Filters 流量可视化</h2>
<ol>
<li>
<p>在 EVE-NG 实验拓扑界面,点击左侧“Traffic Filters”。</p>
<p><img src="data/attachment/forum/202606/21/215159z4yzqbp4036g43bj.webp" alt="" /></p>
</li>
<li>
<p>点击“NEW FILTER”,添加过滤规则。</p>
<p><img src="data/attachment/forum/202606/21/215200xkuknx1kd719xpdw.webp" alt="" /></p>
</li>
<li>
<p>配置两个过滤参数。</p>
<p><strong>Filter 1(端口 80 + 包大小 &gt; 80 字节 = HTTP 业务流量)</strong>:</p>
<ul>
<li>Filter Title: <code>tcp port 80 and greater 80</code></li>
<li>Filter Expression: <code>tcp port 80 and greater 80</code></li>
<li>Timeout (milliseconds): 500</li>
<li>Filter Color: <code>#00ff00</code>(绿色)</li>
</ul>
<p><strong>Filter 2(端口 80 + 包大小 &lt; 80 字节 = TCP 握手/挥手)</strong>:</p>
<ul>
<li>Filter Title: <code>tcp port 80 and less 80</code></li>
<li>Filter Expression: <code>tcp port 80 and less 80</code></li>
<li>Timeout (milliseconds): 500</li>
<li>Filter Color: <code>#0000FF</code>(蓝色)</li>
</ul>
<p><img src="data/attachment/forum/202606/21/215159b6a22f6max47an40.webp" alt="" /></p>
<blockquote>
<p><strong>要点</strong>:<code>greater 80</code> / <code>less 80</code> 是 EVE-NG Traffic Filters 扩展 BPF,<strong>针对链路层 packet size</strong>(总字节数)。两条规则分开,可以把 HTTP 业务包(&gt;80 字节,带 payload)和 TCP 控制包(&lt;80 字节,SYN/FIN/ACK)用不同颜色区分,让流量视图更清晰。</p>
</blockquote>
</li>
</ol>
<h2>四、实验验证</h2>
<h3>4.1 正常业务调度验证</h3>
<ol>
<li>客户端循环访问 VIP,看后端轮询。</li>
</ol>
<pre><code class="language-bash">for i in $(seq 1 10); do
echo &quot;--- request #$i ---&quot;
curl -s http://192.168.10.100/
sleep 0.5
done
</code></pre>
<p><img src="data/attachment/forum/202606/21/215159go6fbybeeykkkf66.gif" alt="" /></p>
<ol start="2">
<li>观察 Traffic Filters 视图。</li>
</ol>
<p><img src="data/attachment/forum/202606/21/215159l2fn82620272525o.gif" alt="" /></p>
<ul>
<li>流量路径:客户端(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)。</li>
<li>流量线条交替闪烁,直观体现轮询调度;</li>
<li>统计面板展示数据包数量。</li>
</ul>
<h3>4.2 主LVS节点故障切换验证</h3>
<ol>
<li>手动将 Sw1 到 lvs1 的链路停止,模拟 lvs1 故障。</li>
<li><strong>等 5-10s 让 VRRP 协商完成</strong>。</li>
<li>客户端验证业务不中断。</li>
</ol>
<pre><code class="language-bash"># 在 client 执行
for i in 1 2 3 4 5; do
curl -s --max-time 3 -w &quot;code=%{http_code} time=%{time_total}s\n&quot; http://192.168.10.100/
sleep 0.5
done
</code></pre>
<ol start="4">
<li>Traffic Filters 现象:</li>
</ol>
<p><img src="data/attachment/forum/202606/21/215159k9i1yy1xug9hzuuu.gif" alt="" /></p>
<ul>
<li>业务 VIP <code>192.168.10.100</code> 与后端浮动 VIP <code>172.29.129.100</code> <strong>同步漂移至 lvs2</strong>(因为两个 VIP 都在 VI_1/VI_2 的 track_script 里跟踪同一对 ens3/ens4);</li>
<li>流量自动切换至 <code>client → Sw1 → lvs2(ens4 持 192.168.10.100) → Sw2 → nginx1/2</code> 链路,业务无中断;</li>
<li>Nginx 默认网关指向 172.29.129.100(后端浮动 VIP),始终跟随主节点切换,确保响应报文回程路径正确(<code>nginx → 172.29.129.100(lvs2 ens3) → lvs2 ens4 → client</code>)。</li>
</ul>
<ol start="6">
<li>恢复主节点服务(高 priority 110 会自动抢回):</li>
</ol>
<p><img src="data/attachment/forum/202606/21/215201zxkp7ehn5zqnp9ha.gif" alt="" /></p>
<h3>4.3 后端Nginx节点故障验证</h3>
<ol>
<li>将 Sw2 到 nginx1 的链路停止,模拟下线 Nginx1 服务。</li>
<li><strong>等 6s 让 LVS TCP_CHECK 判定故障</strong>(<code>delay_loop 6</code> × 1 轮 = 6s)。</li>
<li>Traffic Filters 现象。</li>
</ol>
<p><img src="data/attachment/forum/202606/21/215159pp6d6xxyhtnp67ch.gif" alt="" /></p>
<ul>
<li>LVS 健康检测判定 Nginx1(172.29.129.124) 失效,该节点链路流量线条消失;</li>
<li>所有请求统一转发至 Nginx2(172.29.129.247);</li>
<li>客户端 curl 全部返回 <code>Nginx Node 2</code>。</li>
</ul>
<h2>五、实验总结</h2>
<p>在此之前,Traffic Filters 一直是 EVE-NG 专业版的专属特权,不少想做可视化实验的爱好者、学生、中小企业只能放弃,或是额外承担授权成本。而 EVE-NG v7 直接取消付费门槛,让所有人都能零成本使用流量可视化,这一次更新彻底拓宽了模拟器的使用边界。</p>
<p>很多人固化认为 EVE-NG 只是网工刷题、调试交换路由的工具,但 Traffic Filters 免费开放后,它早已不再局限于传统网络场景。后端开发可以直观看懂负载均衡调度逻辑,安全从业者能够搭建低成本流量分析靶场,运维新人可快速理解集群故障漂移,甚至产品、测试等非技术人员,也能依托动态拓扑快速听懂底层业务流转逻辑。</p>
<p>过去想要复现集群故障、流量切换流程,要么采购昂贵商用可视化平台,要么冒险在线上环境测试,成本与风险双双拉满。如今仅靠一台普通服务器部署 EVE-NG v7,就能搭建完整可视化实验环境。本次 LVS+Keepalived 高可用集群只是其中一个典型案例,借助 Traffic Filters,我们还能拓展微服务链路追踪、渗透流量溯源、多区域业务容灾等大量跨界实验。</p>
<p>如果你还在用传统方式反复刷新页面、翻查日志判断流量走向,不妨试试新版 EVE-NG 的 Traffic Filters。曾经收费解锁的可视化能力现在人人可用,也让这款老牌模拟器拥有了完全不一样的使用方式,挖掘出远超网络仿真之外的全新价值。</p>

1903951 发表于 5 天前

<p>牛牛牛</p>
页: [1]
查看完整版本: 抢先体验 EVE-NG v7|v6 付费功能免费开放!Traffic Filters 直...