Ahoj, diky za clanek. Resim takovy pomerne jednoduchy problem v nftables, ale furt nevim jak na to. Mam Linuxovy router co prerozdeluje 20Gbps konektivitu mezi 5000+ koncovych bodu.
Omezovani rychlosti (shaping) je resen v jadre pomoci TC. Kazdy koncovy bod ma svoji tc tridu rychlosti.
nFtables mapy uz umi mapovat ip adresu na tc tridu. To je super. Ale ja bych potreboval, aby kazda ta ip adresa v ty mape mela jeste pocitadlo packetu+objemu pro upload i download zvlast. Z vykonostnich duvodu bych rad aby to bylo co nejkratsi. Tj. idealne jedna mapa, ve ktery je vsechno, aby se ta ip adresa nemusela hledat treba ve 3 ruznejch mapach. Prece jen se to dela pro kazdy packet a tech neni malo.
Napada vas nejake elegantni reseni?
Je to asi trochu pokročilejší systém a při 20 Gbps je jistě potřeba i leccos otestovat...
Já jsem o něčem podobném tento rok na Installfestu mluvil: https://youtu.be/4hG_1hiS4fk?t=3094 už je to v čase, kdy o nftables a dynamických setech mluvím a mám i praktickou ukázku. Vás by asi zajímala jen cílová IP (download) a jiný set, kde byste měl zdrojovou IP (upload) anebo byste to filtroval takhle z těch pětic, to by asi taky šlo. Výhoda je, že zaregistrujete opravdu všechno a dokonce můžete jít granulárně i na úroveň přenosové vrstvy. Jak jsem ale psal, dost závisí na tom, jak se to bude chovat při 20 Gbps potenciálně s 64 B pakety... v mém příkladu taky bylo jen IPv4, ale IPv6 by mělo být analogicky ipv6_addr.
nft add table monitoring nft add chain monitoring input { type filter hook input priority 0\; } nft add set monitoring myset { type ipv4_addr . inet_service . inet_proto . ipv4_addr . inet_service \; flags dynamic \;} nft add rule monitoring input add @myset { ip saddr . @th,0,16 . ip protocol . ip daddr . @th,16,16 counter}
Jak jsem psal, podívejte se na to video, jestli máte 10-15 minut v odkazu už je to posunuté k tématu.
Ono to je v jednom setu a máte tam z mého pohledu všechny informace, co byste si mohl přát. Jediné, co možná budete muset upravit je nevázat to ne na řetězec (chain) input, ale forward nebo např. prerouting/ postrouting pokud to máte na firewallu.
https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains
V profilu mám email, tak mi třeba napište a můžeme si o tom psát tam nebo to můžeme řešit na fóru.