Hi everyone,
I recently replaced my main router with a GL-MT3600BE, and I started seeing intermittent connection failures in a specific routing scenario.
The issue appears when the GL-MT3600BE routes LAN client traffic to another gateway that is also inside the same LAN subnet.
Network topology
My LAN subnet is:
192.168.11.0/24
Main router:
GL-MT3600BELAN
IP: 192.168.11.1
Client:
Windows client
IP: 192.168.11.144
Default gateway: 192.168.11.1
There are two additional gateways on the same LAN:
192.168.11.16 -> Tailscale subnet router / gateway
192.168.11.21 -> fake-ip / proxy gateway
The GL-MT3600BE has static routes like:
7.0.0.0/10 via 192.168.11.21 dev br-lan
10.21.0.0/16 via 192.168.11.16 dev br-lan
172.18.20.0/24 via 192.168.11.16 dev br-lan
172.30.0.0/16 via 192.168.11.16 dev br-lan
192.168.12.0/24 via 192.168.11.16 dev br-lan
Example route output:
7.0.0.0/10 via 192.168.11.21 dev br-lan proto static
10.21.0.0/16 via 192.168.11.16 dev br-lan proto static
172.18.20.0/24 via 192.168.11.16 dev br-lan proto static
172.30.0.0/16 via 192.168.11.16 dev br-lan proto static
192.168.12.0/24 via 192.168.11.16 dev br-lan proto static
Symptom
Some HTTPS connections fail on the first attempt, but succeed immediately on the second attempt.
Example from Windows curl:
curl.exe -v -o NUL -s -w "dns=%{time_namelookup} connect=%{time_connect} starttransfer=%{time_starttransfer} total=%{time_total}`n" https://xxxx.xxx.xxx.com
Failure:
* Host xxxx.xxx.xxx.com:443 was resolved.
* IPv4: 10.21.6.74
* Trying 10.21.6.74:443...
* schannel: disabled automatic use of client certificate
* ALPN: curl offers http/1.1
* Recv failure: Connection was reset
* schannel: failed to receive handshake, SSL/TLS connection failed
* closing connection #0dns=0.025663 connect=0.043946 starttransfer=0.000000 total=19.253947
Second attempt succeeds:
* Host xxx.xxx.xxx.com:443 was resolved.
* IPv4: 10.21.6.74
* Trying 10.21.6.74:443...
* ALPN: server accepted http/1.1
< HTTP/1.1 200 OK
dns=0.054640 connect=0.088751 starttransfer=0.308301 total=0.316747
The same type of failure also happened with fake-ip traffic, for example:
sqlmodel.tiangolo.com -> 7.0.0.79
Failure example:
* Host sqlmodel.tiangolo.com:443 was resolved.
* IPv4: 7.0.0.79
* Trying 7.0.0.79:443...
* Recv failure: Connection was reset
* schannel: failed to receive handshake, SSL/TLS connection faileddns=0.030430 connect=0.035898 starttransfer=0.000000 total=19.207708
Packet capture findings
On the fake-ip route, I saw TCP connection establishment, then TLS ClientHello retransmissions:
192.168.11.144 -> 7.0.0.79:443 [SYN]
7.0.0.79 -> 192.168.11.144:443 [SYN, ACK]
192.168.11.144 -> 7.0.0.79:443 [ACK]
192.168.11.144 -> 7.0.0.79:443 TLSv1.2 Client Hello
192.168.11.144 -> 7.0.0.79:443 TCP Retransmission [PSH, ACK]
...
192.168.11.144 -> 7.0.0.79:443 [RST, ACK]
For the Tailscale route, I captured on both the router and the Tailscale gateway.
On the Tailscale interface, I could see the remote host sending SYN/ACK back:
192.168.11.144 -> 10.21.6.74:443 [SYN]
10.21.6.74 -> 192.168.11.144:443 [SYN, ACK]
10.21.6.74 -> 192.168.11.144:443 [SYN, ACK retransmission]
10.21.6.74 -> 192.168.11.144:443 [SYN, ACK retransmission]
192.168.11.144 -> 10.21.6.74:443 [RST, ACK]
This made me suspect an asymmetric routing issue:
Before SNAT:
Client -> GL-MT3600BE -> LAN-side gateway -> remote target
Client <- LAN-side gateway <- remote target
The return path bypasses the GL-MT3600BE.
Important test
If I add a route directly on the Windows client, bypassing the GL-MT3600BE as the intermediate router, the problem disappears.
For example:
route add 7.0.0.0 mask 192.0.0.0 192.168.11.21 metric 1
After this, fake-ip traffic is stable:
Windows client -> 192.168.11.21 -> proxy gateway
This suggests the proxy gateway itself is probably fine.
Workaround that fixed the issue
I added an SNAT rule on the GL-MT3600BE for traffic from LAN clients to non-LAN destinations, when the egress zone is still LAN:
Source: 192.168.11.0/24
Destination: !192.168.11.0/24
Zone: lan -> lan
Action: SNAT to 192.168.11.1
In LuCI it shows as:
SNAT all -- 192.168.11.0/24 !192.168.11.0/24 to:192.168.11.1
After adding this rule, the packet counter increases and the intermittent HTTPS failures appear to be fixed.
The resulting path becomes symmetric:
After SNAT:
Client -> GL-MT3600BE -> LAN-side gateway -> remote target
Client <- GL-MT3600BE <- LAN-side gateway <- remote target
Question
Is this expected behavior for this kind of topology?
I understand that routing from br-lan back out through br-lan to another gateway in the same subnet can create asymmetric routing, ICMP redirect, or flow offloading edge cases.
However, this worked more reliably on my previous router ( Openwrt OpenWrt 25.12 On x86 ). On the GL-MT3600BE, I consistently saw first-attempt TCP/TLS failures until I added SNAT.
Could this be related to:
flow offloading / hardware offloading
ICMP redirectMTK acceleration
LAN-to-LAN routing via br-lan
asymmetric return path handling
Would GL.iNet recommend SNAT for this topology, or is there a better way to configure static routes to LAN-side gateways?
Thanks.