Mam kilka pytań do narzędzia nftables oraz potrzebuję pomocy do rozwiązania mojego problemu związanego z ograniczeniem przepustowości dla kilku adresów IP (ograniczenie łączne).
1. Czy jedyną metodą jest dodawanie tabel/łańcuchów nftables przy pomocy komend np.
# nft add table ip filter
# nft 'add chain ip filter input { type filter hook input priority 0 ; }'
# nft 'add chain ip filter output { type filter hook output priority 0 ; }'
Pytam, gdyż nie mogę za bardzo znaleźć komend w uci, gdzie dodaje się nazwę tabeli, łańcuchów, setów lub zbiorów define. Chyba, że nie jest to potrzebne/wymagane?
2. Czy da się ograniczyć wiele komputerów do jednej wspólnej prędkości np. pobierania? Na przykład są 2 komputery, są ograniczone do pobierania 500KB/s, zatem na jednym może lecieć 100KB/s, a na drugim 400KB/s (będą "biły" się o łącze, natomiast razem go nie przekroczą (500KB/s)).
Wiem, że na pewno da się to zrobić dla jednego adresu IP przy pomocy nftables (i działa to bardzo dobrze póki co):
table inet nft-qos-static {
chain upload {
type filter hook postrouting priority filter; policy accept;
ip saddr 192.168.1.249 limit rate over 200 kbytes/second drop
}
chain download {
type filter hook prerouting priority filter; policy accept;
ip daddr 192.168.1.249 limit rate over 500 kbytes/second drop
}
}
Natomiast jak to zedytować, by połączyć wiele adresów IP zamiast jednego (ograniczenie prędkości łączne dla grupy adresów IP)?
3. W nawiązaniu do kodu z punktu nr 2, wyobraziłem sobie taki kod przy pomocy zbiorów adresów IP define (może być niepoprawna składania - kod jest jedynie "poglądowy"):
table inet nft-test-qos {
chain upload {
type filter hook postrouting priority filter; policy accept;
ip saddr { 192.168.1.249, 192.168.1.250, 192.168.1.251 } limit rate over 200 kbytes/second drop
}
chain download {
type filter hook prerouting priority filter; policy accept;
ip daddr { 192.168.1.249, 192.168.1.250, 192.168.1.251 } limit rate over 500 kbytes/second drop
}
}
Zatem czy to nie byłaby suma ograniczenia prędkości dla danych 3 adresów powyżej? Czy może kod zadziała ograniczając każdy jeden adres z 3 do tych np. 500KB/s (z osobna, a nie razem)?
4. W tym punkcie również nawiązuje do pytania nr 2. Szukając w internecie i czytając sporo o nftables natrafiłem jeszcze na metody: goto oraz jump. Zatem wyobraziłem sobie taki kod w głowie (może być niepoprawny - kod jest jedynie "poglądowy"):
table inet test-ograniczen {
chain download-end {
limit rate over 500 kbytes/second drop
}
chain download {
type filter hook prerouting priority filter; policy accept;
ip daddr 10.6.0.100 jump download-end
ip daddr 10.6.0.101 jump download-end
ip daddr 10.6.0.102 jump download-end
}
}
I czy to prawo działać? Czy ten kod nie ograniczyłby mi może przepustowości łącza dla tych 3 adresów IP (łącznie, a nie z osobna)?