Page MenuHomeVyOS Platform

WAN load balancer only activates first interface, ignoring additional WAN interfaces
Closed, InvalidPublicBUG

Description

Sample config:

set load-balancing wan interface-health eth0 nexthop '10.217.32.254'
set load-balancing wan interface-health eth0 test 10 target '8.8.8.8'
set load-balancing wan interface-health eth1 nexthop '192.168.1.1'
set load-balancing wan interface-health eth1 test 10 target '1.1.1.1'
set load-balancing wan rule 1 failover
set load-balancing wan rule 1 inbound-interface 'eth5'
set load-balancing wan rule 1 interface eth0 weight '2'
set load-balancing wan rule 1 interface eth1 weight '1'
set load-balancing wan rule 1 protocol 'all'

When configuring WAN load balancing with two or more interfaces, only the first interface is ever used for traffic. The second interface never becomes active in the forwarding path, even when its health checks are passing.
An example config above, with eth0 and eth1 configured in a failover rule with eth1 as primary (weight 1) and eth0 as backup (weight 2), all traffic is sent via eth0. show wan-load-balance status only shows a rule for eth0, and the journal only logs State change: eth0 -> True with no mention of eth1.
Manually pinging the health check target from eth1 succeeds, confirming the link is healthy. Restarting the service does not resolve the issue.

vyos@vyos:~$ show wan-load-balance
Interface: eth0
Status: active
Last Status Change: 2026-04-17 11:36:22
Last Interface Success: 0:02:53.578027
Last Interface Failure: N/A
Interface Failures: 0

Interface: eth1
Status: active
Last Status Change: 2026-04-17 11:36:22
Last Interface Success: 0:02:53.536477
Last Interface Failure: N/A
Interface Failures: 0

vyos@vyos:~$ show wan-load-balance status
iifname "eth5" ct state new counter packets 0 bytes 0 jump wlb_mangle_isp_eth0

Logs:

Apr 17 11:22:51 vyos systemd[1]: Stopping VyOS WAN Load Balancer...
Apr 17 11:22:51 vyos python3[13228]: Notice: Waiting for commit to complete...
Apr 17 11:22:51 vyos python3[13228]: Notice: Waiting for commit to complete...
Apr 17 11:22:51 vyos python3[13228]: INFO: State change: eth0 -> True
Apr 17 11:22:51 vyos systemd[1]: vyos-wan-load-balance.service: Deactivated successfully.
Apr 17 11:22:51 vyos systemd[1]: Stopped VyOS WAN Load Balancer.
Apr 17 11:22:51 vyos systemd[1]: vyos-wan-load-balance.service: Consumed 3.087s CPU time.
Apr 17 11:22:51 vyos systemd[1]: Started VyOS WAN Load Balancer.
Apr 17 11:27:25 vyos systemd[1]: Stopping VyOS WAN Load Balancer...
Apr 17 11:27:25 vyos python3[14741]: Notice: Waiting for commit to complete...
Apr 17 11:27:25 vyos python3[14741]: Notice: Waiting for commit to complete...
Apr 17 11:27:25 vyos python3[14741]: INFO: State change: eth0 -> True
Apr 17 11:27:25 vyos systemd[1]: vyos-wan-load-balance.service: Deactivated successfully.
Apr 17 11:27:25 vyos systemd[1]: Stopped VyOS WAN Load Balancer.
Apr 17 11:27:25 vyos systemd[1]: vyos-wan-load-balance.service: Consumed 2.763s CPU time.
Apr 17 11:27:25 vyos systemd[1]: Started VyOS WAN Load Balancer.

Version:

vyos@vyos:~$ show vers
Version:          VyOS 1.5.0
Release train:    circinus
Release flavor:   kvm

Built by:         VyOS Inc.
Built on:         Mon 30 Mar 2026 15:13 UTC
Build UUID:       8fc890cf-a392-4c1b-a7a2-700d311cd0c7
Build commit ID:  cb47cdb72c6d08

Details

Version
1.5.0
Is it a breaking change?
Unspecified (possibly destroys the router)
Issue type
Bug (incorrect behavior)

Event Timeline

I was going through the code in:

/usr/libexec/vyos/vyos-load-balancer.py

init = False is set inside the for loop, which will cause the rest of the interfaces to not initialize:

#Force state changed to trigger the first write
if init == True:
    state['state_changed'] = True
    init = False
Viacheslav subscribed.

In failover mode, only one interface is active at a time.