Yeah it is a bit vague, I thought somone already had the issue.
I made a complete testing setup in gns3 to reproduce the issue which is close to mine with the difference of no bgp only static, no igp and different adresses.
I use a CCR as client in that exemple and one as provider.
I only added the firewall rule established and otherwise drop on the client to basicly showcase how it would be from any client behind nat like i have it. In reality there is only public ips both as loopback and on the crossconnects. As long as the connection is symetrical it works no matter if via crossconnect or via provider but as soon as in-inter
face != out-interface it will select the source adress of the outgoing interface as you can see in the open torch tool. That breaks the connection for every client that is behind nat. The Arrows show the traffic flow to and from the server in the different scenarios.
Don’t be confused by src and dst ip in torch out of some reasen those have always been in wrong order on mikrotik. Look at TX and RX in torch to see if it’s incoming or outgoing.
Client
[admin@client] > export
# 2026-01-02 18:15:04 by RouterOS 7.20.6
# system id = CHX26FcEgXC
#
/interface ethernet
set [ find default-name=ether1 ] disable-running-check=no
set [ find default-name=ether2 ] disable-running-check=no
set [ find default-name=ether3 ] disable-running-check=no
set [ find default-name=ether4 ] disable-running-check=no
set [ find default-name=ether5 ] disable-running-check=no
set [ find default-name=ether6 ] disable-running-check=no
set [ find default-name=ether7 ] disable-running-check=no
set [ find default-name=ether8 ] disable-running-check=no
/interface wireguard
add listen-port=13231 mtu=1420 name=wg1
/port
set 0 name=serial0
/interface wireguard peers
add allowed-address=6.6.6.6/32 endpoint-address=10.0.0.1 endpoint-port=13231 interface=wg1 name=peer1 \
persistent-keepalive=1s public-key="k+vjUYrAzO5mKESLvvpQqwab2gDJXgNoUjhB23rOqQY="
/ip address
add address=192.168.90.1/24 interface=ether1 network=192.168.90.0
add address=5.5.5.5 interface=wg1 network=5.5.5.5
/ip dhcp-client
add interface=ether1
/ip firewall filter
add chain=input protocol=icmp
add chain=input connection-state=established,related
add action=drop chain=input
/ip route
add gateway=192.168.90.254
add dst-address=6.6.6.6 gateway=wg1
/system identity
set name=client
Provider:
[admin@Provider] > export
# 2026-01-02 18:15:31 by RouterOS 7.20.6
# system id = qzyYuNFioDD
#
/interface ethernet
set [ find default-name=ether1 ] disable-running-check=no
set [ find default-name=ether2 ] disable-running-check=no
set [ find default-name=ether3 ] disable-running-check=no
set [ find default-name=ether4 ] disable-running-check=no
set [ find default-name=ether5 ] disable-running-check=no
set [ find default-name=ether6 ] disable-running-check=no
set [ find default-name=ether7 ] disable-running-check=no
set [ find default-name=ether8 ] disable-running-check=no
/port
set 0 name=serial0
/ip address
add address=192.168.90.254/24 interface=ether8 network=192.168.90.0
add address=192.168.7.4/28 interface=ether2 network=192.168.7.0
add address=192.168.15.3/28 interface=ether1 network=192.168.15.0
/ip dhcp-client
add interface=ether1
/ip route
add distance=1 dst-address=10.0.0.0/24 gateway=192.168.15.4
add distance=10 dst-address=10.0.0.0/24 gateway=192.168.7.5
add distance=1 dst-address=10.0.0.0/24 gateway=192.168.15.4
add distance=10 dst-address=10.0.0.0/24 gateway=192.168.7.5
/system identity
set name=Provider
PM1
[admin@PM1] > export
# 2026-01-02 18:15:50 by RouterOS 7.20.6
# system id = IF6ioZg1GqK
#
/interface ethernet
set [ find default-name=ether1 ] disable-running-check=no
set [ find default-name=ether2 ] disable-running-check=no
set [ find default-name=ether3 ] disable-running-check=no
set [ find default-name=ether4 ] disable-running-check=no
set [ find default-name=ether5 ] disable-running-check=no
set [ find default-name=ether6 ] disable-running-check=no
set [ find default-name=ether7 ] disable-running-check=no
set [ find default-name=ether8 ] disable-running-check=no
/port
set 0 name=serial0
/ip address
add address=192.168.0.2/31 interface=ether2 network=192.168.0.2
add address=192.168.15.4/28 interface=ether1 network=192.168.15.0
/ip dhcp-client
add interface=ether1
/ip route
add dst-address=10.0.0.1 gateway=192.168.0.3
add gateway=192.168.15.3
/system identity
set name=PM1
Dus1
[admin@DUS1] > export
# 2026-01-02 18:16:10 by RouterOS 7.20.6
# system id = +OdonftSVlP
#
/interface ethernet
set [ find default-name=ether1 ] disable-running-check=no
set [ find default-name=ether2 ] disable-running-check=no
set [ find default-name=ether3 ] disable-running-check=no
set [ find default-name=ether4 ] disable-running-check=no
set [ find default-name=ether5 ] disable-running-check=no
set [ find default-name=ether6 ] disable-running-check=no
set [ find default-name=ether7 ] disable-running-check=no
set [ find default-name=ether8 ] disable-running-check=no
/interface wireguard
add listen-port=13231 mtu=1420 name=wg1
/port
set 0 name=serial0
/interface wireguard peers
add allowed-address=5.5.5.5/32 interface=wg1 name=peer1 public-key=\
"nYZC2ostUH0bGjCiE2UdluzLRqq6SONTRD1jQGDTbQg=" responder=yes
/ip address
add address=192.168.7.5/28 interface=ether1 network=192.168.7.0
add address=192.168.0.3/31 interface=ether2 network=192.168.0.2
add address=10.0.0.1 interface=lo network=10.0.0.1
add address=6.6.6.6 interface=wg1 network=6.6.6.6
/ip dhcp-client
add interface=ether1
/ip route
add gateway=192.168.7.4
add distance=10 gateway=192.168.0.2
add dst-address=5.5.5.5 gateway=wg1
/system identity
set name=DUS1