Určitě jste to už mnohokrát zažili – chtěli jste si večer pustit nějaký dobrý film třeba na Netflixu, ale film se vám začal každých pár minut sekat nebo načítat a takhle stále dokola. Ve finále jste to raději vypnuli a šli se raději věnovat něčemu jinému. Důvod byl ten, že ve chvíli kdy jste si ten film na který jste se tak těšili pustili, tak ve stejnou dobu vaše ratolest právě stahovala ze Steamu novou hru (90GB) a do toho notebook stahoval nové systémové aktualizace. Ve finále z celé rodiny nebyl spokojený nikdo, protože nikomu nešlo nic pořádně, protože se všichni „přetahovali“ o nějakou tu kapacitu pro sebe.

Dnes vám představím CAKE (Common Applications Kept Enhanced) což je laicky řečeno takový tvarovač provozu, který se snaží dynamicky a spravedlivě rozkládat provoz vaší přípojky pro všechny uživatele. Cílem je, aby byli všichni uživatelé spokojeni a všem současně fungovala online služba, kterou chtějí právě používat. Prostě, aby se neopakovala situace, kterou jsem popsal v úvodu.

Zapomeňte na nějaké sepisování IP adres, portů, služeb, které chce prioritizovat – to je přežitek. Cake je v tomto automatický, ale aby mohl pracovat správně a kvalitně, tak potřebuje stanovit nějaký maximální limit pro download a upload. Tento limit by nikdy neměl být vyšší než jaká je skutečná maximální rychlost vaší přípojky. Pokud ji nastavíte vyšší tak selže matematika a Cake bude kravit a nedosáhnete požadovaného cíle. Doporučuji opakovaně spustit speedtest.hkfree.org pokud například naměříte download a upload třeba stabilně 130Mbit, tak odečtěte cca 20% rezervu a nastavte limit 100Mbit (zaokrouhleno), aby byl prostor pro případné výkyvy maximální rychlosti.

Praxe:
Zkusme to prakticky … v mém setupu jsou tyto rozhraní:
ether 1-WAN (Anténa na střeše co vás připojuje k hkfree)
bridge-LAN = porty ether2 – 5 v bridge (domácí wifi, PC, NTB, tablet, konzole…)

Upravte první dva řádky podle vašeho nastavení. Tedy jaké porty u vás představují WAN a LAN. Poté může zkopírovat skript a vložit do terminálu.

:global WAN "ether1-WAN";
:global LAN "bridge-LAN";
/queue type
add cake-flowmode=dual-srchost cake-nat=yes kind=cake name=cake-upload
add cake-flowmode=dual-dsthost cake-nat=yes kind=cake name=cake-download
/queue tree
add bucket-size=0.01 max-limit=100M name=upload packet-mark=no-mark parent=$WAN queue=cake-upload
add bucket-size=0.01 max-limit=100M name=download packet-mark=no-mark parent=$LAN queue=cake-download

Zhruba takto by to pak mělo vypadat – máme nastaven maximální limit 100Mbit pro download a upload. Cake se snaží být ke všem spravedlivý a zachovává nízké odezvy – ping. Otec naší imaginární rodiny konečně může večer dokončit svůj projekt na GitHubu… 🙂

Takto pak vypadá speedtest.hkfree.org – Cake „řeže“ správně dle našeho zadání.

Závěr:
Tohle vám internet nezrychlí – rychlost máte jakou máte to je dané mimo jiné i technologií přes kterou jste připojeni. Smysl tohoto řešení je udržet kvalitu připojení, aby jeden člen domácnosti, který se rozhodl právě stáhnout třeba tu zmíněnou hru ze Steamu neovlivňoval ty ostatní. Pokud to neřešíte, tak hra se sice stáhne rychle a patrně plnou rychlostí, ale ostatní členové domácnosti budou jen nadávat, že „ten internet“ stojí za prd… Ano je to klíčové a zároveň jednoduché – řešte to / zabývejte se tím.

Je potřeba podtrhnout, že toto tvarování provozu vyžaduje i poměrně velké nároky na výkon zařízení (CPU / RAM). Proto ho doporučuji provozovat na silnějších routerech (ARM a výše) jinak opět nebudete s výsledky spokojeni.

Může se hodit:
Cake – https://www.bufferbloat.net/projects/codel/wiki/Cake/
Queues – https://help.mikrotik.com/docs/display/ROS/Queues