I do use Mikrotik for 2.5g switching though, zero complaints.
Chose them partly to reduce dependence on US tech too.
And all that is available from tiny home/SMB office devices starting at 40 USD, through dedicated wireless point to point bridges, to a big Ethernet switches/routers with 400G interfaces.
Of course it doesn't compete with high end NVIDIA Spectrum-X, Cisco or Juniper, but is good enough for 95% of networks.
It works great as a plug&play home/office router, too thanks to Quick Set, but for more sophisticated setups, a knowledge of networking protocols is mandatory. The more fancy setup, the more in-depth knowledge is required. Just like with programming and all stuff in life.
Scripts on RouterOS handle network checks for failover, DNS updates, etc.
I got that Mikrotik home router 10 years ago and it is still performing great and handles most of the use cases without issues.
Don't get me wrong, they make powerful and feature-complete stuff, but their UI sort of assumes you really know what you're doing. I don't know what I'm doing.
But my LLM does. I've been able to set up site-to-site VPNs with Mikrotik in fifteen minutes now, rather than the day-long exercise of googling and praying.
It's royal pain.
Basic router setup is not hard.
Port forward to expose web server? Can be done after heavy docs&forum reading, but hair pinning never worked for me.
I checked their WiFi AP. It's UI is hard even for senior software engineer.
In the end I got opnSense installed in VM on Proxmox and it's my router for last 2 years.
I'm using 2 Mikrotik switches with their simplified UI to operate VLANs. Zero complains.
Is that representative of using mikrotik hardware?
Other routers:
1. OpenWRT is a bit too basic, and updates are hit-and-miss.
2. Ubiquity is a bit too Apple-like, with its reliance on apps and integration.
3. Cisco is WAY too expensive, and too complicated to set up without having Cisco experience.
I'm now eagerly waiting for them to release the next generation of their routers. hEX Pro looks perfect to replace my aging CCR2004.
UDM-SE it is for now.
Is there any manufacturer out there who produces high quality hardware that is not locked down?
Also, shipping winbox on all platforms has been a huge QoL improvement
But if you still want it, MikroTik doesn't try too hard to prevent you from running modified software. You can port OpenWrt, and most modern MikroTik devices use modern enough Linux to use a device tree blob. Try pulling out a dtb from your firmware and ask an LLM to do the initial porting - just don't forget to backup your RouterOS license key first, they are device specific.
Nevertheless let's give MikroTik, where it's due:
* new documentation page is much cleaner to browse
* tutorials on their YouTube channel are quite informative
* WinBox v4 has in my opinion much more pleasent UX/UI than v3
I ended up switching to back to Ubiquti.
But with an LLM it’s easier than falling off a log and the command line means it can do everything easily.
I installed openwrt and then installed it on many mikrotik routers over the years. to be honest, not so much traditional routers (wifi+4-5 ports) but on ~10 port mikrotik switches for my infra.
i've since been switching to zyxel gs1900-* switches (up to 48 ports with openwrt)
https://shop.opnsense.com/product-categorie/hardware-applian...
Ubiquiti sucks nowadays but Microtik is simply insane.
Nice detailed write-up too, and great explanatory diagrams.
Yes, I think it connects to the mikrotik cloud automatically to setup a usable external DNS to your device, but I believe access to it is turned off by default unless you turn it on.
https://manual.mikrotik.com/docs/network-management/cloud/
https://help.mikrotik.com/docs/spaces/ROS/pages/197984280/Ba...
The other reason is for updates, it can check periodically for firmware updates.
But outside of that it's not like streaming network telemetry or anything like that.
I remember I misconfigured it, and can't really Google around or ask LLM to fix it, because my Internet is down now.
Of course I can use Internet on my phone, but it's not really convenient setup to ask LLM to troubleshoot the router.
chokes on coffee
From my old-man, everything-is-stupidly-expensive point of view, this is my scale:
cheap side | reasonable | expensive side | Deciso boxes
I’m sorry what? You can run openwrt on that line of switches?
I just have a 24-port one at home running stock firmware…
It's possible to run v3 under Wine on a Mac but it was kind of clunky. V4 is much nicer (also runs on Linux too).
step 2 throw the mikrotik in the garbage
It's a great educational experience I would recommend to anyone interested in networking. Grab debian, grab a system with 2 NICs, make it your router/firewall/gateway.
I like ipv6 but I have been thinking of disabling it lately because i cannot technically setup static leases with ipv6 like i can with ipv4, so technically the ipv6 for one of the services in my homelab could change and cause problems.
and it's cheap and fully customized, and powerful
For me when building homelab, customizability maybe important
All my life I have had to make do with junk I could get at Walmart or Best Buy. Got tired of it. Cheap plastic shit that would inevitably shit the bed just a month or two after the warranty expired. I'm not making the IT helpdesk wages I was making 30 years ago... fuck that. While I couldn't spend ten grand on home networking, I could finally spend a little something on hardware that's not total shit.
Got the CCR2004-16G-2S+. No stupid ONTs, either, just the SFP+ modules. Plenty of backup 1gig ports if I get a third WAN (thinking about getting Starlink on standby). Actual proper fucking APs that do seamless handoff (hell, one of them probably covers the footprint of my house, if I'm honest). And no more shitty GUI configuration pages. I just shell in and band out commands on the command line (at least three times til I get the syntax right, but who gives a fuck).
Wish they made something with 3 or 4 SFP+ ports that I didn't need a rack for.
For homelab, you are far better served buying a second hand Sophos baremetal/server rack mounted, and installing OPNSense in it.
I have a 2nd hand Sophos SG210 Rev3 from eBay, replaced the Celeron CPU with an i7 one, 16GB, new SSD, dual 10G NIC, it had been running like a dream.
- 1x10GB SFP+
- 1x2.5GB Ethernet w/ PoE In
- 7x1GB Ethernet w/ PoE In/Out
- powered by DC jack, 2 pin, or PoE
- Similarly sized to 220 × 125 × 22 mm (approx 8.66 × 4.92 × 0.86 inches)
- Max power consumption 150W
- Silent
- ~$300
And I can replace my RB5009Upr+S+IN.
The problem with this (assuming you meant a generic (x86?) system) is that you won't get wire speed processing (no hardware offloading), so network performance will suffer. Unless you buy a dedicated router board (which is typically ARM), like say something like the Banana Pi BPI-R4. But installing/configuring a standard distro line Debian for such a board would be a PITA (if you want to do it right and set it up optimally), so you're better off using a dedicated router distro like OpenWRT.
But also, even if a device doens't support DHCPv6 IA_NA, you can always also have a DNS server in your network, and you can bind SLAAC-generated Android addresses to simple subdomains. This seems better than DHCP anyway.
But the degree of inconvenience is up to the beholder.
One way is using something like ChatGPT with a pocket supercomputer. It's tedious to get technical stuff done that way, but it can be accomplished. (For those who haven't tried it, the bot can be spooky-good at correctly interpreting cell phone photos of technical text on a screen. This saves a ton of transcription effort.)
Another way is with the phone's hotspot and just about any random computer. Laptops have wifi. Wifi dongles for desktops can be stupid-cheap, and it's useful to have a few scattered around. It works fine (unless one's hotspot data is ridiculously-limited, I guess).
The best way is probably by being prepared with procedural fall-back methods. Keep backups of your configs, and keep the recovery instructions with them. Test recovery; an untested backup isn't necessarily better than having no backup at all. Keep as many historical versions as one wishes, and automate it because procrastination is part of the human condition.
After that: When the router's config gets stuffed up, then the backups and the restore instructions are right there. Just pick an appropriate backup and use it.
We should probably be keeping backups of important stuff like that even in the absence of LLMs. Humans also err, and stuff does break, and what seemed obvious six months ago when we were in the groove might be impossible to remember when we need it today.
But the actual router? That lives on NixOS in a virtual machine on a generic amd64 machine that also runs NixOS. I'd rather design / perfect my config once in terms of iproute2/nftables and know I can swap in any hardware. I've got a full policy routing setup that let's me define for each device what Internet horizon it can see (along with what other local devices it can access).
I also find the sibling comment mentioning routing speed to be funny. I've found that unencrypted gigabit WAN is easily handled by most amd64 computers. 10Gb LAN->LAN hairpin routing seems fine. But the big thing is doing gigabit OpenVPN/wireguard, which off the shelf hardware-accelerated routers just don't really do unless you spend a lot. (coupled with the above policy routing, I can configure things like this particular web browsing VM goes out a data center IP that rotates every day).
Wireless APs are similarly handled by hostapd on NixOS, driving (mostly) Mikrotik MiniPCIe Wifi cards. I don't really need the latest and greatest wifi gen, rather I just need them to work and be as maintenance-free as possible.
They of course also have a DS-Lite AFTR gateways to tunnel the IPv4 traffic. In practice, everything works (for me at least).
I haven't been able to find many other devices that tick so many boxes. These seem to exist on a class of their own.
like:
https://www.amazon.com/dp/B0978TF8K3/
https://openwrt.org/toh/zyxel/gs1900-24hp_a1
or:
It's not something I've tried but I imagine you could actually expose FRR directly and configure through that
Modern CPUs are quite capable. The problem isn’t performance, but power use.
Setting up Debian as a router might take some effort but it's certainly not difficult. Enabling routing is a single line config change, install dhcpd and you're almost there. I'd certainly recommend the router OS.
Setting up a router with Debian is really kind of overstated in terms of difficulty, and frankly half of everything wraps Debian anyways (looking at you Ubiquiti/Vyatta), so why learn someone else's half cooked configuration language when you can just do the real thing.
I route my home 10G internet on a ThinkCentre Tiny with a 2018 Core i3-8100T.
There is no contract with MikroTik. You buy the hardware, that's it. The software and updates are free.
real-world OPNsense (yea, that's not Debian) benchmarks show that even low-power Xeon-D (Skylake-D SoC) with 10G SFP+ NICs:
pushed 9.40 Gbps in plain router mode
7 Gbps with packet filtering and no rules
7 Gbps in NAT mode
5.5 Gbps with a default ruleset
Having said that, mikrotik hardware running OpenWRT feels like something that might scratch one of my itches.
The one thing that it frustratingly does not support that I wish it did is stateless bgp with ipv4 prefixes. It cant offload an ipv4 packet with an ipv6 next hop.
https://mikrotik.com/product/crs305_1g_4s_in
Each of the mikrotik switches even comes with a block diagram linked on its product page, showing for instance a single 1.3 Gbps between its L2 switch chip and its CPU.
https://cdn.mikrotik.com/web-assets/product_files/CRS305-1G-...
The idea is to run OpenWRT passing through the ISP NIC and one (or both) of the SFP+ ones going to the switch, and also run other services in isolated containers.
I'm even thinking about putting Home Assistant on a VM on it but I'm not sure yet what impact it will have on routing performance so that's on hold for now.
It's so much more powerful than what I need for the router/firewall that it should be comfortable to run quite a few things on it, and I can start moving them off it to other devices if Internet speeds catch up to it in the future.
I have like a ~15y history of working with their stuff.
I wouldn’t suggest anyone buy something like this today for home use, but 6 years ago when I purchased it there were not many 10GbE routers to be had period, let alone for the price ($300 roughly if I remember correctly ). Even considering the cost of power over the last 6 years, I still come out much cheaper than if I’d bought something more power efficient new at the time.
Oh the stories I could tell you.
I once had to work with a guy who didnt believe in dynamic routing.
Which wouldn't have been too bad but he also didnt believe in route summarisation or any kind of planning. So the network was carved up into random unpredictable blocks.
He sadly did very much believe in Mikrotik scripting, and so had scripts setup to disable/enable static routes based on very broad (often external) reachability criteria.
Whenever googles DNS had an issue the whole network would start flapping scripts like nobodies business.
The network was a large wisp with more than 600 pops and more than 10000 customers on its various services.
That engineer had been gainfully employed by multiple ISPs over 20 years.
From some time, I had a second though about getting my homelab. I wanted to play with my own projects without relying on cloud providers or to have my own storage space to store backups as prices of cloud storage are getting more expensive.
No homelab can be complete without a prior proper networking setup. Given my experiences related to performance and security issues with ISP-provider routers, I wanted to have a better control over the traffic on my home network. I decided to heavily focus traffic on wired connections, to offload WiFi and ensure connection between devices over local network are as fast as possible.
That’s where Mikrotik L009UiGS-RM comes in play. It has enough Gigabit Ethernet ports to connect all my Ethernet ports on the walls. PoE is a nice bonus too, as I can power my access point without having to use a wall wart. The router has a small form factor, which made it possible to mount on the wall.
Nevertheless, before I touched the router, I needed to find out how your ISP actually hands off the Internet connection as it’s not that easy. Two things decide your setup, and they are independent of each other: how the WAN authenticates, and what kind of IPv4 address it gets. Quick Google search on tech forums or asking the ISP support line will usually get you the answer.
In Poland, some providers plug in an Ethernet cable and hand you an address over DHCP; this is IPoE1. Others require a PPPoE2 username and password, sometimes over a dedicated VLAN3. The right setup path depends entirely on this detail.
| Protocol | What your ISP gives you | Typical setup on MikroTik |
|---|---|---|
| IPoE | IP address, gateway, DNS via DHCP on the WAN | Add DHCP client on the WAN port |
| PPPoE | Username and password, sometimes over a VLAN | Create VLAN if needed, then add PPPoE client |
The protocol only tells you how the router logs in. Separately, check whether the address you receive is public or private, because a private IPv4 address on the WAN port always means CGNAT4: your ISP shares one public IPv4 among many customers and translates it upstream, so nothing routes back to you unsolicited.
| WAN IPv4 | What it means | Impact |
|---|---|---|
| Public | A routable address dedicated to your line | Port forwarding, UPnP, and inbound connections work normally |
| Private (CGNAT) | A shared address behind the ISP’s NAT | Inbound connections generally don’t work unless the ISP sells a public IPv4 add-on |
Warning: DS-Lite caveat.
DS-Lite is the strictest form of CGNAT: the WAN gets no IPv4 address at all, only a public IPv6 address, and IPv4 traffic is tunneled inside IPv6 to the ISP’s AFTR5. MikroTik supports the DS-Lite tunnel itself, but it doesn’t support automatically receiving the AFTR address needed to establish it. Because there’s no public IPv4 anywhere in the path, port forwarding, UPnP, inbound connections, and many remote-access tools stop working.
If your ISP offers DS-Lite or private IPv4 and you need inbound IPv4 access, ask about a paid public IPv4 add-on before you buy the router or consider switching to other ISP.
For my fiber connection, the ISP uses PPPoE over VLAN 35 with a private IPv4 address. The rest of this post follows that path.
MikroTik router alone
Start by powering on the router. Run an Ethernet cable from your laptop to any LAN port on the MikroTik, typically any port numbered 2 or higher. Leave port 1 free for the ONT uplink; that becomes your WAN port later. Open WinBox, switch to the Neighbors tab, and you should see the router listed at 192.168.88.1 (or its default MAC address). Log in using the admin user with no password, then change the default admin password immediately, because RouterOS still ships with blank or default credentials on some units. After that, run through Quick Set just enough to give the router a stable management address and local subnet. You will come back later to tear out the default wireless bridge and replace it with a cleaner configuration.
The optical network terminal6 sits at the edge of your home network. Run an Ethernet cable from the ONT to port 1 on the MikroTik. Once the link light comes up, the router can see the carrier signal.
MikroTik router connected to ONT
Some ISPs (mine included) bind the service to the MAC address of the router they shipped. Plug in a MikroTik with a different MAC and the connection never authenticates, even when the VLAN and PPPoE settings are correct. The fix is to clone the original router’s MAC onto the WAN port. You can read that MAC from the sticker on the ISP router or from its status page.
Clone it onto ether1. Because the VLAN interface and the PPPoE client both ride on ether1, they inherit this MAC automatically, so the ISP sees the address it expects.
# Check the current MAC before changing it
/interface ethernet print where name=ether1
# Flags: X - disabled, R - running, S - slave
# # NAME MTU MAC-ADDRESS ARP SWITCH
# 0 R ether1 1500 48:A9:8A:11:22:33 enabled switch1
# Clone the ISP router's MAC (replace with the address from its label)
/interface ethernet set ether1 mac-address=AA:BB:CC:DD:EE:FF
# Confirm the WAN port now advertises the cloned MAC
/interface ethernet print where name=ether1
# Flags: X - disabled, R - running, S - slave
# # NAME MTU MAC-ADDRESS ARP SWITCH
# 0 R ether1 1500 AA:BB:CC:DD:EE:FF enabled switch1
The cloned MAC persists across reboots. If you ever move the connection back to the original router, revert with /interface ethernet reset-mac-address ether1 to restore the port’s factory address.
My ISP tags the PPPoE traffic with VLAN 35. RouterOS needs a VLAN interface on top of ether1 before it can speak PPPoE. Add it with a descriptive name so future-you does not have to guess what vlan1 means.
/interface vlan add name=internet-vlan-35 vlan-id=35 interface=ether1
/interface vlan print
# Flags: X - disabled, I - invalid, D - dynamic
# NAME MTU ARP VLAN-ID INTERFACE
# 0 internet-vlan-35 1500 enabled 35 ether1
MikroTik router with ONT and VLAN 35
With the VLAN in place, create the PPPoE client. Tell it to use the VLAN interface, accept the default route from the ISP, and use the ISP’s DNS servers. Leave the username and password empty at first; you will fill those in once the interface exists.
/interface pppoe-client add name=pppoe-out1 interface=internet-vlan-35 \
add-default-route=yes use-peer-dns=yes disabled=no
/interface pppoe-client print
# Flags: X - disabled, I - invalid, R - running, D - dynamic
# NAME MTU INTERFACE USER SERVICE CALLER-ID ENCODING STATUS
# 0 pppoe-out1 auto internet-vlan-35 internet linking
Now set the credentials your ISP provided. The status should change from linking to connected within a few seconds.
/interface pppoe-client set pppoe-out1 user=YOUR_ISP_USERNAME password=YOUR_ISP_PASSWORD
/interface pppoe-client print
# Flags: X - disabled, I - invalid, R - running, D - dynamic
# NAME MTU INTERFACE USER SERVICE CALLER-ID ENCODING STATUS
# 0 R pppoe-out1 auto internet-vlan-35 YOUR_ISP_USERNAME internet connected
Confirm the default route appeared. If the output shows pppoe-out1 as the gateway, traffic can reach the Internet.
/ip route print where dst-address=0.0.0.0/0
# Flags: D - dynamic; X - disabled, R - running, S - static; + - active
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
# D 0.0.0.0/0 pppoe-out1 1
MikroTik router with ONT, VLAN 35 and PPPoE client
For wireless, I use a separate wAP access point powered over Ethernet7. Port 8 on the router feeds both data and power to the AP. Enable PoE output on that port, and the wAP boots without a wall wart.
# Physical step: run an Ethernet cable from router port 8 (ether8) to the wAP AP.
# Then enable PoE output on port 8 so the wAP powers up:
/interface ethernet poe set ether8 poe-out=auto-on
/interface ethernet poe print
# NAME POE-OUT VOLTAGE CURRENT
# ether8 auto-on 24.0V 210mA
Managing every AP individually does not scale. RouterOS includes CAPsMAN, which lets the router act as a central controller. You define a single security profile and datapath, plus channel templates for 2.4 GHz and 5 GHz, and the access point downloads that configuration automatically.
On the controller, create the shared objects first.
# --- On the router (CAPsMAN controller) ---
/interface wifi security add name=home-sec \
authentication-types=wpa2-psk,wpa3-psk \
wps=disable passphrase=YOUR_WIFI_PASSWORD
/interface wifi channel add name=ch-2ghz band=2ghz-n width=20mhz
/interface wifi channel add name=ch-5ghz band=5ghz-ac width=20/40mhz
/interface wifi datapath add name=home-dp bridge=bridge disabled=no
/interface wifi configuration add name=home-2g ssid=HomeNetwork \
country=YOUR_COUNTRY security=home-sec channel=ch-2ghz datapath=home-dp mode=ap
/interface wifi configuration add name=home-5g ssid=HomeNetwork \
country=YOUR_COUNTRY security=home-sec channel=ch-5ghz datapath=home-dp mode=ap
/interface wifi capsman set enabled=yes interfaces=bridge
/interface wifi provisioning add action=create-dynamic-enabled \
master-configuration=home-2g supported-bands=2ghz-n
/interface wifi provisioning add action=create-dynamic-enabled \
master-configuration=home-5g supported-bands=5ghz-ac
# Verify the controller is listening
/interface wifi capsman print
# enabled: yes
# package: wifi-qcom
# interfaces: bridge
# require-peer-certificate: no
# upgrade-policy: none
On the access point, enable CAP mode and point the radios at the manager.
# --- On the wAP (CAP / managed AP) ---
/interface wifi cap set enabled=yes discovery-interfaces=bridge
/interface wifi set wifi1 configuration.manager=capsman disabled=no
/interface wifi set wifi2 configuration.manager=capsman disabled=no
# Verify the wAP has joined the controller
/interface wifi cap print
# enabled: yes
# discovery-interfaces: bridge
# caps-man-addresses:
# caps-man-names:
Back on the controller, you should see dynamic radio entries appear. Each radio adopts the configuration that matches its band.
# Back on the controller, check that managed radios appeared
/interface wifi print
# Flags: D - dynamic
# # NAME TYPE ACTUAL-CONFIGURATION
# 0 D cap1@2.4GHz wifi home-2g
# 1 D cap1@5GHz wifi home-5g
MikroTik router with ONT, VLAN 35, PPPoE client and WiFi AP over PoE
During a typical evening at the weekend, I noticed something strange. I was playing Counter-Strike, but then it started lagging tue to ping flactuations. It turned out an iOS update starts on another device and a phone begins uploading photos into cloud backup. The culprit was bufferbloat.
Bufferbloat is excessive latency caused by overfilled packet queues inside network equipment. It shows up when a link becomes saturated, because large buffers hold packets instead of dropping or marking them quickly. Real-time traffic then waits behind bulk transfers.
Source: Bufferbloat.net
The queue fills and latency spikes, leaving game packets stuck behind a backlog of bulk traffic.
Step 1: only Counter-Strike traffic, latency stays low
With no competing traffic, the latency stays low. The game sends small packets, and the queue rarely holds more than a frame or two.
Step 2: iOS update begins, queue fills and latency rises
A download starts on another device. The buffers absorb the burst but do not drain fast enough, so latency climbs as game packets wait behind it.
Step 3: photo backup joins in, queue keeps growing
An upload joins the mix, and upload queues are usually the worst offender on asymmetric links. The game now faces queuing in both directions.
Step 4: queue full, game packets stuck behind bulk traffic
The buffer is full. Even tiny game packets wait until the bulk traffic ahead of them clears, which shows up as rubber-banding and delayed voice chat.
You can measure this with online tests; I use the Cloudflare Speed Test at speed.cloudflare.com. It reports both loaded and unloaded latency so you can read the bufferbloat grade directly. DSLReports used to be the reference, but the site shut down in March 2025. You can still get a rough picture by running any speed test while pinging a stable host in a terminal.
RouterOS supports several queue disciplines. The default FIFO queue simply stores packets in the order it receives them. When the link is full, every flow waits behind every other flow. FQ-CoDel8 splits traffic into many small flows and gives each one a fair turn, dropping packets that linger in the queue. This keeps latency low without complex firewall mangle rules.
| Queue discipline | How it handles congestion | Best for |
|---|---|---|
| FIFO (default-small) | One shared queue; first in, first out | Low congestion, uniform traffic |
| FQ-CoDel | Per-flow fairness with active delay control | Gaming and VoIP on shared links |
To use FQ-CoDel, first create a queue type since RouterOS does not include one by default.
/queue type add name=fq-codel kind=fq-codel
/queue type print where name=fq-codel
# Flags: * - default, X - disabled, I - invalid, D - dynamic
# 0 name="fq-codel" kind=fq-codel fq-codel-target=5ms fq-codel-interval=100ms \
# fq-codel-ecn=yes fq-codel-flows=1024 fq-codel-quantum=1514 \
# fq-codel-limit=10240 fq-codel-memlimit=32.0MiB
The default parameters are a sensible starting point. The target of 5 ms defines the acceptable standing queue delay. The interval of 100 ms matches a rough worst-case RTT budget.
The important part is the max-limit. It must sit below your real line rate, not at it. If you shape at 100 % of the link, the ISP’s equipment still saturates first and the bloated queue forms there, outside your control. A common rule of thumb is to set the limit to about 90–95 % of the measured download and upload speeds. That keeps the bottleneck on your router, where FQ-CoDel can actually manage the queue.
Replace the placeholders below with your own measured values: the first number is upload, the second is download.
/queue simple add name=shaping target=pppoe-out1 max-limit=<0.9xUPLOAD>M/<0.9xDOWNLOAD>M \
queue=fq-codel/fq-codel total-queue=fq-codel
/queue simple print where name=shaping
# Flags: X - disabled, I - invalid; D - dynamic
# 0 name="shaping" target=pppoe-out1 dst-address=0.0.0.0/0 \
# interface=all parent=none priority=8/8 queue=fq-codel/fq-codel \
# limit-at=0/0 max-limit=<0.9xUPLOAD>M/<0.9xDOWNLOAD>M burst-limit=0/0 burst-threshold=0/0 \
# burst-time=0s/0s bucket-size=0.1/0.1 total-queue=fq-codel
Simple queues do not apply to packets that are fast-tracked by the firewall. Fast Track bypasses the queue subsystem for performance. For the queue to work, disable the fasttrack rule or remove it entirely.
# Find the fasttrack rule
/ip firewall filter print where action=fasttrack-connection
If a rule exists, either disable it or remove it. Be careful: removing fasttrack increases CPU load on high-throughput links. On a modern MikroTik with a CPU that can handle line-rate forwarding, the trade-off is worth it for latency.
# Option A: disable the rule
/ip firewall filter disable [find action=fasttrack-connection]
# Option B: remove it entirely
/ip firewall filter remove [find action=fasttrack-connection]
After making the change, run the Cloudflare Speed Test again. You should see the bufferbloat grade improve, especially under upload load.
https://en.wikipedia.org/wiki/Point-to-Point_Protocol_over_Ethernet ↩
Address Family Transition Router. The AFTR is the ISP-side endpoint of the IPv4-in-IPv6 tunnel in DS-Lite: it decapsulates subscriber IPv4 traffic, performs NAT, and routes it to the IPv4 Internet. (https://datatracker.ietf.org/doc/html/rfc6333) ↩