Potential bug: Inconsistent next-hop resolution in multi-homed same-subnet setup
HaoRanLiu
mcyouyousever at gmail.com
Sun Jan 11 15:04:41 CET 2026
Hello,
I am writing to report a potential issue (or seek clarification on
resolution logic) in BIRD 2.17.1 regarding how next hops are resolved
when multiple interfaces exist in the same subnet.
[ Environment ]
- BIRD version: 2.17.1
- OS: Linux
- Setup: Multiple physical interfaces (ens4, ens23, ens2) are configured
with IP addresses in the same prefix: 203.163.222.0/23.
[ Observation ]
Within a specific routing table (table_tpix_210440_v4), BIRD's recursive
resolution for a BGP route does not seem to honor the "Direct/Device"
route present in that same table.
[ Evidence ]
1. The Direct Route in table "table_tpix_210440_v4" points to ens4:
bird> show route for 203.163.222.39/32 table table_tpix_210440_v4 all
Table table_tpix_210440_v4:
203.163.222.0/23 unicast [direct_tpix_210440 2026-01-11 21:10:29] *
(240)
dev ens4
Type: device univ
2. However, a BGP route in the SAME table resolves via ens23:
bird> show route for 1.1.1.1 table table_tpix_210440_v4 all
Table table_tpix_210440_v4:
1.1.1.0/24 unicast [cloudflare_tpix_210440_v4 2026-01-11
21:33:43] * (100) [AS13335i]
via 203.163.222.39 on ens23
Type: BGP univ
BGP.origin: IGP
BGP.as_path: 13335
BGP.next_hop: 203.163.222.39
...
[ System Network State ]
The OS kernel shows three interfaces in this subnet:
# ip route show 203.163.222.0/23
203.163.222.0/23 dev ens23 proto kernel scope link src 203.163.223.49
203.163.222.0/23 dev ens2 proto kernel scope link src 203.163.223.50
203.163.222.0/23 dev ens4 proto kernel scope link src 203.163.223.48
[ Questions ]
1. Is this a bug in the recursive resolution logic? It appears BIRD
might be picking an interface from the global interface list (perhaps
the first one UP) rather than following the best route available in the
specific table being queried.
2. Why does the BGP route's "via" field not honor the interface (ens4)
defined by the device route in the same table?
3. Is there any configuration to force BIRD to resolve next hops
strictly based on the current table's best path in such multi-homed
scenarios?
Any insights would be appreciated.
Best regards,
Liu HaoRan
More information about the Bird-users
mailing list