Kernaali Tools
MikroTik

MikroTik WireGuard Handshake but No Traffic

Trace allowed-address, routes, input versus forward rules and the return path when a RouterOS WireGuard peer handshakes but cannot reach the remote LAN.

A recent handshake proves that the peers exchanged authenticated tunnel messages. It does not prove that a client subnet has a route, is accepted by allowed-address, or can pass the forwarding policy. Follow one client-to-server flow in both directions before adjusting MTU.

Applies to: RouterOS 7 WireGuard, routed IPv4 site-to-site with separate LAN prefixes and a working recent handshake. The current peer reference is used; no platform-specific bug fix is asserted. A tunnel with no handshake needs endpoint, UDP reachability and key checks first.

Validation: documentation-checked on . No device or lab test is claimed. Version references identify the documentation checked, not a firmware upgrade recommendation.

Choose a flow and distinguish router-originated traffic

Synthetic topology: site A client 192.0.2.10/24 uses router A; site B server 198.51.100.20/24 uses router B. The WireGuard interfaces use 10.77.0.1/30 and 10.77.0.2/30. Test the intended server application, for example TCP 443, from the actual site A client.

A ping from router A can select its tunnel address and tests local output, not the client forward chain. A ping to router B also tests its input chain rather than forwarding to the server. Record the real source address for each result; do not treat these as equivalent tests.

Check the peer and route independently

Read-only • RouterOS 7, run the route check on site A
/interface/wireguard/peers/print proplist=interface,allowed-address,current-endpoint-address,current-endpoint-port,last-handshake,rx,tx
/ip/route/print detail where dst-address=198.51.100.0/24
/ip/firewall/filter/print stats where chain=forward

The peer on A must permit site B source prefixes and select that peer for outgoing destinations. B must permit site A sources. Include the tunnel addresses only when they are part of the intended router-to-router tests. Peers on the same WireGuard interface cannot have overlapping allowed-address ranges. Peer parameter reference explains that allowed-address serves both received-source validation and outgoing peer selection.

A matching allowed-address is not a substitute for the IP route to the remote LAN. Inspect the active route and next hop on each router; the official site-to-site example configures routes separately. A more-specific local route or a routing rule may change the actual lookup.

Read counters as a branch, not as a verdict

During the same testFollow this branch
No useful increase in A tunnel transmit trafficCheck client gateway, route selection and A forward policy
A transmits, B receives, server sees no requestCheck B allowed sources, forward policy and route to the server
Server receives the request but the client sees no responseCheck server firewall/service, default gateway, B route and A allowed sources
Small requests work; large transfers stallNow investigate path MTU, ICMP errors and MSS with controlled packet sizes

Counter changes may include other peer traffic. Keep the test narrow and correlate both ends. Do not publish peer identities, keys or complete exports as evidence.

Make the correction indicated by the failed hop

Add the one missing remote prefix to the appropriate peer only after checking it does not overlap another peer. Correct the specific route or add a source/destination/service-scoped forward permit at the intended point in the policy. Keep input permission separate if a router service is actually required. Do not add broad input accepts or masquerade every tunnel flow to hide a missing return route.

Changing allowed-address can remove working prefixes if you replace the list carelessly. Record the complete old list and affected rule or route before editing, retain an independent management path, and restore those exact values if the bounded test fails.

Verify both the new flow and the existing networks

Success means the real client completes the remote application transaction and receives replies with the expected source and route. Repeat from an existing working subnet and check that a disallowed client remains blocked. A fresh handshake by itself is not completion. Stop any temporary capture and remove only temporary test rules.

Technical references

Found an issue? Send a correction with a reproducible example.