I am experimenting with the setup shown in the following diagram. I am running into some asymmetric routing issues. I am pretty sure I know exactly what the problem is (connections to the wireguard server can arrive along either interface meaning the multi wan example rules in WireGuard - RouterOS - MikroTik Documentation don’t work), however I am struggling with the solution.
Given the following network diagram as an example with clients accessing the wireguard server via the loopback address of router B:
A sample config from router B:
/interface wireguard
add listen-port=51822 mtu=1420 name=wg1
/interface wireguard peers
add allowed-address=10.20.30.40/32, interface=wg1 name=peer2 preshared-key="xxxxx" public-key="xxxxx"
The following two packet captures illustrate the issue with the asymmetric routing nicely.
When both links are up the response is sent along the other link with a different source port causing issues.
"No.","Time","Source","UDP Src Port","Destination","UDP Dst Port","Protocol","Interface","Length","Info","Comments"
"269","2025-12-31 00:40:16.774483520","192.168.1.16","49932","172.21.16.80","51822","WireGuard","ether9 rx","190","Handshake Initiation, sender=0x4781507B","cpu:1 fp:0"
"270","2025-12-31 00:40:16.776033920","172.21.16.80","38151","192.168.1.16","49932","WireGuard","ether10 tx","134","Handshake Response, sender=0x51772FCB, receiver=0x4781507B","cpu:0 fp:0"
When only one link is up (i.e. no equal costs) the reply is sent along the same link with 51822 as the source port, as expected and thus not breaking connections.
"No.","Time","Source","UDP Src Port","Destination","UDP Dst Port","Protocol","Interface","Length","Info","Comments"
"2378","2025-12-31 00:59:19.423622080","192.168.1.16","48568","172.21.16.80","51822","WireGuard","ether9 rx","190","Handshake Initiation, sender=0xDFF34FB5","cpu:1 fp:0"
"2379","2025-12-31 00:59:19.425100640","172.21.16.80","51822","192.168.1.16","48568","WireGuard","ether9 tx","134","Handshake Response, sender=0x1656643F, receiver=0xDFF34FB5","cpu:0 fp:0"
In terms of what I have tried, applying similar rules as detailed in WireGuard - RouterOS - MikroTik Documentation does succeed in ensuring traffic is returned on the same interface the client originally connected to, however subsequent traffic may arrive at either interface but is then returned on the original interface thus breaking the connection again. I know a simple solution would to be just alter the costs of the links to make them not equal, however I would like to find a solution that allows this setup to work with equally costed links.
I am thinking that I could write similar rules on router A to always force wireguard traffic down a particular link, however this seems messy and prone to breaking?
I am wondering if there is a cleaner solution to this issue?
(Edits: I meant asymmetric not asynchronous)
