Although this one smells like something for
support@mikrotik.com as the interface says it is running but the DHCP client is stopped which doesn't look like a normal behaviour, it may actually be simply T-mobile taking down connections whose uptime exceeds some pre-defined value (it's T-
mobile after all, so you are not supposed to spend your whole life sitting next to the a single BTS).
So first do the following:
/system logging add topics=lte
/system logging add topics=dhcp
Then disable the LTE interrface, re-enable it and wait until the system gets to the strange state. Then use
/log print where topics~"lte|dhcp" file=lte-dhcp-log
Then download the file and read it; if it makes sense to you, fine, if it doesn't, post it here (after the usual Ctrl-H to replace the public address(es) appearing there).
Also, setting netwatch or script to monitor connection, is difficult as its D (Dynamic) interface on DHCP client.
If you have in mind that as soon as the VPN gets up and due to your configuration choice it overrides the default route provided by the DHCP client on the LTE interface by its own one with lower
distance value, so the netwatch pings take the new default route, there really is an issue because the
/interface lte itself currently doesn't provide a hook for a script to be called on up and down events, and the dhcp client is added to the interface automatically so RouterOS won't allow you to set a script on the dhcp client either; the same is the case for
/interface l2tp-client. So I'm afraid that only a workaround can be used, consisting in creating the "monitoring routes" based on the default routes added dynamically by the
/interface lte and
/interface l2tp-client as they come up if their
gateway values differ from the new ones. To make it even funnier, you have distinguish the two dynamic routes from one another based on their
distance values as no other property is different.
So it would be something like
if ([/ip route print count-only where dst-address=0.0.0.0/0 and distance=2]=1) do={
local gwLTE [ip route get [find dst-address=0.0.0.0/0 distance=2] gateway];
if ([ip route get [find dst-address=8.8.8.8/32]!=$gwLTE) do={
ip route set [find address="8.8.8.8/32"] gateway=$gwLTE
ip route set [find address="208.67.222.222/32"] gateway=$gwLTE
ip route set [find address="x.x.x.x/32"] gateway=$gwLTE # x.x.x.x is the address of your VPN server
}
}
if ([/ip route print count-only where dst-address=0.0.0.0/0 and distance=1]=1) do={
local gwLTE [ip route get [find dst-address=0.0.0.0/0 distance=1] gateway];
if ([ip route get [find dst-address=8.8.4.4/32]!=$gwVPN) do={
ip route set [find address="8.8.4.4/32"] gateway=$gwVPN
ip route set [find address="208.67.220.220/32"] gateway=$gwVPN
}
}
The script only changes the routes, it does not create them, so you must add them manually in advance. As the script may be called while one of the interfaces is down, the outer-most
if in each block prevents it from failing if the respective route currently does not exist.