7.25beta [development] is released!

Could version 7.25 mark the moment of the most radical enforcement of configuration attribute compliance?

From what little I’ve gathered so far about the MikroTik landscape—specifically the relationship between RouterOS and WinBox—my understanding is as follows:

  1. WinBox retrieves a data model from the RouterOS instance it connects to; based on this model, it establishes preliminary validation rules enforced by the graphical interface.
  2. Over the years, hundreds (perhaps thousands) of exceptions to this method have been created and hard-coded somewhere within this ecosystem—most likely inside WinBox itself.
  • P.S.: If these assumptions are incorrect, please help me understand how it actually works—ideally by pointing to public documentation on the subject.

So...
When you combine the fact that version 7.25 now mandates WinBox version 4.3 (or higher) for access...

With the message from @prawira in the WinBox 4.4 thread—where he described how WinBox 4 prevented him from entering a range attribute with positions in reverse order...

I found myself thinking:
Given that they are adopting a stricter methodology and enforcing a minimum WinBox version...

Wouldn't this be the perfect opportunity to clean up all those hard-coded if statements [2] and ensure that every configuration input method strictly adheres to the exact same attribute validation data model contained within RouterOS? Essentially clearing out the clutter and hard-coded exceptions...

Of course, there is a risk of touching a sore spot.
"Semi-incorrect" configurations—which users have been copying and pasting for years and which have worked fine all this time—might stop being accepted and instead trigger error alerts.

But I believe that by getting rid of all those hardcoded conditions, both RouterOS and Winbox4 itself will tend to become leaner—while also gaining overall consistency across all configuration input methods.

I don't agree in the "details" but I also see a lack of unified input validation. I always was quite confident that WinBox "does it" differently than CLI. a lot of "winbox" changelog items in most ROS releases. new features often cli-only. So the "brain" is probably ROS and Winbox is just a mvc like gui software. downloads the "model" from the router, builds "view" dynamically. And also does some own "if statements" (copyright fisherdouglas) in the Winbox controller. et voila!

RouterOS does that today, it's just a question of when from the POV of WinBox. Improving validation before apply in WinBox is what seems to be improving, since you could type something "invalid" that did not show up in red in many place.

But I'm not sure I've seen a case where if you hit "OK"/"Apply" in WinBox, you don't get an identical message to the CLI, with the same inputs from WinBox. So the only question is if Apply/OK is disallowed "early", which historically that has not been the case for all fields. Now open someone might be able to prove me wrong, but AFAIK the improvements are about what appears "in red" before OK, but validation of a actually change (via OK/Apply in Winbox, or enter in CLI, or "request" in REST) is the same regardless of protocol used (REST/API/SSH/WinBox/WebFig).

And, I think folk find that WinBox enforcement after OK/Apply closely tracks what CLI reports in "F1" help, for example:

/ip/address/add address=F1

Address -- Local IP address

Address ::= Address[/Netmask]
  Address ::= A.B.C.D    (IP address)
  Netmask ::= IpNetmask | Num
    Num ::= 0..32    (integer number)
    IpNetmask ::= A.B.C.D

Which matches CLI Reference more terse form:

composite { address: ipAddr , netmask: [ num [ .. 32]] }

AFAIK, it turtles all the way down.

There still is the very grave bug in newest RouterOS + newest WinBox that when you have a configuration item that inherits values from a higher level, e.g. in BGP you configure a connection with Template and Instance, the values inherited from the higher level get COPIED into the item when you change something else.

You can remove the items in the config screen and they will remain inherited, but it is not as it should be. Inherited values should be displayed in a different color, and should not be saved unless they are altered in the item as well.

This also affects the WiFi settings where there is configuration per interface but also global configuration profiles. This bug has existed since v7 was introduced (for BGP) and since new WiFi was introduced.

This bug is still present? After all these years? Is Mikrotik actually using Winbox in production? Or do they just use it for Youtube showoff?

Oops, I missed that one in beta 4

Thanks for finally giving the poor little trailing dot some love. :smiling_face_with_three_hearts:

It may look like a tiny detail, but it’s actually pretty fundamental DNS behaviour. That little dot tells the resolver that the name is an absolute FQDN, so it shouldn’t start appending search domains to it.

Tiny character, pretty important job!

Unfortunately, yes. I just re-tested it with WinBox 4.4 and RouterOS 7.25beta5.

You can already see when you save the item that it now includes the inherited values in the log line, and indeed they then appear in the export as well.

WinBox already knows when you have changed some item, because then it changes the title to blue instead of black. It should only save the items that you changed, so in the log line you see only those. That would be an improvement for other reasons as well.

"search domains" are so 1999... get rid of them, they only cause overloading of the DNS servers and serve no practical purpose anymore.

Of course the trailing dot should still be supported.

You might be missing the point here. The trailing dot is exactly what you need to explicitly short circuit them.

Yeah, but nobody is going to type a trailing dot after all their DNS names, and it is really useless that every DNS name is searched both bare and with the "search domain(s)" appended to it. It should only have been done when a name without embedded dot is entered.

And it is not only useless, it is a potential information leak when an external domain has been configured as the search domain, e.g. the domain of the ISP.

Fortunately it is not something that RouterOS supports, it only happens in end systems maybe based on the "domain name" offered in a DHCP network.

Entire protocols can rely on this.
Proxy auto-discovery is one example.
CAPWAP discovery, as well as many discovery mechanisms for SIP proxies and voice gateways.
Even domain controller discovery in an Active Directory domain.

In fact, any protocol capable of using DNS-SRV will first perform lookups via search domains if no specific FQDN has been declared for the query.

So, "getting rid of them" would break a lot of things... especially in corporate environments.

Why this controversial discussion? rfc1035 clearly says:

Domain names that end in a dot are called absolute, and are taken as complete.

So supporting FQDN in DNS resolver is nothing to discuss on.

Only:

As said, it should only have been done when the requested name has no dots in it, and it should not have been a part of the generic DNS resolver but be implemented in those applications that require it.

Just like "path search" is not part of the generic execv() system call but only of the execvp().

It is just stupid that when you have "provider.com" as search domain and you browse to "mikroti.com" it will lookup "mikroti.com.provider.com" in global DNS.

Just noticed /tool/bandwidth-test (using the neterra btest server) causes a immediate router crash in beta5. Reported it as SUP-225003. Is it a me-issue or can anyone confirm?

Is it

?

What device did you use?
There are any device that can use hardware offload for btest? (this would be new for me)

I just did the test with a hAP AX s. No crash.
I have done it using Winbox4.4, tcp, udp, receive, send, both... all combinations... no crash.
What I Notice was when udp, traffic was zero... But it is probably related to something else.

Tested from home with AX2 running 7.25b5
No crash. Same observation, no UDP.

/tool/bandwidth-test user=redacted password=redacted address=87.121.0.46 direction=both duration=10s

It just outputs

                status: connecting
            tx-current: 0bps      
  tx-10-second-average: 0bps      
      tx-total-average: 0bps      
            rx-current: 0bps      
  rx-10-second-average: 0bps      
      rx-total-average: 0bps      
          lost-packets: 0         
           random-data: no        
             direction: both      
               tx-size: 1500      
               rx-size: 1500      
      connection-count: 20

And then the router crashes.

    architecture-name: arm                
    board-name: D53G-5HacD2HnD
[xyz@AX2-Living] > /tool/bandwidth-test user=redacted password=redacted address=87.121.0.46 direction=both duration=10s               
                status: done testing
              duration: 11s         
            tx-current: 90.0Mbps    
  tx-10-second-average: 90.0Mbps    
      tx-total-average: 90.0Mbps    
            rx-current: 49.7Mbps    
  rx-10-second-average: 184.8Mbps   
      rx-total-average: 184.8Mbps   
          lost-packets: 10906       
           random-data: no          
             direction: both        
               tx-size: 1500        
               rx-size: 1500        
      connection-count: 20          
        local-cpu-load: 3%          
       remote-cpu-load: 13%         
[xyz@AX2-Living] >

Figured it out. I have switched from queue tree to simple queue a week ago. When I disable the simple queue, btest works fine.

Nobody's saying people should type a trailing dot after every DNS name. The point is that when an absolute name is used, ROS should understand standard DNS syntax.

This isn't about search domains. The trailing dot is standard DNS syntax for the root label, and RFC 1034 3.1 calls such names absolute. ROS has no search list, so it already treats "host.example.com" as absolute, and "host.example.com." is the same name in canonical form. Returning "bad name" is a parser bug, not a design choice, so rejecting that form is a regression that breaks existing scripts.

And that is exactly where it bites us. Our config manager and network monitor run scripts on the routers through the API, and some of them use absolute FQDNs. We were lab testing ahead of an upgrade, and all of a sudden ROS just started rejecting them.

With all the DNS regressions and fixes lately, basic standards-compliant DNS is something we need to be able to count on.

Anyways, great to see a fix listed in 7.25beta4, though we haven't tested it yet.