Router: RB5009UPr+S+ (arm64), RouterOS 7.24 (stable, build 2026-08-14)
Summary:
After upgrading to 7.24, a WireGuard peer that is disabled and then re-enabled
is never reinstalled into the WireGuard data plane. The peer shows as enabled
in the configuration and has no inactive flag, but it behaves as if it does
not exist: no handshake initiations are ever sent for it. The only way to
recover is to remove the peer and re-create it with identical settings.
Setup:
- Single wireguard interface (listen-port 15200) with 4 peers: two
road-warrior peers (no endpoint) and one site-to-site peer with
endpoint-address set to a DNS name, endpoint-port 51820,
persistent-keepalive 25s, and multiple allowed-address subnets. - The site-to-site peer worked correctly before the upgrade.
Symptoms while the peer is in the broken state:
-
Peer prints as enabled (no X flag, no inactive reason shown).
-
current-endpoint-address stays empty even though the DNS name resolves
fine with :resolve. -
rx=0 tx=0 forever; not a single handshake initiation is sent (verified
with /tool/sniffer filtered on the endpoint IP: zero packets in either
direction). Other peers on the same interface keep working normally. -
Pinging any destination inside the peer's allowed-address returns
"126 (No error information)" (errno 126 = ENOKEY, "Required key not
available"), i.e. the kernel has no peer owning those allowed IPs. -
Log shows no errors for this peer at all (other peers log normal
handshake retries). -
At one point the peer briefly displayed the inactive reason
"allowed-address match other peers", although its allowed-address does
not overlap with any other peer on the interface. This reason seems
spurious/stale. -
What does NOT fix it:
- Toggling the peer (disable + enable).
- Disabling and re-enabling the wireguard interface.
- Changing any peer property (endpoint to a literal IP, reducing
allowed-address to a single subnet, clearing client-* fields,
clearing peer private-key) followed by re-enable. - Disabling other peers on the interface.
What DOES fix it:
- /interface/wireguard/peers/remove the peer, then add it again with the
exact same settings. The new entry immediately resolves the endpoint,
sends a handshake, and passes traffic.
Reproduction (100% on this router):
- Take a working peer with endpoint-address + persistent-keepalive set.
- Disable it, then enable it.
- The peer never sends another handshake; traffic to its allowed-address
networks fails with errno 126. Only remove + re-add recovers it.